From 38bdd17d436da4da397a502010a24b649fcc763f Mon Sep 17 00:00:00 2001 From: TJ Kells Date: Fri, 30 Mar 2018 15:30:00 -0500 Subject: [PATCH 1/4] Add rust colorization support --- scripts/bundle.js | 1 + src/monaco.contribution.ts | 1 + src/rust/rust.contribution.ts | 17 ++++ src/rust/rust.js | 116 ++++++++++++++++++++++++ src/rust/rust.test.ts | 134 +++++++++++++++++++++++++++ src/rust/rust.ts | 164 ++++++++++++++++++++++++++++++++++ test/setup.js | 1 + 7 files changed, 434 insertions(+) create mode 100644 src/rust/rust.contribution.ts create mode 100644 src/rust/rust.js create mode 100644 src/rust/rust.test.ts create mode 100644 src/rust/rust.ts diff --git a/scripts/bundle.js b/scripts/bundle.js index d9ae2b70..b1ad53af 100644 --- a/scripts/bundle.js +++ b/scripts/bundle.js @@ -46,6 +46,7 @@ bundleOne('python/python'); bundleOne('r/r'); bundleOne('razor/razor'); bundleOne('ruby/ruby'); +bundleOne('rust/rust'); bundleOne('scss/scss'); bundleOne('sql/sql'); bundleOne('swift/swift'); diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 00ee430c..d1c71f9c 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -34,6 +34,7 @@ import './razor/razor.contribution'; import './redis/redis.contribution'; import './redshift/redshift.contribution'; import './ruby/ruby.contribution'; +import './rust/rust.contribution'; import './sb/sb.contribution'; import './scss/scss.contribution'; import './solidity/solidity.contribution'; diff --git a/src/rust/rust.contribution.ts b/src/rust/rust.contribution.ts new file mode 100644 index 00000000..15dd4f29 --- /dev/null +++ b/src/rust/rust.contribution.ts @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import { registerLanguage } from '../_.contribution'; + +// Allow for running under nodejs/requirejs in tests +const _monaco: typeof monaco = (typeof monaco === 'undefined' ? (self).monaco : monaco); + +registerLanguage({ + id: 'rust', + extensions: ['.rs', '.rlib'], + aliases: ['Rust', 'rust'], + loader: () => _monaco.Promise.wrap(import('./rust')) +}); diff --git a/src/rust/rust.js b/src/rust/rust.js new file mode 100644 index 00000000..0df66518 --- /dev/null +++ b/src/rust/rust.js @@ -0,0 +1,116 @@ +return { + tokenPostfix: '.rust', + defaultToken: '', + keywords: [ + 'as', 'box', 'break', 'const', 'continue', 'crate', 'else', 'enum', + 'extern', 'false', 'fn', 'for', 'if', 'impl', 'in', 'let', 'loop', + 'match', 'mod', 'move', 'mut', 'pub', 'ref', 'return', 'self', + 'static', 'struct', 'super', 'trait', 'true', 'type', 'unsafe', 'use', + 'where', 'while', 'catch', 'default', 'union', 'static', 'abstract', + 'alignof', 'become', 'do', 'final', 'macro', 'offsetof', 'override', + 'priv', 'proc', 'pure', 'sizeof', 'typeof', 'unsized', 'virtual', + 'yield', + ], + + typeKeywords: [ + 'Self', 'm32', 'm64', 'm128', 'f80', 'f16', 'f128', 'int', 'uint', + 'float', 'char', 'bool', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64', 'i8', + 'i16', 'i32', 'i64', 'str', 'Option', 'Either', 'c_float', 'c_double', + 'c_void', 'FILE', 'fpos_t', 'DIR', 'dirent', 'c_char', 'c_schar', + 'c_uchar', 'c_short', 'c_ushort', 'c_int', 'c_uint', 'c_long', + 'c_ulong', 'size_t', 'ptrdiff_t', 'clock_t', 'time_t', 'c_longlong', + 'c_ulonglong', 'intptr_t', 'uintptr_t', 'off_t', 'dev_t', 'ino_t', + 'pid_t', 'mode_t', 'ssize_t', + ], + + constants: [ + 'true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err', + ], + + supportConstants: [ + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'EOF', 'SEEK_SET', + 'SEEK_CUR', 'SEEK_END', '_IOFBF', '_IONBF', '_IOLBF', 'BUFSIZ', + 'FOPEN_MAX', 'FILENAME_MAX', 'L_tmpnam', 'TMP_MAX', 'O_RDONLY', + 'O_WRONLY', 'O_RDWR', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_TRUNC', + 'S_IFIFO', 'S_IFCHR', 'S_IFBLK', 'S_IFDIR', 'S_IFREG', 'S_IFMT', + 'S_IEXEC', 'S_IWRITE', 'S_IREAD', 'S_IRWXU', 'S_IXUSR', 'S_IWUSR', + 'S_IRUSR', 'F_OK', 'R_OK', 'W_OK', 'X_OK', 'STDIN_FILENO', + 'STDOUT_FILENO', 'STDERR_FILENO', + ], + + supportMacros: [ + 'format!', 'print!', 'println!', 'panic!', 'format_args!', 'unreachable!', + 'write!', 'writeln!' + ], + + operators: [ + '!', '!=', '%', '%=', '&', '&=', '&&', '*', '*=', '+', '+=', '-', '-=', + '->', '.', '..', '...', '/', '/=', ':', ';', '<<', '<<=', '<', '<=', '=', + '==', '=>', '>', '>=', '>>', '>>=', '@', '^', '^=', '|', '|=', '||', '_', + '?', '#' + ], + + escapes: /\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/, + delimiters: /[,]/, + symbols: /[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/, + + tokenizer: { + root: [ + [/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, + { cases: { '@typeKeywords': 'keyword.type', + '@keywords': 'keyword', + '@supportConstants': 'keyword', + '@supportMacros': 'keyword', + '@constants': 'keyword', + '@default': 'identifier', } + } + ], + // Designator + [/\$/, 'identifier'], + // Lifetime annotations + [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], + // Byte literal + [/'\S'/, 'string.single.quote'], + // Strings + [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], + {include: '@numbers'}, + // Whitespace + comments + { include: '@whitespace' }, + [/@delimiters/, { cases: { '@keywords': 'keyword', + '@default': 'delimiter' }}], + + [/[{}()\[\]<>]/, '@brackets'], + [/@symbols/, { cases: {'@operators': 'operator', '@default' : '' }}], + ], + + whitespace: [ + [/[ \t\r\n]+/, 'white'], + [/\/\*/, 'comment', '@comment'], + [/\/\/.*$/, 'comment'], + ], + + comment: [ + [/[^\/*]+/, 'comment' ], + [/\/\*/, 'comment', '@push' ], + ["\\*/", 'comment', '@pop'], + [/[\/*]/, 'comment' ] + ], + + string: [ + [/[^\\"]+/, 'string'], + [/@escapes/, 'string.escape'], + [/\\./, 'string.escape.invalid'], + [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' } ] + ], + numbers: [ + //Integer Decimal + [/[0-9][0-9_]*([ui](8|16|32|64)?)?/, 'number'], + // Float Typed + [/[0-9][0-9_]*(\.[0-9][0-9_]*)?([eE][+-][0-9_]+)?(f32|f64)/, 'number'], + // Float Exponent + [/[0-9][0-9_]*(\.[0-9][0-9_]*)?[eE][+-][0-9_]+(f32|f64)?/, 'number'], + // Float Fraction + [/[0-9][0-9_]*\.[0-9][0-9_]*([eE][+-][0-9_]+)?(f32|f64)?/, 'number'], + ] + } +} diff --git a/src/rust/rust.test.ts b/src/rust/rust.test.ts new file mode 100644 index 00000000..99a6481c --- /dev/null +++ b/src/rust/rust.test.ts @@ -0,0 +1,134 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import { testTokenization } from '../test/testRunner'; + +testTokenization('rust', [ + // String + [{ + line: 'let a = "This is a string"', + tokens: [ + {startIndex: 0, type: "keyword.rust"}, + {startIndex: 3, type: "white.rust"}, + {startIndex: 4, type: "identifier.rust"}, + {startIndex: 5, type: "white.rust"}, + {startIndex: 6, type: "operator.rust"}, + {startIndex: 7, type: "white.rust"}, + {startIndex: 8, type: "string.quote.rust"}, + {startIndex: 9, type: "string.rust"}, + {startIndex: 25, type: "string.quote.rust"}, + ] + }], + // Byte literal + [{ + line: "let a = 'c'", + tokens: [ + {startIndex: 0, type: "keyword.rust"}, + {startIndex: 3, type: "white.rust"}, + {startIndex: 4, type: "identifier.rust"}, + {startIndex: 5, type: "white.rust"}, + {startIndex: 6, type: "operator.rust"}, + {startIndex: 7, type: "white.rust"}, + {startIndex: 8, type: "string.byteliteral.rust"}, + ] + }], + + // Comment + [{ + line: "// This is a comment", + tokens: [{startIndex: 0, type: "comment.rust"},] + }], + // Block Comment + [{ + line: "/* This is a block comment */", + tokens: [{startIndex: 0, type: "comment.rust"},] + }], + [{ + line: "/* This is a block comment // with a comment */", + tokens: [{startIndex: 0, type: "comment.rust"},] + }], + // Lifetime Annotation + [{ + line: 'static NAME: &\'static str = "John"', + tokens: [ + {startIndex: 0, type: "keyword.rust"}, + {startIndex: 6, type: "white.rust"}, + {startIndex: 7, type: "identifier.rust"}, + {startIndex: 11, type: "operator.rust"}, + {startIndex: 12, type: "white.rust"}, + {startIndex: 13, type: "operator.rust"}, + {startIndex: 14, type: "identifier.rust"}, + {startIndex: 21, type: "white.rust"}, + {startIndex: 22, type: "keyword.type.rust"}, + {startIndex: 25, type: "white.rust"}, + {startIndex: 26, type: "operator.rust"}, + {startIndex: 27, type: "white.rust"}, + {startIndex: 28, type: "string.quote.rust"}, + {startIndex: 29, type: "string.rust"}, + {startIndex: 33, type: "string.quote.rust"} + ] + }], + // Type Keywords + [{ + line: 'let logical: bool = true', + tokens: [ + {startIndex: 0, type: "keyword.rust"}, + {startIndex: 3, type: "white.rust"}, + {startIndex: 4, type: "identifier.rust"}, + {startIndex: 11, type: "operator.rust"}, + {startIndex: 12, type: "white.rust"}, + {startIndex: 13, type: "keyword.type.rust"}, + {startIndex: 17, type: "white.rust"}, + {startIndex: 18, type: "operator.rust"}, + {startIndex: 19, type: "white.rust"}, + {startIndex: 20, type: "keyword.rust"}, + ] + }], + // Numbers + // Integer + [{ + line: '1000_000_00u32', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], + // Float + [{ + line: '1.0f32', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], + // Hex + [{ + line: '0xFA_01i32', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], + // Exponent + [{ + line: '1.0E-8234987_f64', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], + // Binary + [{ + line: '0b0_1u8', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], + // Octal + [{ + line: '0o0000_0010u64', + tokens: [ + {startIndex: 0, type: "number.rust"}, + ] + }], +]); diff --git a/src/rust/rust.ts b/src/rust/rust.ts new file mode 100644 index 00000000..0d08ca18 --- /dev/null +++ b/src/rust/rust.ts @@ -0,0 +1,164 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import IRichLanguageConfiguration = monaco.languages.LanguageConfiguration; +import ILanguage = monaco.languages.IMonarchLanguage; + +export const conf: IRichLanguageConfiguration = { + comments: { + lineComment: '//', + blockComment: ['/*', '*/'], + }, + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'] + ], + autoClosingPairs: [ + { open: '[', close: ']' }, + { open: '{', close: '}' }, + { open: '(', close: ')' }, + { open: '\'', close: '\'', notIn: ['string', 'comment'] }, + { open: '"', close: '"', notIn: ['string'] }, + ], + surroundingPairs: [ + { open: '{', close: '}' }, + { open: '[', close: ']' }, + { open: '(', close: ')' }, + { open: '"', close: '"' }, + { open: '\'', close: '\'' }, + ], + folding: { + markers: { + start: new RegExp("^\\s*#pragma\\s+region\\b"), + end: new RegExp("^\\s*#pragma\\s+endregion\\b") + } + } +}; + +export const language = { + tokenPostfix: '.rust', + defaultToken: 'invalid', + keywords: [ + 'as', 'box', 'break', 'const', 'continue', 'crate', 'else', 'enum', + 'extern', 'false', 'fn', 'for', 'if', 'impl', 'in', 'let', 'loop', + 'match', 'mod', 'move', 'mut', 'pub', 'ref', 'return', 'self', + 'static', 'struct', 'super', 'trait', 'true', 'type', 'unsafe', 'use', + 'where', 'while', 'catch', 'default', 'union', 'static', 'abstract', + 'alignof', 'become', 'do', 'final', 'macro', 'offsetof', 'override', + 'priv', 'proc', 'pure', 'sizeof', 'typeof', 'unsized', 'virtual', + 'yield', + ], + + typeKeywords: [ + 'Self', 'm32', 'm64', 'm128', 'f80', 'f16', 'f128', 'int', 'uint', + 'float', 'char', 'bool', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64', 'i8', + 'i16', 'i32', 'i64', 'str', 'Option', 'Either', 'c_float', 'c_double', + 'c_void', 'FILE', 'fpos_t', 'DIR', 'dirent', 'c_char', 'c_schar', + 'c_uchar', 'c_short', 'c_ushort', 'c_int', 'c_uint', 'c_long', + 'c_ulong', 'size_t', 'ptrdiff_t', 'clock_t', 'time_t', 'c_longlong', + 'c_ulonglong', 'intptr_t', 'uintptr_t', 'off_t', 'dev_t', 'ino_t', + 'pid_t', 'mode_t', 'ssize_t', + ], + + constants: [ + 'true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err', + ], + + supportConstants: [ + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'EOF', 'SEEK_SET', + 'SEEK_CUR', 'SEEK_END', '_IOFBF', '_IONBF', '_IOLBF', 'BUFSIZ', + 'FOPEN_MAX', 'FILENAME_MAX', 'L_tmpnam', 'TMP_MAX', 'O_RDONLY', + 'O_WRONLY', 'O_RDWR', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_TRUNC', + 'S_IFIFO', 'S_IFCHR', 'S_IFBLK', 'S_IFDIR', 'S_IFREG', 'S_IFMT', + 'S_IEXEC', 'S_IWRITE', 'S_IREAD', 'S_IRWXU', 'S_IXUSR', 'S_IWUSR', + 'S_IRUSR', 'F_OK', 'R_OK', 'W_OK', 'X_OK', 'STDIN_FILENO', + 'STDOUT_FILENO', 'STDERR_FILENO', + ], + + supportMacros: [ + 'format!', 'print!', 'println!', 'panic!', 'format_args!', 'unreachable!', + 'write!', 'writeln!' + ], + + operators: [ + '!', '!=', '%', '%=', '&', '&=', '&&', '*', '*=', '+', '+=', '-', '-=', + '->', '.', '..', '...', '/', '/=', ':', ';', '<<', '<<=', '<', '<=', '=', + '==', '=>', '>', '>=', '>>', '>>=', '@', '^', '^=', '|', '|=', '||', '_', + '?', '#' + ], + + escapes: /\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/, + delimiters: /[,]/, + symbols: /[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/, + intSuffixes: /[iu](8|16|32|64|128|size)/, + floatSuffixes: /f(32|64)/, + + tokenizer: { + root: [ + [/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, + { cases: { '@typeKeywords': 'keyword.type', + '@keywords': 'keyword', + '@supportConstants': 'keyword', + '@supportMacros': 'keyword', + '@constants': 'keyword', + '@default': 'identifier', } + } + ], + // Designator + [/\$/, 'identifier'], + // Lifetime annotations + [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], + // Byte literal + [/'\S'/, 'string.byteliteral'], + // Strings + [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], + {include: '@numbers'}, + // Whitespace + comments + { include: '@whitespace' }, + [/@delimiters/, { cases: { '@keywords': 'keyword', + '@default': 'delimiter' }}], + + [/[{}()\[\]<>]/, '@brackets'], + [/@symbols/, { cases: {'@operators': 'operator', '@default' : '' }}], + ], + + whitespace: [ + [/[ \t\r\n]+/, 'white'], + [/\/\*/, 'comment', '@comment'], + [/\/\/.*$/, 'comment'], + ], + + comment: [ + [/[^\/*]+/, 'comment' ], + [/\/\*/, 'comment', '@push' ], + ["\\*/", 'comment', '@pop'], + [/[\/*]/, 'comment' ] + ], + + string: [ + [/[^\\"]+/, 'string'], + [/@escapes/, 'string.escape'], + [/\\./, 'string.escape.invalid'], + [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' } ] + ], + numbers: [ + //Octal + [/(0o[0-7_]+)(@intSuffixes)?/, {token: 'number', log: 'Octal'}], + //Binary + [/(0b[0-1_]+)(@intSuffixes)?/, {token: 'number', log: 'Binary'}], + //Exponent + [/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, {token: 'number', log: 'Exponent'}], + //Float + [/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/,{token: 'number', log: 'Float'}], + //Hexadecimal + [/(0x[\da-fA-F]+)_?(@intSuffixes)?/, {token: 'number', log: 'Hexadecimal'}], + //Integer + [/[\d][\d_]*(@intSuffixes?)?/, {token: 'number', log: 'Integer'}], + ] + } +}; diff --git a/test/setup.js b/test/setup.js index b446648f..f3a4c5a1 100644 --- a/test/setup.js +++ b/test/setup.js @@ -50,6 +50,7 @@ define(['require'], function (require) { 'release/dev/r/r.test', 'release/dev/razor/razor.test', 'release/dev/ruby/ruby.test', + 'release/dev/rust/rust.test', 'release/dev/scss/scss.test', 'release/dev/swift/swift.test', 'release/dev/sql/sql.test', From 1f658b24a4390d5f798bd67118b35ef0a0efc8c1 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 9 Apr 2018 15:58:05 +0200 Subject: [PATCH 2/4] Remove compilation output --- src/rust/rust.js | 116 ----------------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 src/rust/rust.js diff --git a/src/rust/rust.js b/src/rust/rust.js deleted file mode 100644 index 0df66518..00000000 --- a/src/rust/rust.js +++ /dev/null @@ -1,116 +0,0 @@ -return { - tokenPostfix: '.rust', - defaultToken: '', - keywords: [ - 'as', 'box', 'break', 'const', 'continue', 'crate', 'else', 'enum', - 'extern', 'false', 'fn', 'for', 'if', 'impl', 'in', 'let', 'loop', - 'match', 'mod', 'move', 'mut', 'pub', 'ref', 'return', 'self', - 'static', 'struct', 'super', 'trait', 'true', 'type', 'unsafe', 'use', - 'where', 'while', 'catch', 'default', 'union', 'static', 'abstract', - 'alignof', 'become', 'do', 'final', 'macro', 'offsetof', 'override', - 'priv', 'proc', 'pure', 'sizeof', 'typeof', 'unsized', 'virtual', - 'yield', - ], - - typeKeywords: [ - 'Self', 'm32', 'm64', 'm128', 'f80', 'f16', 'f128', 'int', 'uint', - 'float', 'char', 'bool', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64', 'i8', - 'i16', 'i32', 'i64', 'str', 'Option', 'Either', 'c_float', 'c_double', - 'c_void', 'FILE', 'fpos_t', 'DIR', 'dirent', 'c_char', 'c_schar', - 'c_uchar', 'c_short', 'c_ushort', 'c_int', 'c_uint', 'c_long', - 'c_ulong', 'size_t', 'ptrdiff_t', 'clock_t', 'time_t', 'c_longlong', - 'c_ulonglong', 'intptr_t', 'uintptr_t', 'off_t', 'dev_t', 'ino_t', - 'pid_t', 'mode_t', 'ssize_t', - ], - - constants: [ - 'true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err', - ], - - supportConstants: [ - 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'EOF', 'SEEK_SET', - 'SEEK_CUR', 'SEEK_END', '_IOFBF', '_IONBF', '_IOLBF', 'BUFSIZ', - 'FOPEN_MAX', 'FILENAME_MAX', 'L_tmpnam', 'TMP_MAX', 'O_RDONLY', - 'O_WRONLY', 'O_RDWR', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_TRUNC', - 'S_IFIFO', 'S_IFCHR', 'S_IFBLK', 'S_IFDIR', 'S_IFREG', 'S_IFMT', - 'S_IEXEC', 'S_IWRITE', 'S_IREAD', 'S_IRWXU', 'S_IXUSR', 'S_IWUSR', - 'S_IRUSR', 'F_OK', 'R_OK', 'W_OK', 'X_OK', 'STDIN_FILENO', - 'STDOUT_FILENO', 'STDERR_FILENO', - ], - - supportMacros: [ - 'format!', 'print!', 'println!', 'panic!', 'format_args!', 'unreachable!', - 'write!', 'writeln!' - ], - - operators: [ - '!', '!=', '%', '%=', '&', '&=', '&&', '*', '*=', '+', '+=', '-', '-=', - '->', '.', '..', '...', '/', '/=', ':', ';', '<<', '<<=', '<', '<=', '=', - '==', '=>', '>', '>=', '>>', '>>=', '@', '^', '^=', '|', '|=', '||', '_', - '?', '#' - ], - - escapes: /\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/, - delimiters: /[,]/, - symbols: /[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/, - - tokenizer: { - root: [ - [/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, - { cases: { '@typeKeywords': 'keyword.type', - '@keywords': 'keyword', - '@supportConstants': 'keyword', - '@supportMacros': 'keyword', - '@constants': 'keyword', - '@default': 'identifier', } - } - ], - // Designator - [/\$/, 'identifier'], - // Lifetime annotations - [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], - // Byte literal - [/'\S'/, 'string.single.quote'], - // Strings - [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], - {include: '@numbers'}, - // Whitespace + comments - { include: '@whitespace' }, - [/@delimiters/, { cases: { '@keywords': 'keyword', - '@default': 'delimiter' }}], - - [/[{}()\[\]<>]/, '@brackets'], - [/@symbols/, { cases: {'@operators': 'operator', '@default' : '' }}], - ], - - whitespace: [ - [/[ \t\r\n]+/, 'white'], - [/\/\*/, 'comment', '@comment'], - [/\/\/.*$/, 'comment'], - ], - - comment: [ - [/[^\/*]+/, 'comment' ], - [/\/\*/, 'comment', '@push' ], - ["\\*/", 'comment', '@pop'], - [/[\/*]/, 'comment' ] - ], - - string: [ - [/[^\\"]+/, 'string'], - [/@escapes/, 'string.escape'], - [/\\./, 'string.escape.invalid'], - [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' } ] - ], - numbers: [ - //Integer Decimal - [/[0-9][0-9_]*([ui](8|16|32|64)?)?/, 'number'], - // Float Typed - [/[0-9][0-9_]*(\.[0-9][0-9_]*)?([eE][+-][0-9_]+)?(f32|f64)/, 'number'], - // Float Exponent - [/[0-9][0-9_]*(\.[0-9][0-9_]*)?[eE][+-][0-9_]+(f32|f64)?/, 'number'], - // Float Fraction - [/[0-9][0-9_]*\.[0-9][0-9_]*([eE][+-][0-9_]+)?(f32|f64)?/, 'number'], - ] - } -} From 3b733d98222f4aa5faae213611c35350d949e9da Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 9 Apr 2018 16:03:23 +0200 Subject: [PATCH 3/4] Format code --- README.md | 1 + src/rust/rust.ts | 225 ++++++++++++++++++++++++----------------------- 2 files changed, 117 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 059e3add..ba15e6a0 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Colorization and configuration supports for multiple languages for the Monaco Ed * r * razor * ruby +* rust * sql * swift * vb diff --git a/src/rust/rust.ts b/src/rust/rust.ts index 0d08ca18..58cb8cbe 100644 --- a/src/rust/rust.ts +++ b/src/rust/rust.ts @@ -41,124 +41,131 @@ export const conf: IRichLanguageConfiguration = { }; export const language = { - tokenPostfix: '.rust', - defaultToken: 'invalid', - keywords: [ - 'as', 'box', 'break', 'const', 'continue', 'crate', 'else', 'enum', - 'extern', 'false', 'fn', 'for', 'if', 'impl', 'in', 'let', 'loop', - 'match', 'mod', 'move', 'mut', 'pub', 'ref', 'return', 'self', - 'static', 'struct', 'super', 'trait', 'true', 'type', 'unsafe', 'use', - 'where', 'while', 'catch', 'default', 'union', 'static', 'abstract', - 'alignof', 'become', 'do', 'final', 'macro', 'offsetof', 'override', - 'priv', 'proc', 'pure', 'sizeof', 'typeof', 'unsized', 'virtual', - 'yield', - ], + tokenPostfix: '.rust', + defaultToken: 'invalid', + keywords: [ + 'as', 'box', 'break', 'const', 'continue', 'crate', 'else', 'enum', + 'extern', 'false', 'fn', 'for', 'if', 'impl', 'in', 'let', 'loop', + 'match', 'mod', 'move', 'mut', 'pub', 'ref', 'return', 'self', + 'static', 'struct', 'super', 'trait', 'true', 'type', 'unsafe', 'use', + 'where', 'while', 'catch', 'default', 'union', 'static', 'abstract', + 'alignof', 'become', 'do', 'final', 'macro', 'offsetof', 'override', + 'priv', 'proc', 'pure', 'sizeof', 'typeof', 'unsized', 'virtual', + 'yield', + ], - typeKeywords: [ - 'Self', 'm32', 'm64', 'm128', 'f80', 'f16', 'f128', 'int', 'uint', - 'float', 'char', 'bool', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64', 'i8', - 'i16', 'i32', 'i64', 'str', 'Option', 'Either', 'c_float', 'c_double', - 'c_void', 'FILE', 'fpos_t', 'DIR', 'dirent', 'c_char', 'c_schar', - 'c_uchar', 'c_short', 'c_ushort', 'c_int', 'c_uint', 'c_long', - 'c_ulong', 'size_t', 'ptrdiff_t', 'clock_t', 'time_t', 'c_longlong', - 'c_ulonglong', 'intptr_t', 'uintptr_t', 'off_t', 'dev_t', 'ino_t', - 'pid_t', 'mode_t', 'ssize_t', - ], + typeKeywords: [ + 'Self', 'm32', 'm64', 'm128', 'f80', 'f16', 'f128', 'int', 'uint', + 'float', 'char', 'bool', 'u8', 'u16', 'u32', 'u64', 'f32', 'f64', 'i8', + 'i16', 'i32', 'i64', 'str', 'Option', 'Either', 'c_float', 'c_double', + 'c_void', 'FILE', 'fpos_t', 'DIR', 'dirent', 'c_char', 'c_schar', + 'c_uchar', 'c_short', 'c_ushort', 'c_int', 'c_uint', 'c_long', + 'c_ulong', 'size_t', 'ptrdiff_t', 'clock_t', 'time_t', 'c_longlong', + 'c_ulonglong', 'intptr_t', 'uintptr_t', 'off_t', 'dev_t', 'ino_t', + 'pid_t', 'mode_t', 'ssize_t', + ], - constants: [ - 'true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err', - ], + constants: [ + 'true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err', + ], - supportConstants: [ - 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'EOF', 'SEEK_SET', - 'SEEK_CUR', 'SEEK_END', '_IOFBF', '_IONBF', '_IOLBF', 'BUFSIZ', - 'FOPEN_MAX', 'FILENAME_MAX', 'L_tmpnam', 'TMP_MAX', 'O_RDONLY', - 'O_WRONLY', 'O_RDWR', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_TRUNC', - 'S_IFIFO', 'S_IFCHR', 'S_IFBLK', 'S_IFDIR', 'S_IFREG', 'S_IFMT', - 'S_IEXEC', 'S_IWRITE', 'S_IREAD', 'S_IRWXU', 'S_IXUSR', 'S_IWUSR', - 'S_IRUSR', 'F_OK', 'R_OK', 'W_OK', 'X_OK', 'STDIN_FILENO', - 'STDOUT_FILENO', 'STDERR_FILENO', - ], + supportConstants: [ + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'EOF', 'SEEK_SET', + 'SEEK_CUR', 'SEEK_END', '_IOFBF', '_IONBF', '_IOLBF', 'BUFSIZ', + 'FOPEN_MAX', 'FILENAME_MAX', 'L_tmpnam', 'TMP_MAX', 'O_RDONLY', + 'O_WRONLY', 'O_RDWR', 'O_APPEND', 'O_CREAT', 'O_EXCL', 'O_TRUNC', + 'S_IFIFO', 'S_IFCHR', 'S_IFBLK', 'S_IFDIR', 'S_IFREG', 'S_IFMT', + 'S_IEXEC', 'S_IWRITE', 'S_IREAD', 'S_IRWXU', 'S_IXUSR', 'S_IWUSR', + 'S_IRUSR', 'F_OK', 'R_OK', 'W_OK', 'X_OK', 'STDIN_FILENO', + 'STDOUT_FILENO', 'STDERR_FILENO', + ], - supportMacros: [ - 'format!', 'print!', 'println!', 'panic!', 'format_args!', 'unreachable!', - 'write!', 'writeln!' - ], + supportMacros: [ + 'format!', 'print!', 'println!', 'panic!', 'format_args!', 'unreachable!', + 'write!', 'writeln!' + ], - operators: [ - '!', '!=', '%', '%=', '&', '&=', '&&', '*', '*=', '+', '+=', '-', '-=', - '->', '.', '..', '...', '/', '/=', ':', ';', '<<', '<<=', '<', '<=', '=', - '==', '=>', '>', '>=', '>>', '>>=', '@', '^', '^=', '|', '|=', '||', '_', - '?', '#' - ], + operators: [ + '!', '!=', '%', '%=', '&', '&=', '&&', '*', '*=', '+', '+=', '-', '-=', + '->', '.', '..', '...', '/', '/=', ':', ';', '<<', '<<=', '<', '<=', '=', + '==', '=>', '>', '>=', '>>', '>>=', '@', '^', '^=', '|', '|=', '||', '_', + '?', '#' + ], - escapes: /\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/, - delimiters: /[,]/, - symbols: /[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/, - intSuffixes: /[iu](8|16|32|64|128|size)/, - floatSuffixes: /f(32|64)/, + escapes: /\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/, + delimiters: /[,]/, + symbols: /[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/, + intSuffixes: /[iu](8|16|32|64|128|size)/, + floatSuffixes: /f(32|64)/, - tokenizer: { - root: [ - [/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, - { cases: { '@typeKeywords': 'keyword.type', - '@keywords': 'keyword', - '@supportConstants': 'keyword', - '@supportMacros': 'keyword', - '@constants': 'keyword', - '@default': 'identifier', } - } - ], - // Designator - [/\$/, 'identifier'], - // Lifetime annotations - [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], - // Byte literal - [/'\S'/, 'string.byteliteral'], - // Strings - [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], - {include: '@numbers'}, - // Whitespace + comments - { include: '@whitespace' }, - [/@delimiters/, { cases: { '@keywords': 'keyword', - '@default': 'delimiter' }}], + tokenizer: { + root: [ + [/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/, + { + cases: { + '@typeKeywords': 'keyword.type', + '@keywords': 'keyword', + '@supportConstants': 'keyword', + '@supportMacros': 'keyword', + '@constants': 'keyword', + '@default': 'identifier', + } + } + ], + // Designator + [/\$/, 'identifier'], + // Lifetime annotations + [/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/, 'identifier'], + // Byte literal + [/'\S'/, 'string.byteliteral'], + // Strings + [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], + { include: '@numbers' }, + // Whitespace + comments + { include: '@whitespace' }, + [/@delimiters/, { + cases: { + '@keywords': 'keyword', + '@default': 'delimiter' + } + }], - [/[{}()\[\]<>]/, '@brackets'], - [/@symbols/, { cases: {'@operators': 'operator', '@default' : '' }}], - ], + [/[{}()\[\]<>]/, '@brackets'], + [/@symbols/, { cases: { '@operators': 'operator', '@default': '' } }], + ], - whitespace: [ - [/[ \t\r\n]+/, 'white'], - [/\/\*/, 'comment', '@comment'], - [/\/\/.*$/, 'comment'], - ], + whitespace: [ + [/[ \t\r\n]+/, 'white'], + [/\/\*/, 'comment', '@comment'], + [/\/\/.*$/, 'comment'], + ], - comment: [ - [/[^\/*]+/, 'comment' ], - [/\/\*/, 'comment', '@push' ], - ["\\*/", 'comment', '@pop'], - [/[\/*]/, 'comment' ] - ], + comment: [ + [/[^\/*]+/, 'comment'], + [/\/\*/, 'comment', '@push'], + ["\\*/", 'comment', '@pop'], + [/[\/*]/, 'comment'] + ], - string: [ - [/[^\\"]+/, 'string'], - [/@escapes/, 'string.escape'], - [/\\./, 'string.escape.invalid'], - [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' } ] - ], - numbers: [ - //Octal - [/(0o[0-7_]+)(@intSuffixes)?/, {token: 'number', log: 'Octal'}], - //Binary - [/(0b[0-1_]+)(@intSuffixes)?/, {token: 'number', log: 'Binary'}], - //Exponent - [/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, {token: 'number', log: 'Exponent'}], - //Float - [/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/,{token: 'number', log: 'Float'}], - //Hexadecimal - [/(0x[\da-fA-F]+)_?(@intSuffixes)?/, {token: 'number', log: 'Hexadecimal'}], - //Integer - [/[\d][\d_]*(@intSuffixes?)?/, {token: 'number', log: 'Integer'}], - ] - } + string: [ + [/[^\\"]+/, 'string'], + [/@escapes/, 'string.escape'], + [/\\./, 'string.escape.invalid'], + [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' }] + ], + numbers: [ + //Octal + [/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number', log: 'Octal' }], + //Binary + [/(0b[0-1_]+)(@intSuffixes)?/, { token: 'number', log: 'Binary' }], + //Exponent + [/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, { token: 'number', log: 'Exponent' }], + //Float + [/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/, { token: 'number', log: 'Float' }], + //Hexadecimal + [/(0x[\da-fA-F]+)_?(@intSuffixes)?/, { token: 'number', log: 'Hexadecimal' }], + //Integer + [/[\d][\d_]*(@intSuffixes?)?/, { token: 'number', log: 'Integer' }], + ] + } }; From 8af485d6bf26b5a43c6e675f7f39f688b2e0352c Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 9 Apr 2018 16:04:17 +0200 Subject: [PATCH 4/4] Remove log statements --- src/rust/rust.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/rust/rust.ts b/src/rust/rust.ts index 58cb8cbe..da16f28c 100644 --- a/src/rust/rust.ts +++ b/src/rust/rust.ts @@ -155,17 +155,17 @@ export const language = { ], numbers: [ //Octal - [/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number', log: 'Octal' }], + [/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number' }], //Binary - [/(0b[0-1_]+)(@intSuffixes)?/, { token: 'number', log: 'Binary' }], + [/(0b[0-1_]+)(@intSuffixes)?/, { token: 'number' }], //Exponent - [/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, { token: 'number', log: 'Exponent' }], + [/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, { token: 'number' }], //Float - [/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/, { token: 'number', log: 'Float' }], + [/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/, { token: 'number' }], //Hexadecimal - [/(0x[\da-fA-F]+)_?(@intSuffixes)?/, { token: 'number', log: 'Hexadecimal' }], + [/(0x[\da-fA-F]+)_?(@intSuffixes)?/, { token: 'number' }], //Integer - [/[\d][\d_]*(@intSuffixes?)?/, { token: 'number', log: 'Integer' }], + [/[\d][\d_]*(@intSuffixes?)?/, { token: 'number' }], ] } };