|
|
|
@ -75,134 +75,47 @@ export const conf: languages.LanguageConfiguration = {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const language = {
|
|
|
|
|
|
|
|
|
|
defaultToken: 'invalid',
|
|
|
|
|
tokenPostfix: '.ts',
|
|
|
|
|
|
|
|
|
|
typeKeywords: ['any', 'bigint', 'boolean', 'number', 'object', 'string', 'unknown', 'void'],
|
|
|
|
|
typeKeywords: [
|
|
|
|
|
'any', 'bigint', 'boolean', 'number', 'object', 'string', 'unknown', 'void',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
ctrlKeywords: [
|
|
|
|
|
'export',
|
|
|
|
|
'default',
|
|
|
|
|
'return',
|
|
|
|
|
'as',
|
|
|
|
|
'if',
|
|
|
|
|
'break',
|
|
|
|
|
'case',
|
|
|
|
|
'catch',
|
|
|
|
|
'continue',
|
|
|
|
|
'do',
|
|
|
|
|
'else',
|
|
|
|
|
'finally',
|
|
|
|
|
'for',
|
|
|
|
|
'throw',
|
|
|
|
|
'try',
|
|
|
|
|
'with',
|
|
|
|
|
'yield',
|
|
|
|
|
'await',
|
|
|
|
|
'import',
|
|
|
|
|
'from',
|
|
|
|
|
'type'
|
|
|
|
|
'export', 'default', 'return', 'as', 'if', 'break', 'case', 'catch', 'continue',
|
|
|
|
|
'do', 'else', 'finally', 'for', 'throw', 'try', 'with', 'yield', 'await',
|
|
|
|
|
'import', 'from', 'type',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
alwaysKeyword: ['constructor', 'super'],
|
|
|
|
|
alwaysKeyword: [
|
|
|
|
|
'constructor', 'super',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
keywords: [
|
|
|
|
|
// Should match the keys of textToKeywordObj in
|
|
|
|
|
// https://github.com/microsoft/TypeScript/blob/master/src/compiler/scanner.ts
|
|
|
|
|
'abstract',
|
|
|
|
|
'asserts',
|
|
|
|
|
'class',
|
|
|
|
|
'const',
|
|
|
|
|
'debugger',
|
|
|
|
|
'declare',
|
|
|
|
|
'delete',
|
|
|
|
|
'enum',
|
|
|
|
|
'extends',
|
|
|
|
|
'false',
|
|
|
|
|
'function',
|
|
|
|
|
'get',
|
|
|
|
|
'implements',
|
|
|
|
|
'in',
|
|
|
|
|
'infer',
|
|
|
|
|
'instanceof',
|
|
|
|
|
'interface',
|
|
|
|
|
'is',
|
|
|
|
|
'keyof',
|
|
|
|
|
'let',
|
|
|
|
|
'module',
|
|
|
|
|
'namespace',
|
|
|
|
|
'never',
|
|
|
|
|
'new',
|
|
|
|
|
'null',
|
|
|
|
|
'out',
|
|
|
|
|
'package',
|
|
|
|
|
'private',
|
|
|
|
|
'protected',
|
|
|
|
|
'public',
|
|
|
|
|
'override',
|
|
|
|
|
'readonly',
|
|
|
|
|
'require',
|
|
|
|
|
'global',
|
|
|
|
|
'satisfies',
|
|
|
|
|
'set',
|
|
|
|
|
'static',
|
|
|
|
|
'switch',
|
|
|
|
|
'symbol',
|
|
|
|
|
'this',
|
|
|
|
|
'true',
|
|
|
|
|
'typeof',
|
|
|
|
|
'undefined',
|
|
|
|
|
'unique',
|
|
|
|
|
'var',
|
|
|
|
|
'while',
|
|
|
|
|
'async',
|
|
|
|
|
'of'
|
|
|
|
|
'abstract', 'asserts',
|
|
|
|
|
'class', 'const', 'debugger',
|
|
|
|
|
'declare', 'delete', 'enum',
|
|
|
|
|
'extends', 'false', 'function', 'get',
|
|
|
|
|
'implements', 'in', 'infer', 'instanceof', 'interface',
|
|
|
|
|
'is', 'keyof', 'let', 'module', 'namespace', 'never', 'new',
|
|
|
|
|
'null', 'out', 'package', 'private', 'protected',
|
|
|
|
|
'public', 'override', 'readonly', 'require', 'global', 'satisfies',
|
|
|
|
|
'set', 'static', 'switch', 'symbol', 'this',
|
|
|
|
|
'true', 'typeof', 'undefined', 'unique',
|
|
|
|
|
'var', 'while', 'async', 'of'
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
operators: [
|
|
|
|
|
'<=',
|
|
|
|
|
'>=',
|
|
|
|
|
'==',
|
|
|
|
|
'!=',
|
|
|
|
|
'===',
|
|
|
|
|
'!==',
|
|
|
|
|
'=>',
|
|
|
|
|
'+',
|
|
|
|
|
'-',
|
|
|
|
|
'**',
|
|
|
|
|
'*',
|
|
|
|
|
'/',
|
|
|
|
|
'%',
|
|
|
|
|
'++',
|
|
|
|
|
'--',
|
|
|
|
|
'<<',
|
|
|
|
|
'</',
|
|
|
|
|
'>>',
|
|
|
|
|
'>>>',
|
|
|
|
|
'&',
|
|
|
|
|
'|',
|
|
|
|
|
'^',
|
|
|
|
|
'!',
|
|
|
|
|
'~',
|
|
|
|
|
'&&',
|
|
|
|
|
'||',
|
|
|
|
|
'??',
|
|
|
|
|
'?',
|
|
|
|
|
':',
|
|
|
|
|
'=',
|
|
|
|
|
'+=',
|
|
|
|
|
'-=',
|
|
|
|
|
'*=',
|
|
|
|
|
'**=',
|
|
|
|
|
'/=',
|
|
|
|
|
'%=',
|
|
|
|
|
'<<=',
|
|
|
|
|
'>>=',
|
|
|
|
|
'>>>=',
|
|
|
|
|
'&=',
|
|
|
|
|
'|=',
|
|
|
|
|
'^=',
|
|
|
|
|
'@'
|
|
|
|
|
'<=', '>=', '==', '!=', '===', '!==', '=>',
|
|
|
|
|
'+', '-', '**', '*', '/', '%', '++',
|
|
|
|
|
'--', '<<', '</', '>>', '>>>', '&', '|',
|
|
|
|
|
'^', '!', '~', '&&', '||', '??', '?',
|
|
|
|
|
':', '=', '+=', '-=', '*=', '**=', '/=',
|
|
|
|
|
'%=', '<<=', '>>=', '>>>=', '&=', '|=', '^=', '@'
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
// we include these common regular expressions
|
|
|
|
@ -219,15 +132,12 @@ export const language = {
|
|
|
|
|
// The main tokenizer for our languages
|
|
|
|
|
tokenizer: {
|
|
|
|
|
root: [
|
|
|
|
|
[
|
|
|
|
|
/}/,
|
|
|
|
|
{
|
|
|
|
|
[/}/, {
|
|
|
|
|
cases: {
|
|
|
|
|
'$S2==INJSX': { token: '@brackets', next: '@pop' },
|
|
|
|
|
'@default': '@brackets'
|
|
|
|
|
}
|
|
|
|
|
'@default': '@brackets',
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
}],
|
|
|
|
|
|
|
|
|
|
[/{/, 'delimiter.bracket'],
|
|
|
|
|
|
|
|
|
@ -235,72 +145,56 @@ export const language = {
|
|
|
|
|
[/^\s+#?[\w$]+(?=\s*[;=:])/, 'variable.property'],
|
|
|
|
|
|
|
|
|
|
// highlight function/class defs
|
|
|
|
|
[
|
|
|
|
|
/(function|class|new)(\s+)(#?[\w$]+)(\s*)([<(]?)/,
|
|
|
|
|
[
|
|
|
|
|
'keyword',
|
|
|
|
|
'',
|
|
|
|
|
[/(function|class|new)(\s+)(#?[\w$]+)(\s*)([<(]?)/, ['keyword', '',
|
|
|
|
|
{
|
|
|
|
|
cases: {
|
|
|
|
|
'$1==function': 'method',
|
|
|
|
|
'$1==class': 'type.identifier',
|
|
|
|
|
'$1==new': 'type.identifier'
|
|
|
|
|
'$1==new': 'type.identifier',
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
'',
|
|
|
|
|
{
|
|
|
|
|
}, '', {
|
|
|
|
|
cases: {
|
|
|
|
|
'<': { token: '@brackets', next: '@typeparams' },
|
|
|
|
|
'@default': '@rematch'
|
|
|
|
|
}
|
|
|
|
|
'@default': '@rematch',
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
]],
|
|
|
|
|
|
|
|
|
|
// highlight var/const/let defs
|
|
|
|
|
[
|
|
|
|
|
/(const|let|var)(\s+)(#?[\w$]+)/,
|
|
|
|
|
[
|
|
|
|
|
'keyword',
|
|
|
|
|
'',
|
|
|
|
|
{
|
|
|
|
|
[/(const|let|var)(\s+)(#?[\w$]+)/, ['keyword', '', {
|
|
|
|
|
cases: {
|
|
|
|
|
'$1==const': 'constant',
|
|
|
|
|
'@default': 'variable'
|
|
|
|
|
'@default': 'variable',
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
}]],
|
|
|
|
|
|
|
|
|
|
{ include: 'jsxReady' },
|
|
|
|
|
|
|
|
|
|
{ include: 'common' }
|
|
|
|
|
{ include: 'common' },
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
common: [
|
|
|
|
|
|
|
|
|
|
// identifiers and keywords
|
|
|
|
|
[
|
|
|
|
|
/(#?[a-zA-Z_$][\w$]*)([<(]?)/,
|
|
|
|
|
[
|
|
|
|
|
[/(#?[a-zA-Z_$][\w$]*)([<(]?)/, [
|
|
|
|
|
{
|
|
|
|
|
cases: {
|
|
|
|
|
'@typeKeywords': 'type.identifier',
|
|
|
|
|
'@alwaysKeyword': 'keyword',
|
|
|
|
|
'$1~#?[A-Z].*': 'type.identifier',
|
|
|
|
|
$2: 'method',
|
|
|
|
|
'$2': 'method',
|
|
|
|
|
'@ctrlKeywords': 'keyword.flow',
|
|
|
|
|
'@keywords': 'keyword',
|
|
|
|
|
'@default': 'identifier'
|
|
|
|
|
'@default': 'identifier',
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
cases: {
|
|
|
|
|
'$2==<': { token: '@brackets', next: '@typeparams' },
|
|
|
|
|
'@default': '@rematch'
|
|
|
|
|
}
|
|
|
|
|
'@default': '@rematch',
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
]],
|
|
|
|
|
|
|
|
|
|
// whitespace
|
|
|
|
|
{ include: '@whitespace' },
|
|
|
|
@ -346,62 +240,58 @@ export const language = {
|
|
|
|
|
[/`/, 'string', '@string_backtick']
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
typeparams: [[/>/, '@brackets', '@pop'], { include: 'common' }],
|
|
|
|
|
typeparams: [
|
|
|
|
|
[/>/, '@brackets', '@pop'],
|
|
|
|
|
{ include: 'common' }
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
jsxReady: [
|
|
|
|
|
[/<>/, 'delimiter.html', '@jsxText.FRAGMENT'],
|
|
|
|
|
[
|
|
|
|
|
/(<)([A-Z][\w$]*\s*(?:,|extends|implements))/,
|
|
|
|
|
['@brackets', { token: '@rematch', next: '@typeparams' }]
|
|
|
|
|
],
|
|
|
|
|
[/(<)(\s*)([\w$])/, ['delimiter.html', '', { token: '@rematch', next: '@jsxIdent.jsxOpen.' }]]
|
|
|
|
|
[/(<)([A-Z][\w$]*\s*(?:,|extends|implements))/, ['@brackets', { token: '@rematch', next: '@typeparams' }]],
|
|
|
|
|
[/(<)(\s*)([\w$])/, ['delimiter.html', '',
|
|
|
|
|
{ token: '@rematch', next: '@jsxIdent.jsxOpen.' },
|
|
|
|
|
]],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
jsxIdent: [
|
|
|
|
|
[/\./, { token: 'delimiter', switchTo: '$S0^' }],
|
|
|
|
|
[/[A-Z][\w$]*/, { token: 'type.identifier', switchTo: '$S0$0' }],
|
|
|
|
|
[/[\w$]+/, { token: 'tag', switchTo: '$S0$0' }],
|
|
|
|
|
[/.+/, { token: '@rematch', switchTo: '@$S2.$S3.$S4' }]
|
|
|
|
|
[/[\w$-]+/, { token: 'tag', switchTo: '$S0$0' }],
|
|
|
|
|
[/.+/, { token: '@rematch', switchTo: '@$S2.$S3.$S4' }],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
jsxOpen: [
|
|
|
|
|
[/{/, { token: 'keyword', next: '@root.INJSX', bracket: '@open' }],
|
|
|
|
|
[/>/, { token: 'delimiter.html', switchTo: '@jsxText.$S2' }],
|
|
|
|
|
[/\/>/, { token: 'delimiter.html', next: '@pop' }],
|
|
|
|
|
[/ +([\w-$]+)/, 'attribute.name'],
|
|
|
|
|
[/(=)(')/, ['delimiter', { token: 'string', next: '@string_single' }]],
|
|
|
|
|
[/(=)(")/, ['delimiter', { token: 'string', next: '@string_double' }]],
|
|
|
|
|
[/(=)({)/, ['delimiter', { token: '@brackets', next: '@root.INJSX' }]]
|
|
|
|
|
[/(=)({)/, ['delimiter', { token: '@brackets', next: '@root.INJSX' }]],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
jsxText: [
|
|
|
|
|
[/{/, { token: 'keyword', next: '@root.INJSX', bracket: '@open' }],
|
|
|
|
|
[
|
|
|
|
|
/<\/>/,
|
|
|
|
|
{
|
|
|
|
|
[/<\/>/, {
|
|
|
|
|
cases: {
|
|
|
|
|
'$S2==FRAGMENT': { token: 'delimiter.html', next: '@pop' },
|
|
|
|
|
'@default': { token: 'invalid', next: '@pop' }
|
|
|
|
|
}
|
|
|
|
|
'@default': { token: 'invalid', next: '@pop' },
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
/(<\/)(\s*)([\w$])/,
|
|
|
|
|
['delimiter.html', '', { token: '@rematch', switchTo: '@jsxIdent.jsxClose.$S2.' }]
|
|
|
|
|
],
|
|
|
|
|
}],
|
|
|
|
|
[/(<\/)(\s*)([\w$])/, ['delimiter.html', '',
|
|
|
|
|
{ token: '@rematch', switchTo: '@jsxIdent.jsxClose.$S2.' },
|
|
|
|
|
]],
|
|
|
|
|
{ include: 'jsxReady' },
|
|
|
|
|
[/./, 'string']
|
|
|
|
|
[/./, 'string'],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
jsxClose: [
|
|
|
|
|
[
|
|
|
|
|
/>/,
|
|
|
|
|
{
|
|
|
|
|
[/>/, {
|
|
|
|
|
cases: {
|
|
|
|
|
'$S2==$S3': { token: 'delimiter.html', next: '@pop' },
|
|
|
|
|
'@default': { token: 'invalid', next: '@pop' }
|
|
|
|
|
}
|
|
|
|
|
'@default': { token: 'invalid', next: '@pop' },
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
whitespace: [
|
|
|
|
@ -485,4 +375,5 @@ export const language = {
|
|
|
|
|
{ include: 'common' }
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|