@lvce-editor/shared-process 0.11.7 → 0.11.9

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.
Files changed (31) hide show
  1. package/config/defaultKeyBindings.json +4 -0
  2. package/config/defaultSettings.json +2 -0
  3. package/extensions/builtin.language-basics-cpp/src/tokenizeCpp.js +29 -6
  4. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +176 -25
  5. package/extensions/builtin.language-basics-gn/README.md +14 -0
  6. package/extensions/builtin.language-basics-gn/extension.json +12 -0
  7. package/extensions/builtin.language-basics-gn/src/tokenizeGn.js +178 -0
  8. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +5 -0
  9. package/extensions/builtin.language-basics-json5/README.md +16 -0
  10. package/extensions/builtin.language-basics-json5/extension.json +12 -0
  11. package/extensions/builtin.language-basics-json5/src/tokenizeJson5.js +321 -0
  12. package/extensions/builtin.language-basics-perl/extension.json +2 -1
  13. package/extensions/builtin.language-basics-perl/src/tokenizePerl.js +53 -6
  14. package/extensions/builtin.language-basics-python/extension.json +2 -1
  15. package/extensions/builtin.language-basics-python/src/tokenizePython.js +129 -36
  16. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +274 -13
  17. package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +197 -15
  18. package/extensions/builtin.theme-ayu/color-theme.json +2 -0
  19. package/extensions/builtin.theme-slime/color-theme.json +6 -0
  20. package/package.json +4 -4
  21. package/src/parts/Command/Command.js +38 -40
  22. package/src/parts/ErrorCodes/ErrorCodes.js +9 -17
  23. package/src/parts/GetResponse/GetResponse.js +2 -2
  24. package/src/parts/Module/Module.js +2 -2
  25. package/src/parts/ModuleMap/ModuleMap.js +1 -1
  26. package/src/parts/PrettyError/PrettyError.js +55 -5
  27. package/src/parts/RipGrep/RipGrep.js +30 -0
  28. package/src/parts/SearchFile/SearchFile.js +12 -16
  29. package/src/parts/TextSearch/TextSearch.ipc.js +7 -0
  30. package/src/parts/{Search/Search.js → TextSearch/TextSearch.js} +11 -17
  31. package/src/parts/Search/Search.ipc.js +0 -7
@@ -3,8 +3,12 @@
3
3
  */
4
4
  export const State = {
5
5
  TopLevelContent: 1,
6
- InsideString: 2,
6
+ InsideDoubleQuoteString: 2,
7
7
  InsideLineComment: 3,
8
+ InsideSingleQuoteString: 4,
9
+ InsideBackTickString: 5,
10
+ InsideEof: 6,
11
+ AfterKeywordFunction: 7,
8
12
  }
9
13
 
10
14
  export const StateMap = {
@@ -25,6 +29,10 @@ export const TokenType = {
25
29
  VariableName: 8,
26
30
  Comment: 885,
27
31
  Text: 9,
32
+ KeywordControl: 10,
33
+ Function: 11,
34
+ LanguageConstant: 12,
35
+ KeywordReturn: 13,
28
36
  }
29
37
 
30
38
  export const TokenMap = {
@@ -38,11 +46,15 @@ export const TokenMap = {
38
46
  [TokenType.VariableName]: 'VariableName',
39
47
  [TokenType.Comment]: 'Comment',
40
48
  [TokenType.Text]: 'Text',
49
+ [TokenType.KeywordControl]: 'KeywordControl',
50
+ [TokenType.Function]: 'Function',
51
+ [TokenType.LanguageConstant]: 'LanguageConstant',
52
+ [TokenType.KeywordReturn]: 'KeywordReturn',
41
53
  }
42
54
 
43
55
  const RE_LINE_COMMENT = /^#.*/s
44
56
  const RE_SELECTOR = /^[\.a-zA-Z\d\-\:>]+/
45
- const RE_WHITESPACE = /^ +/
57
+ const RE_WHITESPACE = /^\s+/
46
58
  const RE_CURLY_OPEN = /^\{/
47
59
  const RE_CURLY_CLOSE = /^\}/
48
60
  const RE_PROPERTY_NAME = /^[a-zA-Z\-]+\b/
@@ -50,20 +62,31 @@ const RE_COLON = /^:/
50
62
  const RE_PROPERTY_VALUE = /^[^;\}]+/
51
63
  const RE_SEMICOLON = /^;/
52
64
  const RE_COMMA = /^,/
65
+ const RE_ANYTHING_SHORT = /^[^\s"']+/
53
66
  const RE_ANYTHING = /^.+/s
54
67
  const RE_ANYTHING_UNTIL_CLOSE_BRACE = /^[^\}]+/
55
68
  const RE_QUOTE_DOUBLE = /^"/
56
- const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
69
+ const RE_QUOTE_SINGLE = /^'/
70
+ const RE_QUOTE_BACKTICK = /^`/
71
+ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"\\]+/
72
+ const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
73
+ const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`]+/
57
74
  const RE_KEYWORD =
