@lvce-editor/shared-process 0.11.12 → 0.12.1

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 (115) hide show
  1. package/config/defaultKeyBindings.json +5 -0
  2. package/config/defaultSettings.json +4 -0
  3. package/config/fileMap.json +1 -2
  4. package/extensions/builtin.language-basics-css/README.md +2 -0
  5. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +7 -0
  6. package/extensions/builtin.language-basics-dotenv/extension.json +7 -1
  7. package/extensions/builtin.language-basics-graphql/extension.json +1 -1
  8. package/extensions/builtin.language-basics-graphql/src/tokenizeGraphql.js +408 -4
  9. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +99 -4
  10. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +61 -2
  11. package/extensions/builtin.language-basics-json/extension.json +6 -1
  12. package/extensions/builtin.language-basics-json/src/tokenizeJson.js +27 -0
  13. package/extensions/builtin.language-basics-jsx/README.md +14 -0
  14. package/extensions/builtin.language-basics-jsx/extension.json +13 -0
  15. package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +648 -0
  16. package/extensions/builtin.language-basics-julia/src/tokenizeJulia.js +52 -1
  17. package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +105 -2
  18. package/extensions/builtin.language-basics-mdx/README.md +14 -0
  19. package/extensions/builtin.language-basics-mdx/extension.json +12 -0
  20. package/extensions/builtin.language-basics-mdx/src/tokenizeMdx.js +395 -0
  21. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +38 -15
  22. package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +29 -1
  23. package/extensions/builtin.language-basics-typescript/extension.json +1 -1
  24. package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +177 -11
  25. package/extensions/builtin.language-basics-vue/README.md +14 -0
  26. package/extensions/builtin.language-basics-vue/extension.json +13 -0
  27. package/extensions/builtin.language-basics-vue/src/tokenizeVue.js +327 -0
  28. package/extensions/builtin.language-basics-xml/extension.json +3 -2
  29. package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +26 -3
  30. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +9 -2
  31. package/extensions/builtin.theme-atom-one-dark/color-theme.json +20 -0
  32. package/extensions/builtin.theme-ayu/color-theme.json +10 -1
  33. package/extensions/builtin.theme-cobalt2/color-theme.json +20 -0
  34. package/extensions/builtin.theme-gruvbox/color-theme.json +20 -0
  35. package/extensions/builtin.theme-noctis-uva/color-theme.json +20 -0
  36. package/extensions/builtin.theme-palenight/color-theme.json +8 -0
  37. package/extensions/builtin.theme-slime/color-theme.json +16 -0
  38. package/extensions/builtin.vscode-icons/icon-theme.json +40 -2
  39. package/extensions/builtin.vscode-icons/icons/file_type_bazel_ignore.svg +1 -0
  40. package/extensions/builtin.vscode-icons/icons/file_type_bazel_version.svg +1 -0
  41. package/extensions/builtin.vscode-icons/icons/file_type_eleventy.svg +1 -0
  42. package/extensions/builtin.vscode-icons/icons/file_type_eleventy2.svg +1 -0
  43. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy.svg +1 -0
  44. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy2.svg +1 -0
  45. package/extensions/builtin.vscode-icons/icons/file_type_light_rome.svg +1 -0
  46. package/extensions/builtin.vscode-icons/icons/file_type_light_tree.svg +1 -0
  47. package/extensions/builtin.vscode-icons/icons/file_type_mondoo.svg +1 -0
  48. package/extensions/builtin.vscode-icons/icons/file_type_nuxt.svg +1 -1
  49. package/extensions/builtin.vscode-icons/icons/file_type_rome.svg +1 -0
  50. package/extensions/builtin.vscode-icons/icons/file_type_sapphire_framework_cli.svg +1 -0
  51. package/extensions/builtin.vscode-icons/icons/file_type_shellcheck.svg +91 -0
  52. package/extensions/builtin.vscode-icons/icons/file_type_shuttle.svg +1 -0
  53. package/extensions/builtin.vscode-icons/icons/file_type_tree.svg +1 -0
  54. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt.svg +1 -1
  55. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt_opened.svg +1 -1
  56. package/package.json +9 -8
  57. package/src/parts/CleanStack/CleanStack.js +5 -0
  58. package/src/parts/Cli/Cli.js +5 -4
  59. package/src/parts/CliCommandType/CliCommandType.js +10 -0
  60. package/src/parts/CliInstall/CliInstall.js +3 -2
  61. package/src/parts/CliLink/CliLink.js +3 -2
  62. package/src/parts/CliList/CliList.js +3 -1
  63. package/src/parts/ClipBoard/ClipBoard.js +3 -2
  64. package/src/parts/ClipBoard/ClipBoardGnome.js +15 -31
  65. package/src/parts/CommandNotFoundError/CommandNotFoundError.js +9 -0
  66. package/src/parts/DesktopType/DesktopType.js +3 -0
  67. package/src/parts/Download/Download.js +1 -1
  68. package/src/parts/DownloadAndExtract/DownloadAndExtract.js +2 -2
  69. package/src/parts/Error/FileSystemError.js +1 -1
  70. package/src/parts/ErrorCodes/ErrorCodes.js +2 -0
  71. package/src/parts/ErrorHandling/ErrorHandling.js +4 -3
  72. package/src/parts/ExecCommand/ExecCommand.js +25 -0
  73. package/src/parts/ExecPromise/ExecPromise.js +4 -0
  74. package/src/parts/ExitCode/ExitCode.js +5 -0
  75. package/src/parts/ExportStatic/ExportStatic.js +2 -2
  76. package/src/parts/ExtensionHost/ExtensionHost.ipc.js +0 -1
  77. package/src/parts/ExtensionHost/ExtensionHost.js +1 -1
  78. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithChildProcess.js +3 -8
  79. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWorker.js +3 -7
  80. package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +2 -5
  81. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
  82. package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +3 -3
  83. package/src/parts/ExtensionLink/ExtensionLink.js +19 -0
  84. package/src/parts/ExtensionManagement/ExtensionManagement.ipc.js +1 -1
  85. package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -2
  86. package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -14
  87. package/src/parts/ExtensionManifest/ExtensionManifest.js +14 -4
  88. package/src/parts/ExtractZip/ExtractZip.js +1 -1
  89. package/src/parts/FileSystem/FileSystem.js +0 -1
  90. package/src/parts/GetResponse/GetResponse.js +2 -1
  91. package/src/parts/GitLsFiles/GitLsFiles.ipc.js +2 -0
  92. package/src/parts/GitLsFiles/GitLsFiles.js +21 -5
  93. package/src/parts/Hash/Hash.js +7 -0
  94. package/src/parts/IpcChild/IpcChild.js +6 -0
  95. package/src/parts/IpcChildModule/IpcChildModule.js +12 -0
  96. package/src/parts/IpcChildType/IpcChildType.js +13 -0
  97. package/src/parts/IpcChildWithNodeForkedProcess/IpcChildWithNodeForkedProcess.js +19 -0
  98. package/src/parts/IpcChildWithNodeWorker/IpcChildWithNodeWorker.js +27 -0
  99. package/src/parts/MergeStacks/MergeStacks.js +19 -0
  100. package/src/parts/ModuleMap/ModuleMap.js +4 -1
  101. package/src/parts/NormalizeErrorLine/NormalizeErrorLine.js +9 -0
  102. package/src/parts/OutputChannel/OutputChannel.ipc.js +1 -1
  103. package/src/parts/ParentIpc/ParentIpc.js +6 -10
  104. package/src/parts/ParseInt/ParseInt.js +3 -0
  105. package/src/parts/Platform/Platform.js +16 -21
  106. package/src/parts/Preferences/Preferences.js +2 -1
  107. package/src/parts/PrettyError/PrettyError.js +12 -23
  108. package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -0
  109. package/src/parts/Process/Process.js +2 -2
  110. package/src/parts/ProtocolType/ProtocolType.js +3 -0
  111. package/src/parts/RecentlyOpened/RecentlyOpened.js +1 -1
  112. package/src/parts/Stats/Stats.js +8 -11
  113. package/src/parts/SymLink/SymLink.js +2 -14
  114. package/src/parts/TextDocument/TextDocument.js +3 -1
  115. package/src/parts/VError/VError.js +5 -22
