@lvce-editor/shared-process 0.15.12 → 0.15.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extensions/builtin.language-basics-cpp/languageConfiguration.json +5 -0
- package/extensions/builtin.language-basics-cpp/src/tokenizeCpp.js +56 -2
- package/extensions/builtin.language-basics-elixir/README.md +0 -1
- package/extensions/builtin.language-basics-java/extension.json +2 -1
- package/extensions/builtin.language-basics-java/languageConfiguration.json +31 -0
- package/extensions/builtin.language-basics-java/src/tokenizeJava.js +5 -4
- package/extensions/builtin.language-basics-javascript/languageConfiguration.json +40 -0
- package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +1 -0
- package/extensions/builtin.language-basics-python/extension.json +1 -0
- package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +76 -6
- package/extensions/builtin.theme-atom-one-dark/color-theme.json +4 -0
- package/extensions/builtin.theme-ayu/color-theme.json +8 -0
- package/extensions/builtin.theme-cobalt2/color-theme.json +12 -0
- package/extensions/builtin.theme-slime/color-theme.json +8 -0
- package/package.json +4 -4
|
@@ -32,6 +32,15 @@ export const TokenType = {
|
|
|
32
32
|
Include: 222,
|
|
33
33
|
Type: 555,
|
|
34
34
|
Macro: 71,
|
|
35
|
+
KeywordImport: 215,
|
|
36
|
+
KeywordControl: 881,
|
|
37
|
+
KeywordModifier: 882,
|
|
38
|
+
KeywordReturn: 883,
|
|
39
|
+
KeywordNew: 884,
|
|
40
|
+
FunctionName: 885,
|
|
41
|
+
KeywordThis: 886,
|
|
42
|
+
KeywordOperator: 887,
|
|
43
|
+
LanguageConstant: 888,
|
|
35
44
|
}
|
|
36
45
|
|
|
37
46
|
export const TokenMap = {
|
|
@@ -46,6 +55,16 @@ export const TokenMap = {
|
|
|
46
55
|
[TokenType.String]: 'String',
|
|
47
56
|
[TokenType.Type]: 'Type',
|
|
48
57
|
[TokenType.Macro]: 'Macro',
|
|
58
|
+
[TokenType.Numeric]: 'Numeric',
|
|
59
|
+
[TokenType.KeywordImport]: 'KeywordImport',
|
|
60
|
+
[TokenType.KeywordControl]: 'KeywordControl',
|
|
61
|
+
[TokenType.KeywordModifier]: 'KeywordModifier',
|
|
62
|
+
[TokenType.KeywordReturn]: 'KeywordReturn',
|
|
63
|
+
[TokenType.KeywordNew]: 'KeywordNew',
|
|
64
|
+
[TokenType.FunctionName]: 'Function',
|
|
65
|
+
[TokenType.KeywordThis]: 'KeywordThis',
|
|
66
|
+
[TokenType.KeywordOperator]: 'KeywordOperator',
|
|
67
|
+
[TokenType.LanguageConstant]: 'LanguageConstant',
|
|
49
68
|
}
|
|
50
69
|
|
|
51
70
|
const RE_WHITESPACE = /^\s+/
|
|
@@ -78,7 +97,7 @@ const RE_ROUND_CLOSE = /^\)/
|
|
|
78
97
|
const RE_DOT = /^\./
|
|
79
98
|
const RE_EQUAL_SIGN = /^=/
|
|
80
99
|
const RE_SINGLE_QUOTE = /^'/
|
|
81
|
-
const RE_PUNCTUATION = /^[\(\)=\+\-><\.,\/\*\^\[\]\{\}
|
|
100
|
+
const RE_PUNCTUATION = /^[\(\)=\+\-><\.,\/\*\^\[\]\{\}\|:\;\&\!\~]/
|
|
82
101
|
const RE_ANYTHING_UNTIL_END = /^.+/s
|
|
83
102
|
const RE_START_OF_FUNCTION = /^( )*\(/
|
|
84
103
|
const RE_COLON_COLON = /^::/
|
|
@@ -127,7 +146,39 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
127
146
|
token = TokenType.Whitespace
|
|
128
147
|
state = State.TopLevelContent
|
|
129
148
|
} else if ((next = part.match(RE_KEYWORD))) {
|
|
130
|
-
|
|
149
|
+
switch (next[0]) {
|
|
150
|
+
case 'true':
|
|
151
|
+
case 'false':
|
|
152
|
+
case 'null':
|
|
153
|
+
token = TokenType.LanguageConstant
|
|
154
|
+
break
|
|
155
|
+
case 'switch':
|
|
156
|
+
case 'default':
|
|
157
|
+
case 'case':
|
|
158
|
+
case 'else':
|
|
159
|
+
case 'if':
|
|
160
|
+
case 'break':
|
|
161
|
+
case 'throw':
|
|
162
|
+
case 'for':
|
|
163
|
+
case 'try':
|
|
164
|
+
case 'catch':
|
|
165
|
+
case 'continue':
|
|
166
|
+
case 'while':
|
|
167
|
+
token = TokenType.KeywordControl
|
|
168
|
+
break
|
|
169
|
+
case 'return':
|
|
170
|
+
token = TokenType.KeywordReturn
|
|
171
|
+
break
|
|
172
|
+
case 'new':
|
|
173
|
+
token = TokenType.KeywordNew
|
|
174
|
+
break
|
|
175
|
+
case 'this':
|
|
176
|
+
token = TokenType.KeywordThis
|
|
177
|
+
break
|
|
178
|
+
default:
|
|
179
|
+
token = TokenType.Keyword
|
|
180
|
+
break
|
|
181
|
+
}
|
|
131
182
|
state = State.TopLevelContent
|
|
132
183
|
} else if ((next = part.match(RE_TYPE))) {
|
|
133
184
|
token = TokenType.Type
|
|
@@ -164,6 +215,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
164
215
|
} else if ((next = part.match(RE_DOUBLE_QUOTE))) {
|
|
165
216
|
token = TokenType.Punctuation
|
|
166
217
|
state = State.InsideDoubleQuoteString
|
|
218
|
+
} else if ((next = part.match(RE_NUMERIC))) {
|
|
219
|
+
token = TokenType.Numeric
|
|
220
|
+
state = State.TopLevelContent
|
|
167
221
|
} else if ((next = part.match(RE_TEXT))) {
|
|
168
222
|
token = TokenType.Text
|
|
169
223
|
state = State.TopLevelContent
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comments": {
|
|
3
|
+
"lineComment": "//",
|
|
4
|
+
"blockComment": ["/*", "*/"]
|
|
5
|
+
},
|
|
6
|
+
"brackets": [
|
|
7
|
+
["{", "}"],
|
|
8
|
+
["[", "]"],
|
|
9
|
+
["(", ")"]
|
|
10
|
+
],
|
|
11
|
+
"autoClosingPairs": [
|
|
12
|
+
["{", "}"],
|
|
13
|
+
["[", "]"],
|
|
14
|
+
["(", ")"],
|
|
15
|
+
{ "open": "\"", "close": "\"", "notIn": ["string"] },
|
|
16
|
+
{ "open": "'", "close": "'", "notIn": ["string"] },
|
|
17
|
+
{ "open": "/**", "close": " */", "notIn": ["string"] }
|
|
18
|
+
],
|
|
19
|
+
"surroundingPairs": [
|
|
20
|
+
["{", "}"],
|
|
21
|
+
["[", "]"],
|
|
22
|
+
["(", ")"],
|
|
23
|
+
["\"", "\""],
|
|
24
|
+
["'", "'"],
|
|
25
|
+
["<", ">"]
|
|
26
|
+
],
|
|
27
|
+
"indentationRules": {
|
|
28
|
+
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
|
|
29
|
+
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -6,7 +6,7 @@ const State = {
|
|
|
6
6
|
TopLevelContent: 1,
|
|
7
7
|
InsideSingleQuoteString: 2,
|
|
8
8
|
InsideDoubleQuoteString: 3,
|
|
9
|
-
|
|
9
|
+
AfterKeywordBeforeClass: 4,
|
|
10
10
|
InsideBlockComment: 5,
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -125,8 +125,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
125
125
|
token = TokenType.KeywordThis
|
|
126
126
|
break
|
|
127
127
|
case 'class':
|
|
128
|
+
case 'extends':
|
|
128
129
|
token = TokenType.Keyword
|
|
129
|
-
state = State.
|
|
130
|
+
state = State.AfterKeywordBeforeClass
|
|
130
131
|
break
|
|
131
132
|
default:
|
|
132
133
|
token = TokenType.Keyword
|
|
@@ -192,10 +193,10 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
192
193
|
throw new Error('no')
|
|
193
194
|
}
|
|
194
195
|
break
|
|
195
|
-
case State.
|
|
196
|
+
case State.AfterKeywordBeforeClass:
|
|
196
197
|
if ((next = part.match(RE_WHITESPACE))) {
|
|
197
198
|
token = TokenType.Whitespace
|
|
198
|
-
state = State.
|
|
199
|
+
state = State.AfterKeywordBeforeClass
|
|
199
200
|
} else if ((next = part.match(RE_VARIABLE_NAME))) {
|
|
200
201
|
token = TokenType.Class
|
|
201
202
|
state = State.TopLevelContent
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comments": {
|
|
3
|
+
"lineComment": "//",
|
|
4
|
+
"blockComment": ["/*", "*/"]
|
|
5
|
+
},
|
|
6
|
+
"brackets": [
|
|
7
|
+
["${", "}"],
|
|
8
|
+
["{", "}"],
|
|
9
|
+
["[", "]"],
|
|
10
|
+
["(", ")"]
|
|
11
|
+
],
|
|
12
|
+
"autoClosingPairs": [
|
|
13
|
+
{ "open": "{", "close": "}" },
|
|
14
|
+
{ "open": "[", "close": "]" },
|
|
15
|
+
{ "open": "(", "close": ")" },
|
|
16
|
+
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
|
|
17
|
+
{ "open": "\"", "close": "\"", "notIn": ["string"] },
|
|
18
|
+
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
|
|
19
|
+
{ "open": "/**", "close": " */", "notIn": ["string"] }
|
|
20
|
+
],
|
|
21
|
+
"surroundingPairs": [
|
|
22
|
+
["{", "}"],
|
|
23
|
+
["[", "]"],
|
|
24
|
+
["(", ")"],
|
|
25
|
+
["'", "'"],
|
|
26
|
+
["\"", "\""],
|
|
27
|
+
["`", "`"]
|
|
28
|
+
],
|
|
29
|
+
"indentationRules": {
|
|
30
|
+
"decreaseIndentPattern": {
|
|
31
|
+
"pattern": "^((?!.*?/\\*).*\\*/)?\\s*[\\}\\]].*$"
|
|
32
|
+
},
|
|
33
|
+
"increaseIndentPattern": {
|
|
34
|
+
"pattern": "^((?!//).)*(\\{([^}\"'`/]*|(\\t|[ ])*//.*)|\\([^)\"'`/]*|\\[[^\\]\"'`/]*)$"
|
|
35
|
+
},
|
|
36
|
+
"unIndentedLinePattern": {
|
|
37
|
+
"pattern": "^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$|^(\\t|[ ])*[ ]\\*/\\s*$|^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -9,6 +9,7 @@ export const State = {
|
|
|
9
9
|
InsideBackTickString: 5,
|
|
10
10
|
InsideEof: 6,
|
|
11
11
|
AfterKeywordFunction: 7,
|
|
12
|
+
AfterFunctionName: 8,
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export const StateMap = {
|
|
@@ -62,17 +63,18 @@ const RE_COLON = /^:/
|
|
|
62
63
|
const RE_PROPERTY_VALUE = /^[^;\}]+/
|
|
63
64
|
const RE_SEMICOLON = /^;/
|
|
64
65
|
const RE_COMMA = /^,/
|
|
65
|
-
const RE_ANYTHING_SHORT = /^[^\s"']+/
|
|
66
|
+
const RE_ANYTHING_SHORT = /^[^\s"'\\]+/
|
|
66
67
|
const RE_ANYTHING = /^.+/s
|
|
67
68
|
const RE_ANYTHING_UNTIL_CLOSE_BRACE = /^[^\}]+/
|
|
68
69
|
const RE_QUOTE_DOUBLE = /^"/
|
|
70
|
+
const RE_ESCAPED = /^\\./
|
|
69
71
|
const RE_QUOTE_SINGLE = /^'/
|
|
70
72
|
const RE_QUOTE_BACKTICK = /^`/
|
|
71
73
|
const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"\\]+/
|
|
72
74
|
const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
|
|
73
75
|
const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`]+/
|
|
74
76
|
const RE_KEYWORD =
|
|
75
|
-
/^(?:7z|7za|7zr|alias|anacron|apk|apt-get|ar|asciidoctor|awk|base64|basename|bash|bg|bind|blkid|break|brew|brotli|builtin|bunzip|bunzip2|caller|cargo|case|cat|catdoc|cd|chmod|chown|circleci|clear|cmp|command|compgen|complete|continue|cp|cryptsetup|curl|curl|cut|cygstart|dde-open|defaults|diff|dirname|dirs|disown|do|docker|done|done|dpkg-trigger|dpkg|du|echo|egrep|elif|else|emulate|enable|enlightenment_open|esac|eval|eval_gettext|exec|exit|expr|false|fc|fg|fi|find|for|free|function|fzf|g\+\+|gatsby|gcc|gcloud|gdbus|getopts|gio|git|gnome-open|grep|grub-mount|gs|gulp|gvfs-open|gzip|hash|head|help|hexdump|history|identity|if|ifconfig|in|install-plugin|install|ip|jobs|jq|kbd_mode|kde-open|kdialog|kfmclient|kill|killall|less|let|lha|ln|loadkeys|local|logout|ls|ls|lunzip|lzip|lzma|makepkg|miniunz|miniunzip|mkdir|mktemp|mount|mpicc|mv|node|npm|npx|open|pacman|pcmanfm|pdftotext|pkg|plutil|pnpm|popd|prezip-bin|printf|println|ps|pushd|pwd|python3|rar|read|readlink|readonly|return|rm|route|rpm|rsync|sed|set|setfont|sh|sha256sum|shift|shopt|sleep|snap|sort|source|sponge|start-stop-daemon|stty|sudo|suspend|tail|tar|tee|test|texi2dvi|then|times|touch|trap|true|tty|tune2fs|type|ulimit|umask|umask|unalias|unarj|unmkinitramfs|unmount|unrar|unset|unwrapdiff|unzip|unzoo|update-alternatives|vim|wait|wc|wget|which|while|wp|xargs|xprop|xz|yarn|yum|zenity|zip|zoo|zsh|zstd)\b/
|
|
77
|
+
/^(?:7z|7za|7zr|alias|anacron|apk|apt-get|ar|asciidoctor|awk|base64|basename|bash|bg|bind|blkid|break|brew|brotli|builtin|bunzip|bunzip2|caller|cargo|case|cat|catdoc|cd|chmod|chown|circleci|clear|cmp|command|compgen|complete|continue|cp|cryptsetup|curl|curl|cut|cygstart|dde-open|defaults|deno|diff|dirname|dirs|disown|do|docker|done|done|dpkg-trigger|dpkg|du|echo|egrep|elif|else|emulate|enable|enlightenment_open|esac|eval|eval_gettext|exec|exit|expr|false|fc|fg|fi|find|for|free|function|fuzzponent|fzf|g\+\+|gatsby|gcc|gcloud|gdbus|getopts|gio|git|gnome-open|google-chrome-beta|google-chrome|grep|groupadd|grub-mount|gs|gulp|gvfs-open|gzip|hash|hdiutil|head|help|hexdump|history|identity|if|ifconfig|in|install-plugin|install|ip|jobs|jq|kbd_mode|kde-open|kdialog|kfmclient|kill|killall|ldconfig|less|let|lha|ln|loadkeys|local|logout|ls|ls|lunzip|lzip|lzma|makepkg|miniunz|miniunzip|mkdir|mktemp|mount|mpicc|mv|node|nohup|npm|npx|open|pacman|pcmanfm|pdftotext|pkg|plutil|pnpm|popd|prezip-bin|printf|println|ps|pushd|pwd|python3|rar|read|readlink|readonly|realpath|return|rm|route|rpm|rsync|sed|set|setfont|sh|sha256sum|shift|shopt|sleep|snap|sort|source|sponge|start-stop-daemon|stty|sudo|suspend|tail|tar|tee|test|texi2dvi|then|times|touch|trap|true|tty|tune2fs|type|ulimit|umask|umask|unalias|unarj|unmkinitramfs|unmount|unrar|unset|unwrapdiff|unzip|unzoo|update-alternatives|update-desktop-database|update-mime-database|useradd|vim|wait|wc|wget|which|while|wp|xargs|xprop|xz|yarn|yum|zenity|zip|zoo|zsh|zstd)\b/
|
|
76
78
|
const RE_VARIABLE_NAME = /^[a-zA-Z\_\/\-\$][a-zA-Z\_\/\-\$#\d\-]*/
|
|
77
79
|
const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)<>\!\|\+\&\>\)]/
|
|
78
80
|
const RE_NUMERIC = /^\d+(?=\s|$)/
|
|
@@ -87,6 +89,7 @@ export const initialLineState = {
|
|
|
87
89
|
tokens: [],
|
|
88
90
|
knownFunctionNames: new Set(),
|
|
89
91
|
stringEnd: '',
|
|
92
|
+
stack: [],
|
|
90
93
|
}
|
|
91
94
|
|
|
92
95
|
/**
|
|
@@ -112,6 +115,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
112
115
|
let token = TokenType.None
|
|
113
116
|
let state = lineState.state
|
|
114
117
|
let stringEnd = lineState.stringEnd
|
|
118
|
+
const stack = [...lineState.stack]
|
|
115
119
|
const knownFunctionNames = new Set(lineState.knownFunctionNames)
|
|
116
120
|
while (index < line.length) {
|
|
117
121
|
const part = line.slice(index)
|
|
@@ -182,6 +186,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
182
186
|
case 'cygstart':
|
|
183
187
|
case 'dde-open':
|
|
184
188
|
case 'defaults':
|
|
189
|
+
case 'deno':
|
|
185
190
|
case 'diff':
|
|
186
191
|
case 'dirname':
|
|
187
192
|
case 'dirs':
|
|
@@ -204,6 +209,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
204
209
|
case 'fg':
|
|
205
210
|
case 'find':
|
|
206
211
|
case 'free':
|
|
212
|
+
case 'fuzzponent':
|
|
207
213
|
case 'fzf':
|
|
208
214
|
case 'g++':
|
|
209
215
|
case 'gatsby':
|
|
@@ -214,13 +220,17 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
214
220
|
case 'gio':
|
|
215
221
|
case 'git':
|
|
216
222
|
case 'gnome-open':
|
|
223
|
+
case 'google-chrome':
|
|
224
|
+
case 'google-chrome-beta':
|
|
217
225
|
case 'grep':
|
|
226
|
+
case 'groupadd':
|
|
218
227
|
case 'grub-mount':
|
|
219
228
|
case 'gs':
|
|
220
229
|
case 'gulp':
|
|
221
230
|
case 'gvfs-open':
|
|
222
231
|
case 'gzip':
|
|
223
232
|
case 'hash':
|
|
233
|
+
case 'hdiutil':
|
|
224
234
|
case 'head':
|
|
225
235
|
case 'help':
|
|
226
236
|
case 'hexdump':
|
|
@@ -231,12 +241,14 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
231
241
|
case 'install-plugin':
|
|
232
242
|
case 'ip':
|
|
233
243
|
case 'jobs':
|
|
244
|
+
case 'jq':
|
|
234
245
|
case 'kbd_mode':
|
|
235
246
|
case 'kde-open':
|
|
236
247
|
case 'kdialog':
|
|
237
248
|
case 'kfmclient':
|
|
238
249
|
case 'kill':
|
|
239
250
|
case 'killall':
|
|
251
|
+
case 'ldconfig':
|
|
240
252
|
case 'less':
|
|
241
253
|
case 'lha':
|
|
242
254
|
case 'ln':
|
|
@@ -256,6 +268,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
256
268
|
case 'mpicc':
|
|
257
269
|
case 'mv':
|
|
258
270
|
case 'node':
|
|
271
|
+
case 'nohup':
|
|
259
272
|
case 'npm':
|
|
260
273
|
case 'npx':
|
|
261
274
|
case 'open':
|
|
@@ -276,6 +289,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
276
289
|
case 'rar':
|
|
277
290
|
case 'read':
|
|
278
291
|
case 'readlink':
|
|
292
|
+
case 'realpath':
|
|
279
293
|
case 'rm':
|
|
280
294
|
case 'route':
|
|
281
295
|
case 'rpm':
|
|
@@ -291,6 +305,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
291
305
|
case 'snap':
|
|
292
306
|
case 'sort':
|
|
293
307
|
case 'source':
|
|
308
|
+
case 'sponge':
|
|
294
309
|
case 'start-stop-daemon':
|
|
295
310
|
case 'stty':
|
|
296
311
|
case 'sudo':
|
|
@@ -319,6 +334,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
319
334
|
case 'unzip':
|
|
320
335
|
case 'unzoo':
|
|
321
336
|
case 'update-alternatives':
|
|
337
|
+
case 'update-desktop-database':
|
|
338
|
+
case 'update-mime-database':
|
|
339
|
+
case 'useradd':
|
|
322
340
|
case 'vim':
|
|
323
341
|
case 'wait':
|
|
324
342
|
case 'wc':
|
|
@@ -335,9 +353,8 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
335
353
|
case 'zoo':
|
|
336
354
|
case 'zsh':
|
|
337
355
|
case 'zstd':
|
|
338
|
-
case 'jq':
|
|
339
|
-
case 'sponge':
|
|
340
356
|
token = TokenType.Function
|
|
357
|
+
state = State.AfterFunctionName
|
|
341
358
|
break
|
|
342
359
|
case 'true':
|
|
343
360
|
case 'false':
|
|
@@ -401,7 +418,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
401
418
|
case State.InsideDoubleQuoteString:
|
|
402
419
|
if ((next = part.match(RE_QUOTE_DOUBLE))) {
|
|
403
420
|
token = TokenType.PunctuationString
|
|
404
|
-
state = State.TopLevelContent
|
|
421
|
+
state = stack.pop() || State.TopLevelContent
|
|
405
422
|
} else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
|
|
406
423
|
token = TokenType.String
|
|
407
424
|
state = State.InsideDoubleQuoteString
|
|
@@ -418,7 +435,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
418
435
|
case State.InsideSingleQuoteString:
|
|
419
436
|
if ((next = part.match(RE_QUOTE_SINGLE))) {
|
|
420
437
|
token = TokenType.PunctuationString
|
|
421
|
-
state = State.TopLevelContent
|
|
438
|
+
state = stack.pop() || State.TopLevelContent
|
|
422
439
|
} else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
|
|
423
440
|
token = TokenType.String
|
|
424
441
|
state = State.InsideSingleQuoteString
|
|
@@ -466,6 +483,55 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
466
483
|
throw new Error('no')
|
|
467
484
|
}
|
|
468
485
|
break
|
|
486
|
+
case State.AfterFunctionName:
|
|
487
|
+
if ((next = part.match(RE_WHITESPACE))) {
|
|
488
|
+
token = TokenType.Whitespace
|
|
489
|
+
state = State.AfterFunctionName
|
|
490
|
+
} else if ((next = part.match(RE_EOF_START))) {
|
|
491
|
+
token = TokenType.Punctuation
|
|
492
|
+
state = State.InsideEof
|
|
493
|
+
stringEnd = next[1]
|
|
494
|
+
} else if ((next = part.match(RE_PUNCTUATION))) {
|
|
495
|
+
token = TokenType.Punctuation
|
|
496
|
+
state = State.AfterFunctionName
|
|
497
|
+
} else if ((next = part.match(RE_VARIABLE_NAME))) {
|
|
498
|
+
if (knownFunctionNames.has(next[0])) {
|
|
499
|
+
token = TokenType.Function
|
|
500
|
+
} else {
|
|
501
|
+
token = TokenType.VariableName
|
|
502
|
+
}
|
|
503
|
+
state = State.AfterFunctionName
|
|
504
|
+
} else if ((next = part.match(RE_NUMERIC))) {
|
|
505
|
+
token = TokenType.Numeric
|
|
506
|
+
state = State.AfterFunctionName
|
|
507
|
+
} else if ((next = part.match(RE_QUOTE_DOUBLE))) {
|
|
508
|
+
token = TokenType.PunctuationString
|
|
509
|
+
state = State.InsideDoubleQuoteString
|
|
510
|
+
stack.push(State.AfterFunctionName)
|
|
511
|
+
} else if ((next = part.match(RE_QUOTE_SINGLE))) {
|
|
512
|
+
token = TokenType.Punctuation
|
|
513
|
+
state = State.InsideSingleQuoteString
|
|
514
|
+
stack.push(State.AfterFunctionName)
|
|
515
|
+
} else if ((next = part.match(RE_QUOTE_BACKTICK))) {
|
|
516
|
+
token = TokenType.Punctuation
|
|
517
|
+
state = State.InsideBackTickString
|
|
518
|
+
} else if ((next = part.match(RE_LINE_COMMENT))) {
|
|
519
|
+
token = TokenType.Comment
|
|
520
|
+
state = State.TopLevelContent
|
|
521
|
+
} else if ((next = part.match(RE_ESCAPED))) {
|
|
522
|
+
token = TokenType.Text
|
|
523
|
+
state = State.AfterFunctionName
|
|
524
|
+
} else if ((next = part.match(RE_ANYTHING_SHORT))) {
|
|
525
|
+
token = TokenType.Text
|
|
526
|
+
state = State.AfterFunctionName
|
|
527
|
+
} else if ((next = part.match(RE_ANYTHING))) {
|
|
528
|
+
token = TokenType.Text
|
|
529
|
+
state = State.AfterFunctionName
|
|
530
|
+
} else {
|
|
531
|
+
part //?
|
|
532
|
+
throw new Error('no')
|
|
533
|
+
}
|
|
534
|
+
break
|
|
469
535
|
default:
|
|
470
536
|
throw new Error('no')
|
|
471
537
|
}
|
|
@@ -473,10 +539,14 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
473
539
|
index += tokenLength
|
|
474
540
|
tokens.push(token, tokenLength)
|
|
475
541
|
}
|
|
542
|
+
if (state === State.AfterFunctionName) {
|
|
543
|
+
state = State.TopLevelContent
|
|
544
|
+
}
|
|
476
545
|
return {
|
|
477
546
|
state,
|
|
478
547
|
tokens,
|
|
479
548
|
knownFunctionNames,
|
|
480
549
|
stringEnd,
|
|
550
|
+
stack,
|
|
481
551
|
}
|
|
482
552
|
}
|
|
@@ -179,6 +179,18 @@
|
|
|
179
179
|
{
|
|
180
180
|
"name": "KeywordNew",
|
|
181
181
|
"foreground": "#FF9D00"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "CssVariableName",
|
|
185
|
+
"foreground": "#9effff"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "KeywordAsync",
|
|
189
|
+
"foreground": "#FFC600"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "KeywordAwait",
|
|
193
|
+
"foreground": "#FF9D00"
|
|
182
194
|
}
|
|
183
195
|
]
|
|
184
196
|
}
|
|
@@ -194,6 +194,14 @@
|
|
|
194
194
|
"name": "KeywordModifier",
|
|
195
195
|
"foreground": "#AB9B67"
|
|
196
196
|
},
|
|
197
|
+
{
|
|
198
|
+
"name": "KeywordAsync",
|
|
199
|
+
"foreground": "#AB9B67"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"name": "KeywordAwait",
|
|
203
|
+
"foreground": "#C5A46F"
|
|
204
|
+
},
|
|
197
205
|
{
|
|
198
206
|
"name": "Class",
|
|
199
207
|
"foreground": "#E6CE64"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/shared-process",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.13",
|
|
4
4
|
"description": "Utility package for @lvce-editor/server",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@babel/code-frame": "^7.21.4",
|
|
20
|
-
"@lvce-editor/extension-host": "0.15.
|
|
21
|
-
"@lvce-editor/extension-host-helper-process": "0.15.
|
|
22
|
-
"@lvce-editor/pty-host": "0.15.
|
|
20
|
+
"@lvce-editor/extension-host": "0.15.13",
|
|
21
|
+
"@lvce-editor/extension-host-helper-process": "0.15.13",
|
|
22
|
+
"@lvce-editor/pty-host": "0.15.13",
|
|
23
23
|
"debug": "^4.3.4",
|
|
24
24
|
"execa": "^7.1.1",
|
|
25
25
|
"exit-hook": "^3.2.0",
|