|
@@ -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 = <ILanguage>{
|
|
|
+ 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'}],
|
|
|
+ ]
|
|
|
+ }
|
|
|
+};
|