@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.
- package/config/defaultKeyBindings.json +5 -0
- package/config/defaultSettings.json +4 -0
- package/config/fileMap.json +1 -2
- package/extensions/builtin.language-basics-css/README.md +2 -0
- package/extensions/builtin.language-basics-css/src/tokenizeCss.js +7 -0
- package/extensions/builtin.language-basics-dotenv/extension.json +7 -1
- package/extensions/builtin.language-basics-graphql/extension.json +1 -1
- package/extensions/builtin.language-basics-graphql/src/tokenizeGraphql.js +408 -4
- package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +99 -4
- package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +61 -2
- package/extensions/builtin.language-basics-json/extension.json +6 -1
- package/extensions/builtin.language-basics-json/src/tokenizeJson.js +27 -0
- package/extensions/builtin.language-basics-jsx/README.md +14 -0
- package/extensions/builtin.language-basics-jsx/extension.json +13 -0
- package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +648 -0
- package/extensions/builtin.language-basics-julia/src/tokenizeJulia.js +52 -1
- package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +105 -2
- package/extensions/builtin.language-basics-mdx/README.md +14 -0
- package/extensions/builtin.language-basics-mdx/extension.json +12 -0
- package/extensions/builtin.language-basics-mdx/src/tokenizeMdx.js +395 -0
- package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +38 -15
- package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +29 -1
- package/extensions/builtin.language-basics-typescript/extension.json +1 -1
- package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +177 -11
- package/extensions/builtin.language-basics-vue/README.md +14 -0
- package/extensions/builtin.language-basics-vue/extension.json +13 -0
- package/extensions/builtin.language-basics-vue/src/tokenizeVue.js +327 -0
- package/extensions/builtin.language-basics-xml/extension.json +3 -2
- package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +26 -3
- package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +9 -2
- package/extensions/builtin.theme-atom-one-dark/color-theme.json +20 -0
- package/extensions/builtin.theme-ayu/color-theme.json +10 -1
- package/extensions/builtin.theme-cobalt2/color-theme.json +20 -0
- package/extensions/builtin.theme-gruvbox/color-theme.json +20 -0
- package/extensions/builtin.theme-noctis-uva/color-theme.json +20 -0
- package/extensions/builtin.theme-palenight/color-theme.json +8 -0
- package/extensions/builtin.theme-slime/color-theme.json +16 -0
- package/extensions/builtin.vscode-icons/icon-theme.json +40 -2
- package/extensions/builtin.vscode-icons/icons/file_type_bazel_ignore.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_bazel_version.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_eleventy.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_eleventy2.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy2.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_light_rome.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_light_tree.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_mondoo.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_nuxt.svg +1 -1
- package/extensions/builtin.vscode-icons/icons/file_type_rome.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_sapphire_framework_cli.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_shellcheck.svg +91 -0
- package/extensions/builtin.vscode-icons/icons/file_type_shuttle.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/file_type_tree.svg +1 -0
- package/extensions/builtin.vscode-icons/icons/folder_type_nuxt.svg +1 -1
- package/extensions/builtin.vscode-icons/icons/folder_type_nuxt_opened.svg +1 -1
- package/package.json +9 -8
- package/src/parts/CleanStack/CleanStack.js +5 -0
- package/src/parts/Cli/Cli.js +5 -4
- package/src/parts/CliCommandType/CliCommandType.js +10 -0
- package/src/parts/CliInstall/CliInstall.js +3 -2
- package/src/parts/CliLink/CliLink.js +3 -2
- package/src/parts/CliList/CliList.js +3 -1
- package/src/parts/ClipBoard/ClipBoard.js +3 -2
- package/src/parts/ClipBoard/ClipBoardGnome.js +15 -31
- package/src/parts/CommandNotFoundError/CommandNotFoundError.js +9 -0
- package/src/parts/DesktopType/DesktopType.js +3 -0
- package/src/parts/Download/Download.js +1 -1
- package/src/parts/DownloadAndExtract/DownloadAndExtract.js +2 -2
- package/src/parts/Error/FileSystemError.js +1 -1
- package/src/parts/ErrorCodes/ErrorCodes.js +2 -0
- package/src/parts/ErrorHandling/ErrorHandling.js +4 -3
- package/src/parts/ExecCommand/ExecCommand.js +25 -0
- package/src/parts/ExecPromise/ExecPromise.js +4 -0
- package/src/parts/ExitCode/ExitCode.js +5 -0
- package/src/parts/ExportStatic/ExportStatic.js +2 -2
- package/src/parts/ExtensionHost/ExtensionHost.ipc.js +0 -1
- package/src/parts/ExtensionHost/ExtensionHost.js +1 -1
- package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithChildProcess.js +3 -8
- package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWorker.js +3 -7
- package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +2 -5
- package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
- package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +3 -3
- package/src/parts/ExtensionLink/ExtensionLink.js +19 -0
- package/src/parts/ExtensionManagement/ExtensionManagement.ipc.js +1 -1
- package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -2
- package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -14
- package/src/parts/ExtensionManifest/ExtensionManifest.js +14 -4
- package/src/parts/ExtractZip/ExtractZip.js +1 -1
- package/src/parts/FileSystem/FileSystem.js +0 -1
- package/src/parts/GetResponse/GetResponse.js +2 -1
- package/src/parts/GitLsFiles/GitLsFiles.ipc.js +2 -0
- package/src/parts/GitLsFiles/GitLsFiles.js +21 -5
- package/src/parts/Hash/Hash.js +7 -0
- package/src/parts/IpcChild/IpcChild.js +6 -0
- package/src/parts/IpcChildModule/IpcChildModule.js +12 -0
- package/src/parts/IpcChildType/IpcChildType.js +13 -0
- package/src/parts/IpcChildWithNodeForkedProcess/IpcChildWithNodeForkedProcess.js +19 -0
- package/src/parts/IpcChildWithNodeWorker/IpcChildWithNodeWorker.js +27 -0
- package/src/parts/MergeStacks/MergeStacks.js +19 -0
- package/src/parts/ModuleMap/ModuleMap.js +4 -1
- package/src/parts/NormalizeErrorLine/NormalizeErrorLine.js +9 -0
- package/src/parts/OutputChannel/OutputChannel.ipc.js +1 -1
- package/src/parts/ParentIpc/ParentIpc.js +6 -10
- package/src/parts/ParseInt/ParseInt.js +3 -0
- package/src/parts/Platform/Platform.js +16 -21
- package/src/parts/Preferences/Preferences.js +2 -1
- package/src/parts/PrettyError/PrettyError.js +12 -23
- package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -0
- package/src/parts/Process/Process.js +2 -2
- package/src/parts/ProtocolType/ProtocolType.js +3 -0
- package/src/parts/RecentlyOpened/RecentlyOpened.js +1 -1
- package/src/parts/Stats/Stats.js +8 -11
- package/src/parts/SymLink/SymLink.js +2 -14
- package/src/parts/TextDocument/TextDocument.js +3 -1
- 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 '
|
|
309
|
-
case '
|
|
310
|
-
case '
|
|
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
|
}
|
|
@@ -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 = /^[
|
|
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(
|
|
304
|
+
next = part.match(RE_SLASH)
|
|
263
305
|
token = TokenType.Punctuation
|
|
264
306
|
state = State.TopLevelContent
|
|
265
307
|
}
|
|
266
|
-
} else if ((next = part.match(
|
|
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.
|
|
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(
|
|
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
|
+
[](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
|
+
}
|