58
- /^(?:alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|dirs|disown|echo|enable|eval|exec|exit|false|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|read|readonly|set|shift|shopt|source|suspend|test|times|trap|true|type|ulimit|umask|unalias|unset|wait)\b/
59
-
60
- const RE_VARIABLE_NAME = /^[a-zA-Z\_\/\-]+/
61
- const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)<>]/
62
- const RE_NUMERIC = /^\d+/
75
+ /^(?:7za|7zr|alias|ar|awk|bg|bind|break|builtin|bunzip|bunzip2|caller|cargo|case|cat|catdoc|cd|chmod|chown|command|compgen|complete|continue|cp|curl|cygstart|dde-open|dirs|disown|do|done|done|dpkg|echo|elif|else|emulate|enable|enlightenment_open|esac|eval|eval_gettext|exec|exit|expr|false|fc|fg|fi|for|function|gdbus|getopts|gio|gnome-open|grep|grub-mount|gvfs-open|gzip|hash|head|help|history|identity|if|in|ip|jobs|kde-open|kfmclient|kill|less|let|lha|logout|ls|ls|lunzip|lzip|lzma|miniunz|miniunzip|mkdir|mktemp|mv|node|npm|open|pcmanfm|pdftotext|popd|prezip-bin|printf|ps|pushd|pwd|rar|read|readlink|readonly|return|rm|rpm|sed|set|shift|shopt|sleep|snap|sort|source|stty|suspend|tail|tar|tee|test|texi2dvi|then|times|touch|trap|true|tty|type|ulimit|umask|umask|unalias|unarj|unmkinitramfs|unrar|unset|unwrapdiff|unzip|unzoo|wait|which|while|xprop|xz|zoo|zstd)\b/
76
+ const RE_VARIABLE_NAME = /^[a-zA-Z\_\/\-\$][a-zA-Z\_\/\-\$#\d\-]*/
77
+ const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)<>\!\|\+\&\>\)]/
78
+ const RE_NUMERIC = /^\d+(?=\s|$)/
79
+ const RE_FUNCTION_NAME = /^\w+(?=\s*\()/
80
+ const RE_EOF_START = /^<<\s*([\w\!]+)/
81
+ const RE_EOF_CONTENT = /.*/s
82
+ const RE_STRING_ESCAPE = /^\\./
83
+ const RE_BACKSLASH_AT_END = /^\\$/
63
84
 
64
85
  export const initialLineState = {
65
86
  state: State.TopLevelContent,
66
87
  tokens: [],
88
+ knownFunctionNames: new Set(),
89
+ stringEnd: '',
67
90
  }
68
91
 
69
92
  /**
@@ -88,6 +111,8 @@ export const tokenizeLine = (line, lineState) => {
88
111
  let tokens = []
89
112
  let token = TokenType.None
90
113
  let state = lineState.state
114
+ let stringEnd = lineState.stringEnd
115
+ const knownFunctionNames = new Set(lineState.knownFunctionNames)
91
116
  while (index < line.length) {
92
117
  const part = line.slice(index)
93
118
  switch (state) {
@@ -96,23 +121,200 @@ export const tokenizeLine = (line, lineState) => {
96
121
  token = TokenType.Whitespace
97
122
  state = State.TopLevelContent
98
123
  } else if ((next = part.match(RE_KEYWORD))) {
99
- token = TokenType.Keyword
100
124
  state = State.TopLevelContent
125
+ switch (next[0]) {
126
+ case 'break':
127
+ case 'case':
128
+ case 'continue':
129
+ case 'do':
130
+ case 'done':
131
+ case 'elif':
132
+ case 'else':
133
+ case 'esac':
134
+ case 'fi':
135
+ case 'for':
136
+ case 'if':
137
+ case 'in':
138
+ case 'then':
139
+ case 'while':
140
+ token = TokenType.KeywordControl
141
+ break
142
+ case '7za':
143
+ case '7za':
144
+ case '7zr':
145
+ case 'alias':
146
+ case 'ar':
147
+ case 'awk':
148
+ case 'bg':
149
+ case 'bind':
150
+ case 'builtin':
151
+ case 'bunzip':
152
+ case 'bunzip2':
153
+ case 'caller':
154
+ case 'cargo':
155
+ case 'cat':
156
+ case 'catdoc':
157
+ case 'cd':
158
+ case 'chmod':
159
+ case 'chown':
160
+ case 'command':
161
+ case 'compgen':
162
+ case 'complete':
163
+ case 'cp':
164
+ case 'curl':
165
+ case 'dirs':
166
+ case 'disown':
167
+ case 'dpkg':
168
+ case 'echo':
169
+ case 'emulate':
170
+ case 'enable':
171
+ case 'eval':
172
+ case 'eval_gettext':
173
+ case 'exec':
174
+ case 'exit':
175
+ case 'fc':
176
+ case 'fg':
177
+ case 'getopts':
178
+ case 'grep':
179
+ case 'grub-mount':
180
+ case 'gzip':
181
+ case 'hash':
182
+ case 'head':
183
+ case 'help':
184
+ case 'history':
185
+ case 'identity':
186
+ case 'jobs':
187
+ case 'kill':
188
+ case 'less':
189
+ case 'lha':
190
+ case 'logout':
191
+ case 'ls':
192
+ case 'lunzip':
193
+ case 'lzip':
194
+ case 'lzma':
195
+ case 'miniunz':
196
+ case 'miniunzip':
197
+ case 'mkdir':
198
+ case 'mktemp':
199
+ case 'mv':
200
+ case 'node':
201
+ case 'npm':
202
+ case 'pdftotext':
203
+ case 'popd':
204
+ case 'printf':
205
+ case 'ps':
206
+ case 'pushd':
207
+ case 'pwd':
208
+ case 'rar':
209
+ case 'read':
210
+ case 'rm':
211
+ case 'rpm':
212
+ case 'sed':
213
+ case 'set':
214
+ case 'shift':
215
+ case 'shopt':
216
+ case 'sleep':
217
+ case 'snap':
218
+ case 'source':
219
+ case 'stty':
220
+ case 'suspend':
221
+ case 'tar':
222
+ case 'tee':
223
+ case 'test':
224
+ case 'times':
225
+ case 'trap':
226
+ case 'type':
227
+ case 'ulimit':
228
+ case 'umask':
229
+ case 'umask':
230
+ case 'unalias':
231
+ case 'unarj':
232
+ case 'unmkinitramfs':
233
+ case 'unrar':
234
+ case 'unset':
235
+ case 'unwrapdiff':
236
+ case 'unzip':
237
+ case 'unzoo':
238
+ case 'wait':
239
+ case 'which':
240
+ case 'xz':
241
+ case 'zoo':
242
+ case 'zstd':
243
+ case 'expr':
244
+ case 'tty':
245
+ case 'sort':
246
+ case 'ls':
247
+ case 'readlink':
248
+ case 'gio':
249
+ case 'gvfs-open':
250
+ case 'gnome-open':
251
+ case 'xprop':
252
+ case 'cygstart':
253
+ case 'open':
254
+ case 'kde-open':
255
+ case 'kfmclient':
256
+ case 'dde-open':
257
+ case 'enlightenment_open':
258
+ case 'gdbus':
259
+ case 'pcmanfm':
260
+ case 'texi2dvi':
261
+ case 'tail':
262
+ case 'touch':
263
+ case 'prezip-bin':
264
+ case 'ip':
265
+ token = TokenType.Function
266
+ break
267
+ case 'true':
268
+ case 'false':
269
+ token = TokenType.LanguageConstant
270
+ break
271
+ case 'return':
272
+ token = TokenType.KeywordReturn
273
+ break
274
+ case 'function':
275
+ token = TokenType.Keyword
276
+ state = State.AfterKeywordFunction
277
+ break
278
+ default:
279
+ token = TokenType.Keyword
280
+ break
281
+ }
282
+ } else if ((next = part.match(RE_EOF_START))) {
283
+ token = TokenType.Punctuation
284
+ state = State.InsideEof
285
+ stringEnd = next[1]
101
286
  } else if ((next = part.match(RE_PUNCTUATION))) {
102
287
  token = TokenType.Punctuation
103
288
  state = State.TopLevelContent
289
+ } else if ((next = part.match(RE_FUNCTION_NAME))) {
290
+ token = TokenType.Function
291
+ state = State.TopLevelContent
292
+ knownFunctionNames.add(next[0])
104
293
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
105
- token = TokenType.VariableName
294
+ if (knownFunctionNames.has(next[0])) {
295
+ token = TokenType.Function
296
+ } else {
297
+ token = TokenType.VariableName
298
+ }
106
299
  state = State.TopLevelContent
107
300
  } else if ((next = part.match(RE_NUMERIC))) {
108
301
  token = TokenType.Numeric
109
302
  state = State.TopLevelContent
110
303
  } else if ((next = part.match(RE_QUOTE_DOUBLE))) {
111
304
  token = TokenType.PunctuationString
112
- state = State.InsideString
305
+ state = State.InsideDoubleQuoteString
306
+ } else if ((next = part.match(RE_QUOTE_SINGLE))) {
307
+ token = TokenType.Punctuation
308
+ state = State.InsideSingleQuoteString
309
+ } else if ((next = part.match(RE_QUOTE_BACKTICK))) {
310
+ token = TokenType.Punctuation
311
+ state = State.InsideBackTickString
113
312
  } else if ((next = part.match(RE_LINE_COMMENT))) {
114
313
  token = TokenType.Comment
115
314
  state = State.TopLevelContent
315
+ } else if ((next = part.match(RE_ANYTHING_SHORT))) {
316
+ token = TokenType.VariableName
317
+ state = State.TopLevelContent
116
318
  } else if ((next = part.match(RE_ANYTHING))) {
117
319
  token = TokenType.Text
118
320
  state = State.TopLevelContent
@@ -121,13 +323,70 @@ export const tokenizeLine = (line, lineState) => {
121
323
  throw new Error('no')
122
324
  }
123
325
  break
124
- case State.InsideString:
326
+ case State.InsideDoubleQuoteString:
125
327
  if ((next = part.match(RE_QUOTE_DOUBLE))) {
126
328
  token = TokenType.PunctuationString
127
329
  state = State.TopLevelContent
128
330
  } else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
129
331
  token = TokenType.String
130
- state = State.InsideString
332
+ state = State.InsideDoubleQuoteString
333
+ } else if ((next = part.match(RE_STRING_ESCAPE))) {
334
+ token = TokenType.String
335
+ state = State.InsideDoubleQuoteString
336
+ } else if ((next = part.match(RE_BACKSLASH_AT_END))) {
337
+ token = TokenType.String
338
+ state = State.InsideDoubleQuoteString
339
+ } else {
340
+ throw new Error('no')
341
+ }
342
+ break
343
+ case State.InsideSingleQuoteString:
344
+ if ((next = part.match(RE_QUOTE_SINGLE))) {
345
+ token = TokenType.PunctuationString
346
+ state = State.TopLevelContent
347
+ } else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
348
+ token = TokenType.String
349
+ state = State.InsideSingleQuoteString
350
+ } else if ((next = part.match(RE_BACKSLASH_AT_END))) {
351
+ token = TokenType.String
352
+ state = State.InsideSingleQuoteString
353
+ } else {
354
+ throw new Error('no')
355
+ }
356
+ break
357
+ case State.InsideBackTickString:
358
+ if ((next = part.match(RE_QUOTE_BACKTICK))) {
359
+ token = TokenType.PunctuationString
360
+ state = State.TopLevelContent
361
+ } else if ((next = part.match(RE_STRING_BACKTICK_QUOTE_CONTENT))) {
362
+ token = TokenType.String
363
+ state = State.InsideBackTickString
364
+ } else {
365
+ throw new Error('no')
366
+ }
367
+ break
368
+ case State.InsideEof:
369
+ if ((next = part.match(stringEnd))) {
370
+ token = TokenType.Punctuation
371
+ state = State.TopLevelContent
372
+ } else if ((next = part.match(RE_EOF_CONTENT))) {
373
+ token = TokenType.String
374
+ state = State.InsideEof
375
+ } else {
376
+ throw new Error('no')
377
+ }
378
+ break
379
+ case State.AfterKeywordFunction:
380
+ if ((next = part.match(RE_VARIABLE_NAME))) {
381
+ token = TokenType.Function
382
+ state = State.TopLevelContent
383
+ knownFunctionNames.add(next[0])
384
+ } else if ((next = part.match(RE_WHITESPACE))) {
385
+ token = TokenType.Whitespace
386
+ state = State.AfterKeywordFunction
387
+ } else if ((next = part.match(RE_ANYTHING))) {
388
+ token = TokenType.Text
389
+ state = State.TopLevelContent
131
390
  } else {
132
391
  throw new Error('no')
133
392
  }
@@ -142,5 +401,7 @@ export const tokenizeLine = (line, lineState) => {
142
401
  return {
143
402
  state,
144
403
  tokens,
404
+ knownFunctionNames,
405
+ stringEnd,
145
406
  }
146
407
  }