@lvce-editor/shared-process 0.12.0 → 0.13.0

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 (102) hide show
  1. package/config/defaultKeyBindings.json +5 -0
  2. package/config/defaultSettings.json +4 -0
  3. package/extensions/builtin.language-basics-graphql/extension.json +1 -1
  4. package/extensions/builtin.language-basics-graphql/src/tokenizeGraphql.js +408 -4
  5. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +91 -3
  6. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +7 -0
  7. package/extensions/builtin.language-basics-json/extension.json +3 -1
  8. package/extensions/builtin.language-basics-jsx/README.md +14 -0
  9. package/extensions/builtin.language-basics-jsx/extension.json +13 -0
  10. package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +648 -0
  11. package/extensions/builtin.language-basics-julia/src/tokenizeJulia.js +52 -1
  12. package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +82 -2
  13. package/extensions/builtin.language-basics-mdx/README.md +14 -0
  14. package/extensions/builtin.language-basics-mdx/extension.json +12 -0
  15. package/extensions/builtin.language-basics-mdx/src/tokenizeMdx.js +395 -0
  16. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +22 -1
  17. package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +29 -1
  18. package/extensions/builtin.language-basics-typescript/extension.json +1 -1
  19. package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +128 -12
  20. package/extensions/builtin.language-basics-xml/extension.json +3 -2
  21. package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +26 -3
  22. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +7 -1
  23. package/extensions/builtin.theme-atom-one-dark/color-theme.json +4 -0
  24. package/extensions/builtin.theme-cobalt2/color-theme.json +4 -0
  25. package/extensions/builtin.theme-gruvbox/color-theme.json +4 -0
  26. package/extensions/builtin.vscode-icons/icon-theme.json +40 -2
  27. package/extensions/builtin.vscode-icons/icons/file_type_bazel_ignore.svg +1 -0
  28. package/extensions/builtin.vscode-icons/icons/file_type_bazel_version.svg +1 -0
  29. package/extensions/builtin.vscode-icons/icons/file_type_eleventy.svg +1 -0
  30. package/extensions/builtin.vscode-icons/icons/file_type_eleventy2.svg +1 -0
  31. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy.svg +1 -0
  32. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy2.svg +1 -0
  33. package/extensions/builtin.vscode-icons/icons/file_type_light_rome.svg +1 -0
  34. package/extensions/builtin.vscode-icons/icons/file_type_light_tree.svg +1 -0
  35. package/extensions/builtin.vscode-icons/icons/file_type_mondoo.svg +1 -0
  36. package/extensions/builtin.vscode-icons/icons/file_type_nuxt.svg +1 -1
  37. package/extensions/builtin.vscode-icons/icons/file_type_rome.svg +1 -0
  38. package/extensions/builtin.vscode-icons/icons/file_type_sapphire_framework_cli.svg +1 -0
  39. package/extensions/builtin.vscode-icons/icons/file_type_shellcheck.svg +91 -0
  40. package/extensions/builtin.vscode-icons/icons/file_type_shuttle.svg +1 -0
  41. package/extensions/builtin.vscode-icons/icons/file_type_tree.svg +1 -0
  42. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt.svg +1 -1
  43. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt_opened.svg +1 -1
  44. package/package.json +7 -6
  45. package/src/parts/CleanStack/CleanStack.js +5 -0
  46. package/src/parts/Cli/Cli.js +5 -4
  47. package/src/parts/CliCommandType/CliCommandType.js +10 -0
  48. package/src/parts/CliInstall/CliInstall.js +3 -2
  49. package/src/parts/CliLink/CliLink.js +3 -2
  50. package/src/parts/CliList/CliList.js +3 -1
  51. package/src/parts/ClipBoard/ClipBoard.js +3 -2
  52. package/src/parts/ClipBoard/ClipBoardGnome.js +15 -31
  53. package/src/parts/CommandNotFoundError/CommandNotFoundError.js +9 -0
  54. package/src/parts/DesktopType/DesktopType.js +3 -0
  55. package/src/parts/Download/Download.js +1 -1
  56. package/src/parts/DownloadAndExtract/DownloadAndExtract.js +2 -2
  57. package/src/parts/Error/FileSystemError.js +1 -1
  58. package/src/parts/ErrorCodes/ErrorCodes.js +2 -0
  59. package/src/parts/ErrorHandling/ErrorHandling.js +4 -3
  60. package/src/parts/ExecCommand/ExecCommand.js +25 -0
  61. package/src/parts/ExecPromise/ExecPromise.js +4 -0
  62. package/src/parts/ExitCode/ExitCode.js +5 -0
  63. package/src/parts/ExportStatic/ExportStatic.js +2 -2
  64. package/src/parts/ExtensionHost/ExtensionHost.ipc.js +0 -1
  65. package/src/parts/ExtensionHost/ExtensionHost.js +1 -1
  66. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithChildProcess.js +3 -8
  67. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWorker.js +3 -7
  68. package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +2 -5
  69. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
  70. package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +3 -3
  71. package/src/parts/ExtensionLink/ExtensionLink.js +19 -0
  72. package/src/parts/ExtensionManagement/ExtensionManagement.ipc.js +1 -1
  73. package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -2
  74. package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -14
  75. package/src/parts/ExtensionManifest/ExtensionManifest.js +14 -4
  76. package/src/parts/ExtractZip/ExtractZip.js +1 -1
  77. package/src/parts/GetResponse/GetResponse.js +2 -1
  78. package/src/parts/GitLsFiles/GitLsFiles.ipc.js +2 -0
  79. package/src/parts/GitLsFiles/GitLsFiles.js +21 -5
  80. package/src/parts/Hash/Hash.js +7 -0
  81. package/src/parts/IpcChild/IpcChild.js +6 -0
  82. package/src/parts/IpcChildModule/IpcChildModule.js +12 -0
  83. package/src/parts/IpcChildType/IpcChildType.js +13 -0
  84. package/src/parts/IpcChildWithNodeForkedProcess/IpcChildWithNodeForkedProcess.js +19 -0
  85. package/src/parts/IpcChildWithNodeWorker/IpcChildWithNodeWorker.js +27 -0
  86. package/src/parts/MergeStacks/MergeStacks.js +19 -0
  87. package/src/parts/ModuleMap/ModuleMap.js +4 -1
  88. package/src/parts/NormalizeErrorLine/NormalizeErrorLine.js +9 -0
  89. package/src/parts/OutputChannel/OutputChannel.ipc.js +1 -1
  90. package/src/parts/ParentIpc/ParentIpc.js +6 -10
  91. package/src/parts/ParseInt/ParseInt.js +3 -0
  92. package/src/parts/Platform/Platform.js +16 -21
  93. package/src/parts/Preferences/Preferences.js +2 -1
  94. package/src/parts/PrettyError/PrettyError.js +12 -23
  95. package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -0
  96. package/src/parts/Process/Process.js +2 -2
  97. package/src/parts/ProtocolType/ProtocolType.js +3 -0
  98. package/src/parts/RecentlyOpened/RecentlyOpened.js +1 -1
  99. package/src/parts/Stats/Stats.js +8 -11
  100. package/src/parts/SymLink/SymLink.js +2 -14
  101. package/src/parts/TextDocument/TextDocument.js +3 -1
  102. 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|ln|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|update-alternatives|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,11 +144,13 @@ 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':