@@ -72,7 +72,7 @@ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"\\]+/
72
72
  const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
73
73
  const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`]+/
74
74
  const RE_KEYWORD =
75
- /^(?:7z|7za|7zr|alias|apk|apt-get|ar|asciidoctor|awk|basename|bash|bg|bind|blkid|break|brew|brotli|builtin|bunzip|bunzip2|caller|cargo|case|cat|catdoc|cd|chmod|chown|cmp|command|compgen|complete|continue|cp|cryptsetup|curl|curl|cut|cygstart|dde-open|defaults|diff|dirname|dirs|disown|do|docker|done|done|dpkg|du|echo|elif|else|emulate|enable|enlightenment_open|esac|eval|eval_gettext|exec|exit|expr|false|fc|fg|fi|find|for|free|function|fzf|g\+\+|gcc|gcloud|gdbus|getopts|gio|git|gnome-open|grep|grub-mount|gs|gulp|gvfs-open|gzip|hash|head|help|hexdump|history|identity|if|in|install|ip|jobs|kde-open|kfmclient|kill|killall|less|let|lha|local|logout|ls|ls|lunzip|lzip|lzma|makepkg|miniunz|miniunzip|mkdir|mktemp|mount|mpicc|mv|node|npm|npx|open|pacman|pcmanfm|pdftotext|pkg|plutil|popd|prezip-bin|printf|println|ps|pushd|pwd|python3|rar|read|readlink|readonly|return|rm|rpm|rsync|sed|set|sha256sum|shift|shopt|sleep|snap|sort|source|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|vim|wait|wc|wget|which|while|xargs|xprop|xz|yarn|yum|zip|zoo|zsh|zstd)\b/
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/
76
76
  const RE_VARIABLE_NAME = /^[a-zA-Z\_\/\-\$][a-zA-Z\_\/\-\$#\d\-]*/
77
77
  const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)<>\!\|\+\&\>\)]/
78
78
  const RE_NUMERIC = /^\d+(?=\s|$)/
@@ -144,13 +144,20 @@ export const tokenizeLine = (line, lineState) => {
144
144
  case '7za':
145
145
  case '7zr':
146
146
  case 'alias':
147
+ case 'anacron':
147
148
  case 'apk':
148
149
  case 'apt-get':
149
150
  case 'ar':
151
+ case 'asciidoctor':
150
152
  case 'awk':
153
+ case 'base64':
154
+ case 'basename':
155
+ case 'bash':
151
156
  case 'bg':
152
157
  case 'bind':
153
158
  case 'blkid':
159
+ case 'brew':
160
+ case 'brotli':
154
161
  case 'builtin':
155
162
  case 'bunzip':
156
163
  case 'bunzip2':
@@ -161,6 +168,8 @@ export const tokenizeLine = (line, lineState) => {
161
168
  case 'cd':
162
169
  case 'chmod':
163
170
  case 'chown':
171
+ case 'circleci':
172
+ case 'clear':
164
173
  case 'cmp':
165
174
  case 'command':
166
175
  case 'compgen':
@@ -172,13 +181,17 @@ export const tokenizeLine = (line, lineState) => {
172
181
  case 'cut':
173
182
  case 'cygstart':
174
183
  case 'dde-open':
184
+ case 'defaults':
175
185
  case 'diff':
176
186
  case 'dirname':
177
187
  case 'dirs':
178
188
  case 'disown':
189
+ case 'docker':
179
190
  case 'dpkg':
191
+ case 'dpkg-trigger':
180
192
  case 'du':
181
193
  case 'echo':
194
+ case 'egrep':
182
195
  case 'emulate':
183
196
  case 'enable':
184
197
  case 'enlightenment_open':
@@ -193,7 +206,9 @@ export const tokenizeLine = (line, lineState) => {
193
206
  case 'free':
194
207
  case 'fzf':
195
208
  case 'g++':
209
+ case 'gatsby':
196
210
  case 'gcc':
211
+ case 'gcloud':
197
212
  case 'gdbus':
198
213
  case 'getopts':
199
214
  case 'gio':
@@ -211,15 +226,21 @@ export const tokenizeLine = (line, lineState) => {
211
226
  case 'hexdump':
212
227
  case 'history':
213
228
  case 'identity':
229
+ case 'ifconfig':
214
230
  case 'install':
231
+ case 'install-plugin':
215
232
  case 'ip':
216
233
  case 'jobs':
234
+ case 'kbd_mode':
217
235
  case 'kde-open':
236
+ case 'kdialog':
218
237
  case 'kfmclient':
219
238
  case 'kill':
220
239
  case 'killall':
221
240
  case 'less':
222
241
  case 'lha':
242
+ case 'ln':
243
+ case 'loadkeys':
223
244
  case 'logout':
224
245
  case 'ls':
225
246
  case 'ls':
@@ -236,31 +257,41 @@ export const tokenizeLine = (line, lineState) => {
236
257
  case 'mv':
237
258
  case 'node':
238
259
  case 'npm':
260
+ case 'npx':
239
261
  case 'open':
240
262
  case 'pacman':
241
263
  case 'pcmanfm':
242
264
  case 'pdftotext':
243
265
  case 'pkg':
266
+ case 'plutil':
267
+ case 'pnpm':
244
268
  case 'popd':
245
269
  case 'prezip-bin':
246
270
  case 'printf':
271
+ case 'println':
247
272
  case 'ps':
248
273
  case 'pushd':
249
274
  case 'pwd':
275
+ case 'python3':
250
276
  case 'rar':
251
277
  case 'read':
252
278
  case 'readlink':
253
279
  case 'rm':
280
+ case 'route':
254
281
  case 'rpm':
255
282
  case 'rsync':
256
283
  case 'sed':
257
284
  case 'set':
285
+ case 'setfont':
286
+ case 'sh':
287
+ case 'sha256sum':
258
288
  case 'shift':
259
289
  case 'shopt':
260
290
  case 'sleep':
261
291
  case 'snap':
262
292
  case 'sort':
263
293
  case 'source':
294
+ case 'start-stop-daemon':
264
295
  case 'stty':
265
296
  case 'sudo':
266
297
  case 'suspend':
@@ -287,33 +318,25 @@ export const tokenizeLine = (line, lineState) => {
287
318
  case 'unwrapdiff':
288
319
  case 'unzip':
289
320
  case 'unzoo':
321
+ case 'update-alternatives':
290
322
  case 'vim':
291
323
  case 'wait':
292
324
  case 'wc':
293
325
  case 'wget':
294
326
  case 'which':
327
+ case 'wp':
295
328
  case 'xargs':
296
329
  case 'xprop':
297
330
  case 'xz':
298
331
  case 'yarn':
299
332
  case 'yum':
333
+ case 'zenity':
300
334
  case 'zip':
301
335
  case 'zoo':
302
- case 'zstd':
303
- case 'basename':
304
- case 'brew':
305
- case 'sha256sum':
306
- case 'brotli':
307
336
  case 'zsh':
308
- case 'asciidoctor':
309
- case 'docker':
310
- case 'python3':
311
- case 'bash':
312
- case 'npx':
313
- case 'gcloud':
314
- case 'println':
315
- case 'plutil':
316
- case 'defaults':
337
+ case 'zstd':
338
+ case 'jq':
339
+ case 'sponge':
317
340
  token = TokenType.Function
318
341
  break
319
342
  case 'true':
@@ -9,6 +9,7 @@ export const State = {
9
9
  InsideSingleQuoteString: 6,
10
10
  InsideArray: 7,
11
11
  InsideObject: 8,
12
+ InsideTripleDoubleQuoteString: 9,
12
13
  }
13
14
 
14
15
  export const StateMap = {
@@ -58,7 +59,7 @@ const RE_LINE_COMMENT = /^#.*/s
58
59
  const RE_WHITESPACE = /^ +/
59
60
  const RE_CURLY_OPEN = /^\{/
60
61
  const RE_CURLY_CLOSE = /^\}/
61
- const RE_PROPERTY_NAME = /^[a-zA-Z\-\_\d]+\b(?=\s*=)/
62
+ const RE_PROPERTY_NAME = /^[a-zA-Z\-\_\d\.]+\b(?=\s*=)/
62
63
  const RE_COLON = /^:/
63
64
  const RE_PROPERTY_VALUE = /^[^;\}]+/
64
65
  const RE_SEMICOLON = /^;/
@@ -90,6 +91,9 @@ const RE_QUOTE_DOUBLE = /^"/
90
91
  const RE_QUOTE_SINGLE = /^'/
91
92
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
92
93
  const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
94
+ const RE_TRIPLE_DOUBLE_QUOTE = /^"{3}/
95
+ const RE_TRIPLE_QUOTED_STRING_CONTENT_DOUBLE_QUOTES = /.*(?=""")/s
96
+ const RE_TRIPLE_QUOTED_STRING_CONTENT_COMMON = /.*/s
93
97
 
94
98
  export const initialLineState = {
95
99
  state: State.TopLevelContent,
@@ -168,6 +172,9 @@ export const tokenizeLine = (line, lineState) => {
168
172
  } else if ((next = part.match(RE_INF))) {
169
173
  token = TokenType.Numeric
170
174
  state = stack.pop() || State.TopLevelContent
175
+ } else if ((next = part.match(RE_TRIPLE_DOUBLE_QUOTE))) {
176
+ token = TokenType.Punctuation
177
+ state = State.InsideTripleDoubleQuoteString
171
178
  } else if ((next = part.match(RE_QUOTE_DOUBLE))) {
172
179
  token = TokenType.Punctuation
173
180
  state = State.InsideDoubleQuoteString
@@ -226,6 +233,13 @@ export const tokenizeLine = (line, lineState) => {
226
233
  } else if ((next = part.match(RE_NUMERIC_INTEGER))) {
227
234
  token = TokenType.Numeric
228
235
  state = State.InsideArray
236
+ } else if ((next = part.match(RE_SQUARE_OPEN))) {
237
+ token = TokenType.Punctuation
238
+ state = State.InsideArray
239
+ stack.push(State.InsideArray)
240
+ } else if ((next = part.match(RE_LINE_COMMENT))) {
241
+ token = TokenType.Comment
242
+ state = State.InsideArray
229
243
  } else {
230
244
  part
231
245
  throw new Error('no')
@@ -256,6 +270,20 @@ export const tokenizeLine = (line, lineState) => {
256
270
  throw new Error('no')
257
271
  }
258
272
  break
273
+ case State.InsideTripleDoubleQuoteString:
274
+ if ((next = part.match(RE_TRIPLE_DOUBLE_QUOTE))) {
275
+ token = TokenType.Punctuation
276
+ state = State.TopLevelContent
277
+ } else if ((next = part.match(RE_TRIPLE_QUOTED_STRING_CONTENT_DOUBLE_QUOTES))) {
278
+ token = TokenType.String
279
+ state = State.InsideTripleDoubleQuoteString
280
+ } else if ((next = part.match(RE_TRIPLE_QUOTED_STRING_CONTENT_COMMON))) {
281
+ token = TokenType.String
282
+ state = State.InsideTripleDoubleQuoteString
283
+ } else {
284
+ throw new Error('no')
285
+ }
286
+ break
259
287
  default:
260
288
  throw new Error('no')
261
289
  }
@@ -5,7 +5,7 @@
5
5
  "languages": [
6
6
  {
7
7
  "id": "typescript",
8
- "extensions": [".ts"],
8
+ "extensions": [".ts", ".mts", ".cts"],
9
9
  "tokenize": "src/tokenizeTypeScript.js"
10
10
  },
11
11
  {
@@ -33,6 +33,10 @@ const State = {
33
33
  InsideMethodParameters: 30,
34
34
  InsideMethodParametersAfterVariableName: 31,
35
35
  AfterMethodParameters: 32,
36
+ AfterPropertyDot: 33,
37
+ InsideBacktickString: 34,
38
+ AfterInterfaceName: 35,
39
+ AfterKeywordImport: 36,
36
40
  // AfterKeywordImport: 27,
37
41
  }
38
42
 
@@ -63,6 +67,8 @@ export const TokenType = {
63
67
  StorageModifier: 18,
64
68
  KeywordVoid: 19,
65
69
  Function: 20,
70
+ FunctionName: 21,
71
+ KeywordOperator: 22,
66
72
  }
67
73
 
68
74
  export const TokenMap = {
@@ -89,6 +95,8 @@ export const TokenMap = {
89
95
  [TokenType.StorageModifier]: 'StorageModifier',
90
96
  [TokenType.KeywordVoid]: 'KeywordVoid',
91
97
  [TokenType.Function]: 'Function',
98
+ [TokenType.FunctionName]: 'Function',
99
+ [TokenType.KeywordOperator]: 'KeywordOperator',
92
100
  }
93
101
 
94
102
  export const initialLineState = {
@@ -99,17 +107,19 @@ export const initialLineState = {
99
107
  stack: [],
100
108
  }
101
109
 
110
+ const RE_LINE_COMMENT = /^\/\/[^\n]*/
102
111
  const RE_KEYWORD =
103
- /^(?:yield|with|while|void|var|typeof|type|true|try|throw|this|static|switch|super|return|public|protected|private|package|null|new|let|interface|instanceof|in|import|implements|if|function|for|finally|from|false|extends|export|enum|else|do|delete|default|debugger|declare|continue|const|class|catch|case|break|await|async)\b/
112
+ /^(?:yield|with|while|void|var|typeof|type|true|try|throw|this|static|switch|super|readonly|return|public|protected|private|package|null|new|let|interface|instanceof|in|import|implements|if|function|for|finally|from|false|extends|export|enum|else|do|delete|default|debugger|declare|continue|const|constructor|class|catch|case|break|await|async|abstract)\b/
104
113
  const RE_WHITESPACE = /^\s+/
105
- const RE_VARIABLE_NAME = /^[\$a-zA-Z\_][\$a-zA-Z\_\d]*/
106
- const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)>\+]/
114
+ const RE_VARIABLE_NAME = /^[\#\$a-zA-Z\_][\$a-zA-Z\_\d]*/
115
+ const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)>\+\-]/
107
116
  const RE_QUOTE_SINGLE = /^'/
108
117
  const RE_QUOTE_DOUBLE = /^"/
109
118
  const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^\\']+/
110
119
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^\\"]+/
111
120
  const RE_NUMERIC = /^\d+/
112
121
  const RE_COLON = /^\:/
122
+ const RE_COLON_OPTIONAL = /^\??\:/
113
123
  const RE_TYPE_PRIMITIVE = /^(?:string|boolean|number|bigint|symbol|void|any)\b/
114
124
  const RE_EQUAL = /^=/
115
125
  const RE_SEMICOLON = /^;/
@@ -151,9 +161,21 @@ const RE_ANGLE_OPEN = /^</
151
161
  const RE_ANGLE_CLOSE = /^>/
152
162
  const RE_OPERATOR = /^[!\*\?\.\:\|\%\&\^@]/
153
163
  const RE_METHOD_NAME = /^[\w\d]+(?=\s*(\(|\:\s*function|\:\s*\())/
164
+ const RE_FUNCTION_CALL_NAME = /^[\w]+(?=\s*(\(|\=\s*function|\=\s*\())/
165
+ const RE_NUMERIC_2 =
166
+ /^(?:(?:[0-9][0-9_]*(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*(\.)[eE][+-]?[0-9][0-9_]*(n)?\b)|(?:(\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*(\.)[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*(\.)(n)?\B)|(?:(\.)[0-9][0-9_]*(n)?\b)|(?:[0-9][0-9_]*(n)?\b(?!\.))|(?:0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b)|(?:0(?:b|B)[01][01_]*(n)?\b)|(?:0(?:o|O)?[0-7][0-7_]*(n)?\b))/ // 1.1E+3
167
+ const RE_NUMERIC_HEX = /0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b/
168
+ const RE_NUMERIC_BINARY = /0(?:b|B)[01][01_]*(n)?\b/
169
+ const RE_NUMERIC_OCTAL = /0(?:o|O)?[0-7][0-7_]*(n)?\b/
170
+ const RE_QUOTE_BACKTICK = /^`/
171
+ const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`\\]+/
172
+ const RE_STRING_ESCAPE = /^\\./
173
+ const RE_KEYWORD_TYPE = /^type\b/
174
+ const RE_KEYWORD_IN = /^in\b/
175
+ const RE_KEYWORD_OF = /^of\b/
176
+ const RE_KEYWORD_EXTENDS = /^extends\b/
154
177
 
155
178
  export const hasArrayReturn = true
156
-
157
179
  /**
158
180
  *
159
181
  * @param {string} line
@@ -183,6 +205,9 @@ export const tokenizeLine = (line, lineState) => {
183
205
  state = State.TopLevelContent
184
206
  break
185
207
  case 'import':
208
+ token = TokenType.KeywordImport
209
+ state = State.AfterKeywordImport
210
+ break
186
211
  case 'export':
187
212
  case 'from':
188
213
  token = TokenType.KeywordImport
@@ -200,6 +225,7 @@ export const tokenizeLine = (line, lineState) => {
200
225
  case 'try':
201
226
  case 'catch':
202
227
  case 'finally':
228
+ case 'for':
203
229
  token = TokenType.KeywordControl
204
230
  state = State.TopLevelContent
205
231
  break
@@ -237,6 +263,22 @@ export const tokenizeLine = (line, lineState) => {
237
263
  token = TokenType.Keyword
238
264
  state = State.AfterKeywordInterface
239
265
  break
266
+ case 'private':
267
+ case 'protected':
268
+ case 'readonly':
269
+ case 'public':
270
+ case 'override':
271
+ case 'abstract':
272
+ token = TokenType.KeywordModifier
273
+ state = State.TopLevelContent
274
+ break
275
+ case 'in':
276
+ case 'of':
277
+ case 'typeof':
278
+ case 'instanceof':
279
+ token = TokenType.KeywordOperator
280
+ state = State.TopLevelContent
281
+ break
240
282
  default:
241
283
  token = TokenType.Keyword
242
284
  state = State.TopLevelContent
@@ -245,9 +287,6 @@ export const tokenizeLine = (line, lineState) => {
245
287
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
246
288
  token = TokenType.VariableName
247
289
  state = State.TopLevelContent
248
- } else if ((next = part.match(RE_PUNCTUATION))) {
249
- token = TokenType.Punctuation
250
- state = State.TopLevelContent
251
290
  } else if ((next = part.match(RE_SLASH))) {
252
291
  if ((next = part.match(RE_BLOCK_COMMENT_START))) {
253
292
  token = TokenType.Comment
@@ -258,20 +297,32 @@ export const tokenizeLine = (line, lineState) => {
258
297
  } else if ((next = part.match(RE_LINE_COMMENT_START))) {
259
298
  token = TokenType.Comment
260
299
  state = State.InsideLineComment
300
+ } else if ((next = part.match(RE_PUNCTUATION))) {
301
+ token = TokenType.Punctuation
302
+ state = State.TopLevelContent
261
303
  } else {
262
- next = part.match(RE_PUNCTUATION)
304
+ next = part.match(RE_SLASH)
263
305
  token = TokenType.Punctuation
264
306
  state = State.TopLevelContent
265
307
  }
266
- } else if ((next = part.match(RE_NUMERIC))) {
308
+ } else if ((next = part.match(RE_NUMERIC_2))) {
267
309
  token = TokenType.Numeric
268
310
  state = State.TopLevelContent
311
+ } else if ((next = part.match(RE_PUNCTUATION))) {
312
+ token = TokenType.Punctuation
313
+ state = State.TopLevelContent
314
+ if (next[0] === '.') {
315
+ state = State.AfterPropertyDot
316
+ }
269
317
  } else if ((next = part.match(RE_QUOTE_SINGLE))) {
270
318
  token = TokenType.Punctuation
271
319
  state = State.InsideSingleQuoteString
272
320
  } else if ((next = part.match(RE_QUOTE_DOUBLE))) {
273
321
  token = TokenType.Punctuation
274
322
  state = State.InsideDoubleQuoteString
323
+ } else if ((next = part.match(RE_QUOTE_BACKTICK))) {
324
+ token = TokenType.Punctuation
325
+ state = State.InsideBacktickString
275
326
  } else if ((next = part.match(RE_OPERATOR))) {
276
327
  token = TokenType.Punctuation
277
328
  state = State.TopLevelContent
@@ -321,6 +372,12 @@ export const tokenizeLine = (line, lineState) => {
321
372
  } else if ((next = part.match(RE_KEYWORD_ENUM))) {
322
373
  token = TokenType.Keyword
323
374
  state = State.AfterKeywordEnum
375
+ } else if ((next = part.match(RE_KEYWORD_IN))) {
376
+ token = TokenType.KeywordOperator
377
+ state = State.TopLevelContent
378
+ } else if ((next = part.match(RE_KEYWORD_OF))) {
379
+ token = TokenType.KeywordOperator
380
+ state = State.TopLevelContent
324
381
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
325
382
  token = TokenType.VariableName
326
383
  state = State.AfterKeywordDeclaration
@@ -333,6 +390,9 @@ export const tokenizeLine = (line, lineState) => {
333
390
  } else if ((next = part.match(RE_DOT))) {
334
391
  token = TokenType.Punctuation
335
392
  state = State.TopLevelContent
393
+ } else if ((next = part.match(RE_SEMICOLON))) {
394
+ token = TokenType.Punctuation
395
+ state = State.TopLevelContent
336
396
  } else {
337
397
  line
338
398
  part
@@ -392,6 +452,9 @@ export const tokenizeLine = (line, lineState) => {
392
452
  token = TokenType.Punctuation
393
453
  state = State.InsideSingleQuoteString
394
454
  stack.push(State.BeforeType)
455
+ } else if ((next = part.match(RE_VERTICAL_LINE))) {
456
+ token = TokenType.Punctuation
457
+ state = State.BeforeType
395
458
  } else {
396
459
  part
397
460
  throw new Error('no')
@@ -503,6 +566,9 @@ export const tokenizeLine = (line, lineState) => {
503
566
  } else if ((next = part.match(RE_ANGLE_CLOSE))) {
504
567
  token = TokenType.Punctuation
505
568
  state = State.AfterType
569
+ } else if ((next = part.match(RE_CURLY_OPEN))) {
570
+ token = TokenType.Punctuation
571
+ state = State.InsideTypeObject
506
572
  } else {
507
573
  // stack.push(State.AfterType)
508
574
  part
@@ -563,6 +629,9 @@ export const tokenizeLine = (line, lineState) => {
563
629
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
564
630
  token = TokenType.VariableName
565
631
  state = State.InsideEnumAfterVariableName
632
+ } else if ((next = part.match(RE_CURLY_CLOSE))) {
633
+ token = TokenType.Punctuation
634
+ state = stack.pop() || State.TopLevelContent
566
635
  } else {
567
636
  throw new Error('no')
568
637
  }
@@ -574,7 +643,14 @@ export const tokenizeLine = (line, lineState) => {
574
643
  } else if ((next = part.match(RE_EQUAL))) {
575
644
  token = TokenType.Punctuation
576
645
  state = State.TopLevelContent
646
+ } else if ((next = part.match(RE_COMMA))) {
647
+ token = TokenType.Punctuation
648
+ state = State.InsideEnum
649
+ } else if ((next = part.match(RE_CURLY_CLOSE))) {
650
+ token = TokenType.Punctuation
651
+ state = stack.pop() || State.TopLevelContent
577
652
  } else {
653
+ part
578
654
  throw new Error('no')
579
655
  }
580
656
  break
@@ -685,7 +761,7 @@ export const tokenizeLine = (line, lineState) => {
685
761
  state = State.AfterKeywordInterface
686
762
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
687
763
  token = TokenType.Type
688
- state = State.BeforeType
764
+ state = State.AfterInterfaceName
689
765
  } else {
690
766
  throw new Error('no')
691
767
  }
@@ -707,7 +783,7 @@ export const tokenizeLine = (line, lineState) => {
707
783
  } else if ((next = part.match(RE_CURLY_CLOSE))) {
708
784
  token = TokenType.Punctuation
709
785
  state = stack.pop() || State.TopLevelContent
710
- } else if ((next = part.match(RE_COLON))) {
786
+ } else if ((next = part.match(RE_COLON_OPTIONAL))) {
711
787
  token = TokenType.Punctuation
712
788
  state = State.BeforeType
713
789
  stack.push(State.InsideTypeObject)
@@ -717,6 +793,9 @@ export const tokenizeLine = (line, lineState) => {
717
793
  } else if ((next = part.match(RE_SEMICOLON))) {
718
794
  token = TokenType.Punctuation
719
795
  state = State.InsideTypeObject
796
+ } else if ((next = part.match(RE_VERTICAL_LINE))) {
797
+ token = TokenType.Punctuation
798
+ state = State.BeforeType
720
799
  } else {
721
800
  part
722
801
  throw new Error('no')
@@ -767,6 +846,93 @@ export const tokenizeLine = (line, lineState) => {
767
846
  throw new Error('no')
768
847
  }
769
848
  break
849
+ case State.AfterPropertyDot:
850
+ if ((next = part.match(RE_WHITESPACE))) {
851
+ token = TokenType.Whitespace
852
+ state = State.AfterPropertyDot
853
+ } else if ((next = part.match(RE_FUNCTION_CALL_NAME))) {
854
+ token = TokenType.FunctionName
855
+ state = State.TopLevelContent
856
+ } else if ((next = part.match(RE_VARIABLE_NAME))) {
857
+ token = TokenType.VariableName
858
+ state = State.TopLevelContent
859
+ } else if ((next = part.match(RE_LINE_COMMENT))) {
860
+ token = TokenType.Comment
861
+ state = State.InsideLineComment
862
+ } else if ((next = part.match(RE_BLOCK_COMMENT_START))) {
863
+ token = TokenType.Comment
864
+ state = State.InsideBlockComment
865
+ } else if ((next = part.match(RE_PUNCTUATION))) {
866
+ token = TokenType.Punctuation
867
+ state = State.TopLevelContent
868
+ } else {
869
+ throw new Error('no')
870
+ }
871
+ break
872
+ case State.InsideBacktickString:
873
+ if ((next = part.match(RE_QUOTE_BACKTICK))) {
874
+ token = TokenType.Punctuation
875
+ state = State.TopLevelContent
876
+ } else if ((next = part.match(RE_STRING_BACKTICK_QUOTE_CONTENT))) {
877
+ token = TokenType.String
878
+ state = State.InsideBacktickString
879
+ } else if ((next = part.match(RE_STRING_ESCAPE))) {
880
+ token = TokenType.String
881
+ state = State.InsideBacktickString
882
+ } else {
883
+ throw new Error('no')
884
+ }
885
+ break
886
+ case State.AfterInterfaceName:
887
+ if ((next = part.match(RE_WHITESPACE))) {
888
+ token = TokenType.Whitespace
889
+ state = State.AfterInterfaceName
890
+ } else if ((next = part.match(RE_CURLY_OPEN))) {
891
+ token = TokenType.Punctuation
892
+ state = State.InsideTypeObject
893
+ } else if ((next = part.match(RE_KEYWORD_EXTENDS))) {
894
+ token = TokenType.KeywordModifier
895
+ state = State.AfterInterfaceName
896
+ } else if ((next = part.match(RE_VARIABLE_NAME))) {
897
+ token = TokenType.Type
898
+ state = State.AfterInterfaceName
899
+ } else {
900
+ part
901
+ throw new Error('no')
902
+ }
903
+ break
904
+ case State.AfterKeywordImport:
905
+ if ((next = part.match(RE_WHITESPACE))) {
906
+ token = TokenType.Whitespace
907
+ state = State.AfterKeywordImport
908
+ } else if ((next = part.match(RE_KEYWORD_TYPE))) {
909
+ token = TokenType.Keyword
910
+ state = State.AfterKeywordImport
911
+ } else if ((next = part.match(RE_CURLY_OPEN))) {
912
+ token = TokenType.Punctuation
913
+ state = State.TopLevelContent
914
+ } else if ((next = part.match(RE_VARIABLE_NAME))) {
915
+ token = TokenType.VariableName
916
+ state = State.TopLevelContent
917
+ } else if ((next = part.match(RE_STAR))) {
918
+ token = TokenType.Punctuation
919
+ state = State.TopLevelContent
920
+ } else if ((next = part.match(RE_QUOTE_DOUBLE))) {
921
+ token = TokenType.Punctuation
922
+ state = State.InsideDoubleQuoteString
923
+ } else if ((next = part.match(RE_QUOTE_SINGLE))) {
924
+ token = TokenType.Punctuation
925
+ state = State.InsideSingleQuoteString
926
+ } else if ((next = part.match(RE_ROUND_OPEN))) {
927
+ token = TokenType.Punctuation
928
+ state = State.TopLevelContent
929
+ } else if ((next = part.match(RE_DOT))) {
930
+ token = TokenType.Punctuation
931
+ state = State.AfterPropertyDot
932
+ } else {
933
+ throw new Error('no')
934
+ }
935
+ break
770
936
  default:
771
937
  state
772
938
  throw new Error('no')
@@ -0,0 +1,14 @@
1
+ # Language Basics Vue
2
+
3
+ ## Contributing
4
+
5
+ ```sh
6
+ git clone git@github.com:lvce-editor/language-basics-vue.git &&
7
+ cd language-basics-vue &&
8
+ npm ci &&
9
+ npm test
10
+ ```
11
+
12
+ ## Gitpod
13
+
14
+ [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/lvce-editor/language-basics-vue)
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "builtin.language-basics-vue",
3
+ "name": "Language Basics Vue",
4
+ "description": "Provides syntax highlighting and bracket matching in Vue files.",
5
+ "languages": [
6
+ {
7
+ "id": "vue",
8
+ "extensions": [".vue"],
9
+ "tokenize": "src/tokenizeVue.js",
10
+ "configuration": "./languageConfiguration.json"
11
+ }
12
+ ]
13
+ }