You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
6.8 KiB
157 lines
6.8 KiB
/*--------------------------------------------------------------------------------------------- |
|
* Copyright (c) Microsoft Corporation. All rights reserved. |
|
* Licensed under the MIT License. See License.txt in the project root for license information. |
|
*--------------------------------------------------------------------------------------------*/ |
|
define(["require", "exports"], function (require, exports) { |
|
'use strict'; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.conf = { |
|
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") |
|
} |
|
} |
|
}; |
|
exports.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' }], |
|
//Binary |
|
[/(0b[0-1_]+)(@intSuffixes)?/, { token: 'number' }], |
|
//Exponent |
|
[/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/, { token: 'number' }], |
|
//Float |
|
[/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/, { token: 'number' }], |
|
//Hexadecimal |
|
[/(0x[\da-fA-F]+)_?(@intSuffixes)?/, { token: 'number' }], |
|
//Integer |
|
[/[\d][\d_]*(@intSuffixes?)?/, { token: 'number' }], |
|
] |
|
} |
|
}; |
|
});
|
|
|