150
151
  case 'asciidoctor':
151
152
  case 'awk':
153
+ case 'base64':
152
154
  case 'basename':
153
155
  case 'bash':
154
156
  case 'bg':
@@ -166,6 +168,8 @@ export const tokenizeLine = (line, lineState) => {
166
168
  case 'cd':
167
169
  case 'chmod':
168
170
  case 'chown':
171
+ case 'circleci':
172
+ case 'clear':
169
173
  case 'cmp':
170
174
  case 'command':
171
175
  case 'compgen':
@@ -184,8 +188,10 @@ export const tokenizeLine = (line, lineState) => {
184
188
  case 'disown':
185
189
  case 'docker':
186
190
  case 'dpkg':
191
+ case 'dpkg-trigger':
187
192
  case 'du':
188
193
  case 'echo':
194
+ case 'egrep':
189
195
  case 'emulate':
190
196
  case 'enable':
191
197
  case 'enlightenment_open':
@@ -200,6 +206,7 @@ export const tokenizeLine = (line, lineState) => {
200
206
  case 'free':
201
207
  case 'fzf':
202
208
  case 'g++':
209
+ case 'gatsby':
203
210
  case 'gcc':
204
211
  case 'gcloud':
205
212
  case 'gdbus':
@@ -219,16 +226,21 @@ export const tokenizeLine = (line, lineState) => {
219
226
  case 'hexdump':
220
227
  case 'history':
221
228
  case 'identity':
229
+ case 'ifconfig':
222
230
  case 'install':
231
+ case 'install-plugin':
223
232
  case 'ip':
224
233
  case 'jobs':
234
+ case 'kbd_mode':
225
235
  case 'kde-open':
236
+ case 'kdialog':
226
237
  case 'kfmclient':
227
238
  case 'kill':
228
239
  case 'killall':
229
240
  case 'less':
230
241
  case 'lha':
231
242
  case 'ln':
243
+ case 'loadkeys':
232
244
  case 'logout':
233
245
  case 'ls':
234
246
  case 'ls':
@@ -252,6 +264,7 @@ export const tokenizeLine = (line, lineState) => {
252
264
  case 'pdftotext':
253
265
  case 'pkg':
254
266
  case 'plutil':
267
+ case 'pnpm':
255
268
  case 'popd':
256
269
  case 'prezip-bin':
257
270
  case 'printf':
@@ -264,10 +277,13 @@ export const tokenizeLine = (line, lineState) => {
264
277
  case 'read':
265
278
  case 'readlink':
266
279
  case 'rm':
280
+ case 'route':
267
281
  case 'rpm':
268
282
  case 'rsync':
269
283
  case 'sed':
270
284
  case 'set':
285
+ case 'setfont':
286
+ case 'sh':
271
287
  case 'sha256sum':
272
288
  case 'shift':
273
289
  case 'shopt':
@@ -275,6 +291,7 @@ export const tokenizeLine = (line, lineState) => {
275
291
  case 'snap':
276
292
  case 'sort':
277
293
  case 'source':
294
+ case 'start-stop-daemon':
278
295
  case 'stty':
279
296
  case 'sudo':
280
297
  case 'suspend':
@@ -307,15 +324,19 @@ export const tokenizeLine = (line, lineState) => {
307
324
  case 'wc':
308
325
  case 'wget':
309
326
  case 'which':
327
+ case 'wp':
310
328
  case 'xargs':
311
329
  case 'xprop':
312
330
  case 'xz':
313
331
  case 'yarn':
314
332
  case 'yum':
333
+ case 'zenity':
315
334
  case 'zip':
316
335
  case 'zoo':
317
336
  case 'zsh':
318
337
  case 'zstd':
338
+ case 'jq':
339
+ case 'sponge':
319
340
  token = TokenType.Function
320
341
  break
321
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
  {
@@ -34,6 +34,9 @@ const State = {
34
34
  InsideMethodParametersAfterVariableName: 31,
35
35
  AfterMethodParameters: 32,
36
36
  AfterPropertyDot: 33,
37
+ InsideBacktickString: 34,
38
+ AfterInterfaceName: 35,
39
+ AfterKeywordImport: 36,
37
40
  // AfterKeywordImport: 27,
38
41
  }
39
42
 
@@ -65,6 +68,7 @@ export const TokenType = {
65
68
  KeywordVoid: 19,
66
69
  Function: 20,
67
70
  FunctionName: 21,
71
+ KeywordOperator: 22,
68
72
  }
69
73
 
70
74
  export const TokenMap = {
@@ -92,6 +96,7 @@ export const TokenMap = {
92
96
  [TokenType.KeywordVoid]: 'KeywordVoid',
93
97
  [TokenType.Function]: 'Function',
94
98
  [TokenType.FunctionName]: 'Function',
99
+ [TokenType.KeywordOperator]: 'KeywordOperator',
95
100
  }
96
101
 
97
102
  export const initialLineState = {
@@ -106,14 +111,15 @@ const RE_LINE_COMMENT = /^\/\/[^\n]*/
106
111
  const RE_KEYWORD =
107
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/
108
113
  const RE_WHITESPACE = /^\s+/
109
- const RE_VARIABLE_NAME = /^[\$a-zA-Z\_][\$a-zA-Z\_\d]*/
110
- const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)>\+]/
114
+ const RE_VARIABLE_NAME = /^[\#\$a-zA-Z\_][\$a-zA-Z\_\d]*/
115
+ const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)>\+\-]/
111
116
  const RE_QUOTE_SINGLE = /^'/
112
117
  const RE_QUOTE_DOUBLE = /^"/
113
118
  const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^\\']+/
114
119
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^\\"]+/
115
120
  const RE_NUMERIC = /^\d+/
116
121
  const RE_COLON = /^\:/
122
+ const RE_COLON_OPTIONAL = /^\??\:/
117
123
  const RE_TYPE_PRIMITIVE = /^(?:string|boolean|number|bigint|symbol|void|any)\b/
118
124
  const RE_EQUAL = /^=/
119
125
  const RE_SEMICOLON = /^;/
@@ -161,9 +167,15 @@ const RE_NUMERIC_2 =
161
167
  const RE_NUMERIC_HEX = /0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\b/
162
168
  const RE_NUMERIC_BINARY = /0(?:b|B)[01][01_]*(n)?\b/
163
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/
164
177
 
165
178
  export const hasArrayReturn = true
166
-
167
179
  /**
168
180
  *
169
181
  * @param {string} line
@@ -193,6 +205,9 @@ export const tokenizeLine = (line, lineState) => {
193
205
  state = State.TopLevelContent
194
206
  break
195
207
  case 'import':
208
+ token = TokenType.KeywordImport
209
+ state = State.AfterKeywordImport
210
+ break
196
211
  case 'export':
197
212
  case 'from':
198
213
  token = TokenType.KeywordImport
@@ -210,6 +225,7 @@ export const tokenizeLine = (line, lineState) => {
210
225
  case 'try':
211
226
  case 'catch':
212
227
  case 'finally':
228
+ case 'for':
213
229
  token = TokenType.KeywordControl
214
230
  state = State.TopLevelContent
215
231
  break
@@ -256,6 +272,13 @@ export const tokenizeLine = (line, lineState) => {
256
272
  token = TokenType.KeywordModifier
257
273
  state = State.TopLevelContent
258
274
  break
275
+ case 'in':
276
+ case 'of':
277
+ case 'typeof':
278
+ case 'instanceof':
279
+ token = TokenType.KeywordOperator
280
+ state = State.TopLevelContent
281
+ break
259
282
  default:
260
283
  token = TokenType.Keyword
261
284
  state = State.TopLevelContent
@@ -274,17 +297,15 @@ export const tokenizeLine = (line, lineState) => {
274
297
  } else if ((next = part.match(RE_LINE_COMMENT_START))) {
275
298
  token = TokenType.Comment
276
299
  state = State.InsideLineComment
300
+ } else if ((next = part.match(RE_PUNCTUATION))) {
301
+ token = TokenType.Punctuation
302
+ state = State.TopLevelContent
277
303
  } else {
278
- next = part.match(RE_PUNCTUATION)
304
+ next = part.match(RE_SLASH)
279
305
  token = TokenType.Punctuation
280
306
  state = State.TopLevelContent
281
307
  }
282
- }
283
- // else if ((next = part.match(RE_NUMERIC))) {
284
- // token = TokenType.Numeric
285
- // state = State.TopLevelContent
286
- // }
287
- else if ((next = part.match(RE_NUMERIC_2))) {
308
+ } else if ((next = part.match(RE_NUMERIC_2))) {
288
309
  token = TokenType.Numeric
289
310
  state = State.TopLevelContent
290
311
  } else if ((next = part.match(RE_PUNCTUATION))) {
@@ -299,6 +320,9 @@ export const tokenizeLine = (line, lineState) => {
299
320
  } else if ((next = part.match(RE_QUOTE_DOUBLE))) {
300
321
  token = TokenType.Punctuation
301
322
  state = State.InsideDoubleQuoteString
323
+ } else if ((next = part.match(RE_QUOTE_BACKTICK))) {
324
+ token = TokenType.Punctuation
325
+ state = State.InsideBacktickString
302
326
  } else if ((next = part.match(RE_OPERATOR))) {
303
327
  token = TokenType.Punctuation
304
328
  state = State.TopLevelContent
@@ -348,6 +372,12 @@ export const tokenizeLine = (line, lineState) => {
348
372
  } else if ((next = part.match(RE_KEYWORD_ENUM))) {
349
373
  token = TokenType.Keyword
350
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
351
381
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
352
382
  token = TokenType.VariableName
353
383
  state = State.AfterKeywordDeclaration
@@ -360,6 +390,9 @@ export const tokenizeLine = (line, lineState) => {
360
390
  } else if ((next = part.match(RE_DOT))) {
361
391
  token = TokenType.Punctuation
362
392
  state = State.TopLevelContent
393
+ } else if ((next = part.match(RE_SEMICOLON))) {
394
+ token = TokenType.Punctuation
395
+ state = State.TopLevelContent
363
396
  } else {
364
397
  line
365
398
  part
@@ -419,6 +452,9 @@ export const tokenizeLine = (line, lineState) => {
419
452
  token = TokenType.Punctuation
420
453
  state = State.InsideSingleQuoteString
421
454
  stack.push(State.BeforeType)
455
+ } else if ((next = part.match(RE_VERTICAL_LINE))) {
456
+ token = TokenType.Punctuation
457
+ state = State.BeforeType
422
458
  } else {
423
459
  part
424
460
  throw new Error('no')
@@ -530,6 +566,9 @@ export const tokenizeLine = (line, lineState) => {
530
566
  } else if ((next = part.match(RE_ANGLE_CLOSE))) {
531
567
  token = TokenType.Punctuation
532
568
  state = State.AfterType
569
+ } else if ((next = part.match(RE_CURLY_OPEN))) {
570
+ token = TokenType.Punctuation
571
+ state = State.InsideTypeObject
533
572
  } else {
534
573
  // stack.push(State.AfterType)
535
574
  part
@@ -590,6 +629,9 @@ export const tokenizeLine = (line, lineState) => {
590
629
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
591
630
  token = TokenType.VariableName
592
631
  state = State.InsideEnumAfterVariableName
632
+ } else if ((next = part.match(RE_CURLY_CLOSE))) {
633
+ token = TokenType.Punctuation
634
+ state = stack.pop() || State.TopLevelContent
593
635
  } else {
594
636
  throw new Error('no')
595
637
  }
@@ -601,7 +643,14 @@ export const tokenizeLine = (line, lineState) => {
601
643
  } else if ((next = part.match(RE_EQUAL))) {
602
644
  token = TokenType.Punctuation
603
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
604
652
  } else {
653
+ part
605
654
  throw new Error('no')
606
655
  }
607
656
  break
@@ -712,7 +761,7 @@ export const tokenizeLine = (line, lineState) => {
712
761
  state = State.AfterKeywordInterface
713
762
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
714
763
  token = TokenType.Type
715
- state = State.BeforeType
764
+ state = State.AfterInterfaceName
716
765
  } else {
717
766
  throw new Error('no')
718
767
  }
@@ -734,7 +783,7 @@ export const tokenizeLine = (line, lineState) => {
734
783
  } else if ((next = part.match(RE_CURLY_CLOSE))) {
735
784
  token = TokenType.Punctuation
736
785
  state = stack.pop() || State.TopLevelContent
737
- } else if ((next = part.match(RE_COLON))) {
786
+ } else if ((next = part.match(RE_COLON_OPTIONAL))) {
738
787
  token = TokenType.Punctuation
739
788
  state = State.BeforeType
740
789
  stack.push(State.InsideTypeObject)
@@ -744,6 +793,9 @@ export const tokenizeLine = (line, lineState) => {
744
793
  } else if ((next = part.match(RE_SEMICOLON))) {
745
794
  token = TokenType.Punctuation
746
795
  state = State.InsideTypeObject
796
+ } else if ((next = part.match(RE_VERTICAL_LINE))) {
797
+ token = TokenType.Punctuation
798
+ state = State.BeforeType
747
799
  } else {
748
800
  part
749
801
  throw new Error('no')
@@ -817,6 +869,70 @@ export const tokenizeLine = (line, lineState) => {
817
869
  throw new Error('no')
818
870
  }
819
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
820
936
  default:
821
937
  state
822
938
  throw new Error('no')
@@ -69,9 +69,10 @@
69
69
  ".xpdl",
70
70
  ".xsd",
71
71
  ".xul",
72
- ".tmtheme"
72
+ ".tmtheme",
73
+ ".mm"
73
74
  ],
74
- "fileNames": [".project"],
75
+ "fileNames": [".project", "resources.grd"],
75
76
  "tokenize": "src/tokenizeXml.js"
76
77
  }
77
78
  ]
@@ -56,9 +56,10 @@ export const TokenMap = {
56
56
  const RE_ANGLE_BRACKET_CLOSE = /^>/
57
57
  const RE_ANGLE_BRACKET_ONLY = /^</
58
58
  const RE_ANGLE_BRACKET_OPEN = /^</
59
- const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?!\s)/
59
+ const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?![\s!\?])/
60
+ const RE_ANGLE_BRACKET_QUESTION_MARK = /^<\?/
60
61
  const RE_ANY_TEXT = /^[^\n]+/
61
- const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-\:]+/
62
+ const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-\:\_]+/
62
63
  const RE_BLOCK_COMMENT_CONTENT = /^.(?:.*?)(?=-->|$)/s
63
64
  const RE_BLOCK_COMMENT_END = /^-->/
64
65
  const RE_BLOCK_COMMENT_START = /^<!--/
@@ -74,6 +75,7 @@ const RE_NOT_TAGNAME = /^[^a-zA-Z\d]+/
74
75
  const RE_PUNCTUATION = /^[<;'".,]/
75
76
  const RE_PUNCTUATION_SELF_CLOSING = /^\/>/
76
77
  const RE_SELF_CLOSING = /^\/>/
78
+ const RE_QUESTION_MARK_CLOSING = /^\?>/
77
79
  const RE_SINGLE_QUOTE = /^'/
78
80
  const RE_SLASH = /^\//
79
81
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
@@ -84,6 +86,9 @@ const RE_TEXT = /^[^<>\n]+/
84
86
  const RE_WHITESPACE = /^\s+/
85
87
  const RE_WORD = /^[^\s]+/
86
88
  const RE_QUESTION_MARK_TAG_NAME = /^\?\w+/
89
+ const RE_BLOCK_COMMENT_CONTENT_1 = /^.+?(?=-->)/s
90
+ const RE_BLOCK_COMMENT_CONTENT_2 = /^.+$/s
91
+ const RE_SPECIAL_TAG = /^<!(?=\w)/
87
92
 
88
93
  export const initialLineState = {
89
94
  state: State.TopLevelContent,
@@ -123,9 +128,18 @@ export const tokenizeLine = (line, lineState) => {
123
128
  } else if ((next = part.match(RE_TEXT))) {
124
129
  token = TokenType.Text
125
130
  state = State.TopLevelContent
131
+ } else if ((next = part.match(RE_BLOCK_COMMENT_START))) {
132
+ token = TokenType.Comment
133
+ state = State.InsideBlockComment
126
134
  } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
127
135
  token = TokenType.Text
128
136
  state = State.TopLevelContent
137
+ } else if ((next = part.match(RE_SPECIAL_TAG))) {
138
+ token = TokenType.PunctuationTag
139
+ state = State.AfterOpeningAngleBracket
140
+ } else if ((next = part.match(RE_ANGLE_BRACKET_QUESTION_MARK))) {
141
+ token = TokenType.PunctuationTag
142
+ state = State.AfterOpeningAngleBracket
129
143
  } else if ((next = part.match(RE_ANGLE_BRACKET_OPEN))) {
130
144
  token = TokenType.Text
131
145
  state = State.TopLevelContent
@@ -159,6 +173,9 @@ export const tokenizeLine = (line, lineState) => {
159
173
  if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
160
174
  token = TokenType.PunctuationTag
161
175
  state = State.TopLevelContent
176
+ } else if ((next = part.match(RE_QUESTION_MARK_CLOSING))) {
177
+ token = TokenType.PunctuationTag
178
+ state = State.TopLevelContent
162
179
  } else if ((next = part.match(RE_EXCLAMATION_MARK))) {
163
180
  token = TokenType.PunctuationTag
164
181
  state = State.InsideOpeningTag
@@ -206,6 +223,9 @@ export const tokenizeLine = (line, lineState) => {
206
223
  } else if ((next = part.match(RE_SELF_CLOSING))) {
207
224
  token = TokenType.PunctuationTag
208
225
  state = State.TopLevelContent
226
+ } else if ((next = part.match(RE_QUESTION_MARK_CLOSING))) {
227
+ token = TokenType.PunctuationTag
228
+ state = State.TopLevelContent
209
229
  } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
210
230
  token = TokenType.PunctuationTag
211
231
  state = State.TopLevelContent
@@ -280,12 +300,15 @@ export const tokenizeLine = (line, lineState) => {
280
300
  }
281
301
  break
282
302
  case State.InsideBlockComment:
283
- if ((next = part.match(RE_BLOCK_COMMENT_CONTENT))) {
303
+ if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_1))) {
284
304
  token = TokenType.Comment
285
305
  state = State.InsideBlockComment
286
306
  } else if ((next = part.match(RE_BLOCK_COMMENT_END))) {
287
307
  token = TokenType.Comment
288
308
  state = State.TopLevelContent
309
+ } else if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_2))) {
310
+ token = TokenType.Comment
311
+ state = State.InsideBlockComment
289
312
  } else {
290
313
  throw new Error('no')
291
314
  }
@@ -94,7 +94,7 @@ const RE_COMBINATOR = /^[\+\>\~]/
94
94
  const RE_LANGUAGE_CONSTANT = /^(?:true|false|null)(?!#)/
95
95
  const RE_COLON = /^:/
96
96
  const RE_DASH = /^\-/
97
- const RE_WORDS = /^[\w\s]*\w/
97
+ const RE_WORDS = /^[\w\s\-\.]*\w/
98
98
  const RE_MULTI_LINE_STRING_START = /^(?:\||>\-|>)/
99
99
  const RE_KEY_PRE = /^\s*(\-\s*)?/
100
100
  const RE_SINGLE_QUOTE = /^'/
@@ -252,6 +252,12 @@ export const tokenizeLine = (line, lineState) => {
252
252
  token = TokenType.Comment
253
253
  state = State.InsideLineComment
254
254
  stack.push(State.AfterPipe)
255
+ } else if ((next = part.match(RE_DASH))) {
256
+ token = TokenType.Punctuation
257
+ state = State.AfterPipe
258
+ } else if ((next = part.match(RE_ANYTHING))) {
259
+ token = TokenType.Text
260
+ state = State.AfterPipe
255
261
  } else {
256
262
  throw new Error('no')
257
263
  }
@@ -188,6 +188,10 @@
188
188
  {
189
189
  "name": "MarkdownString",
190
190
  "foreground": "#ABB2BF"
191
+ },
192
+ {
193
+ "name": "KeywordModifier",
194
+ "foreground": "#C678DD"
191
195
  }
192
196
  ]
193
197
  }
@@ -171,6 +171,10 @@
171
171
  {
172
172
  "name": "Heading",
173
173
  "foreground": "#FFC600"
174
+ },
175
+ {
176
+ "name": "KeywordNew",
177
+ "foreground": "#FF9D00"
174
178
  }
175
179
  ]
176
180
  }
@@ -208,6 +208,10 @@
208
208
  {
209
209
  "name": "MarkdownString",
210
210
  "foreground": "#A9B665"
211
+ },
212
+ {
213
+ "name": "KeywordModifier",
214
+ "foreground": "#E78A4E"
211
215
  }
212
216
  ]
213
217
  }