@lvce-editor/shared-process 0.4.4 → 0.6.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 (51) hide show
  1. package/config/builtinCommands.json +15 -2
  2. package/config/defaultKeyBindings.json +33 -0
  3. package/config/defaultSettings.json +7 -3
  4. package/extensions/builtin.language-basics-docker/extension.json +1 -1
  5. package/extensions/builtin.language-basics-docker/src/tokenizeDockerfile.js +29 -11
  6. package/extensions/builtin.language-basics-editorconfig/src/tokenizeEditorConfig.js +62 -11
  7. package/extensions/builtin.language-basics-gitattributes/src/tokenizeGitAttributes.js +32 -5
  8. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +7 -2
  9. package/extensions/builtin.language-basics-javascript/extension.json +1 -1
  10. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +11 -7
  11. package/extensions/builtin.language-basics-json/extension.json +3 -2
  12. package/extensions/builtin.language-basics-json/src/tokenizeJson.js +11 -24
  13. package/extensions/builtin.language-basics-nvmrc/README.md +14 -0
  14. package/extensions/builtin.language-basics-nvmrc/extension.json +12 -0
  15. package/extensions/builtin.language-basics-nvmrc/src/tokenizeNvmrc.js +30 -0
  16. package/extensions/builtin.language-basics-plaintext/src/tokenizePlaintext.js +4 -7
  17. package/extensions/builtin.language-basics-rust/README.md +14 -0
  18. package/extensions/builtin.language-basics-rust/extension.json +12 -0
  19. package/extensions/builtin.language-basics-rust/src/tokenizeRust.js +158 -0
  20. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +37 -7
  21. package/extensions/builtin.language-basics-toml/extension.json +1 -1
  22. package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +93 -8
  23. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +138 -10
  24. package/extensions/builtin.vscode-icons/icon-theme.json +14 -0
  25. package/extensions/builtin.vscode-icons/icons/file_type_master-co.svg +1 -0
  26. package/extensions/builtin.vscode-icons/icons/file_type_wgsl.svg +86 -0
  27. package/package.json +8 -7
  28. package/src/parts/Cli/Cli.js +24 -0
  29. package/src/parts/CliInstall/CliInstall.js +10 -0
  30. package/src/parts/CliLink/CliLink.js +6 -0
  31. package/src/parts/CliList/CliList.js +15 -0
  32. package/src/parts/Download/Download.js +5 -13
  33. package/src/parts/DownloadAndExtract/DownloadAndExtract.js +14 -0
  34. package/src/parts/Error/FileSystemError.js +10 -0
  35. package/src/parts/ExtensionInstall/ExtensionInstall.ipc.js +6 -0
  36. package/src/parts/ExtensionInstall/ExtensionInstall.js +25 -0
  37. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +34 -0
  38. package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +32 -0
  39. package/src/parts/ExtensionInstallParseInput/ExtensionInstallParseInput.js +84 -0
  40. package/src/parts/ExtensionLink/ExtensionLink.js +32 -0
  41. package/src/parts/ExtensionList/ExtensionList.js +66 -0
  42. package/src/parts/ExtensionManagement/ExtensionManagement.js +4 -3
  43. package/src/parts/ExtensionUninstall/ExtensionUninstall.js +0 -0
  44. package/src/parts/Extract/Extract.js +34 -0
  45. package/src/parts/FileSystem/FileSystem.js +21 -2
  46. package/src/parts/FileSystemErrorCodes/FileSystemErrorCodes.js +4 -0
  47. package/src/parts/Path/Path.js +4 -0
  48. package/src/parts/Preferences/Preferences.js +17 -1
  49. package/src/parts/SymLink/SymLink.js +15 -0
  50. package/src/parts/TmpFile/TmpFile.js +15 -0
  51. package/src/sharedProcessMain.js +16 -5
@@ -201,9 +201,10 @@
201
201
  "label": "Developer: Open Data Folder"
202
202
  },
203
203
  {
204
- "id": "Preferences.selectColorTheme",
204
+ "id": "Viewlet.openWidget",
205
205
  "label": "Preferences: Color Theme",
206
- "aliases": ["Select Color Theme", "Switch Color Theme", "Theme Color"]
206
+ "aliases": ["Select Color Theme", "Switch Color Theme", "Theme Color"],
207
+ "args": ["QuickPick", "color-theme"]
207
208
  },
208
209
  {
209
210
  "id": "Developer.measureLatencyBetweenExtensionHostAndSharedProcess",
@@ -403,5 +404,17 @@
403
404
  {
404
405
  "id": "ContentTracing.stop",
405
406
  "label": "Developer: Stop Content Tracing"
407
+ },
408
+ {
409
+ "id": "Window.zoomIn",
410
+ "label": "Window: Zoom In"
411
+ },
412
+ {
413
+ "id": "Window.zoomOut",
414
+ "label": "Window: Zoom Out"
415
+ },
416
+ {
417
+ "id": "Window.zoomReset",
418
+ "label": "Window: Reset Zoom"
406
419
  }
407
420
  ]
@@ -19,6 +19,12 @@
19
19
  "command": "EditorCompletion.close",
20
20
  "when": "focus.editorCompletions"
21
21
  },
22
+ {
23
+ "key": "Escape",
24
+ "command": "Viewlet.closeWidget",
25
+ "when": "focus.EditorFindWidget",
26
+ "args": ["EditorFindWidget"]
27
+ },
22
28
  {
23
29
  "key": "ctrl+ArrowRight",
24
30
  "command": "Editor.cursorWordRight",
@@ -663,5 +669,32 @@
663
669
  {
664
670
  "key": "shift+ArrowDown",
665
671
  "command": "Editor.selectDown"
672
+ },
673
+ {
674
+ "key": "ctrl+f",
675
+ "command": "Editor.openFind"
676
+ },
677
+ {
678
+ "key": "Enter",
679
+ "command": "EditorFindWidget.focusNext",
680
+ "when": "focus.EditorFindWidget"
681
+ },
682
+ {
683
+ "key": "shift+F4",
684
+ "command": "EditorFindWidget.focusPrevious",
685
+ "when": "focus.EditorFindWidget"
686
+ },
687
+ {
688
+ "key": "F4",
689
+ "command": "EditorFindWidget.focusNext",
690
+ "when": "focus.EditorFindWidget"
691
+ },
692
+ {
693
+ "key": "ctrl+=",
694
+ "command": "Window.zoomIn"
695
+ },
696
+ {
697
+ "key": "ctrl+-",
698
+ "command": "Window.zoomOut"
666
699
  }
667
700
  ]
@@ -7,13 +7,17 @@
7
7
 
8
8
  "extensions.autoUpdate": true,
9
9
 
10
+ "sessionReplay.enabled": true,
11
+
10
12
  "serviceWorker.enabled": false,
11
13
 
14
+ "window.titleBarStyle": "native",
15
+ "window.zoomLevel": 0.5,
16
+ "window.controlsOverlay.enabled": true,
17
+
12
18
  "workbench.colorTheme": "slime",
13
19
  "workbench.iconTheme": "vscode-icons",
14
20
  "workbench.activityBar.visible": true,
15
21
  "workbench.sideBar.visible": true,
16
- "workbench.saveStateOnVisibilityChange": false,
17
-
18
- "sessionReplay.enabled": true
22
+ "workbench.saveStateOnVisibilityChange": false
19
23
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "builtin.language-basics-docker",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "name": "Language Basics Docker",
5
5
  "description": "Provides syntax highlighting and bracket matching in Dockerfile files.",
6
6
  "languages": [
@@ -1,14 +1,3 @@
1
- /**
2
- * @enum number
3
- */
4
- export const TokenType = {
5
- None: 0,
6
- Text: 1,
7
- VariableName: 2,
8
- Keyword: 3,
9
- Whitespace: 4,
10
- }
11
-
12
1
  /**
13
2
  * @enum number
14
3
  */
@@ -25,6 +14,19 @@ export const State = {
25
14
  AfterQuery: 10,
26
15
  InsideRound: 11,
27
16
  AfterQueryWithRules: 12,
17
+ InsideLineComment: 5,
18
+ }
19
+
20
+ /**
21
+ * @enum number
22
+ */
23
+ export const TokenType = {
24
+ None: 0,
25
+ Text: 1,
26
+ VariableName: 2,
27
+ Keyword: 3,
28
+ Whitespace: 4,
29
+ Comment: 885,
28
30
  }
29
31
 
30
32
  export const TokenMap = {
@@ -32,6 +34,7 @@ export const TokenMap = {
32
34
  [TokenType.VariableName]: 'VariableName',
33
35
  [TokenType.Whitespace]: 'Whitespace',
34
36
  [TokenType.Keyword]: 'Keyword',
37
+ [TokenType.Comment]: 'Comment',
35
38
  }
36
39
 
37
40
  export const initialLineState = {
@@ -43,6 +46,7 @@ const RE_WHITESPACE = /^ +/
43
46
  const RE_ANYTHING = /^.*/
44
47
  const RE_KEYWORD =
45
48
  /^(?:ADD|ARG|CMD|COPY|ENTRYPOINT|ENV|EXPOSE|FROM|HEALTHCHECK|LABEL|MAINTAINER|RUN|SHELL|STOPSIGNAL|USER|VOLUME|WORKDIR)\b/
49
+ const RE_LINE_COMMENT_START = /^#/
46
50
 
47
51
  export const hasArrayReturnValue = true
48
52
 
@@ -66,6 +70,9 @@ export const tokenizeLine = (line, lineState) => {
66
70
  } else if ((next = part.match(RE_WHITESPACE))) {
67
71
  token = TokenType.Whitespace
68
72
  state = State.TopLevelContent
73
+ } else if ((next = part.match(RE_LINE_COMMENT_START))) {
74
+ token = TokenType.Comment
75
+ state = State.InsideLineComment
69
76
  } else if ((next = part.match(RE_ANYTHING))) {
70
77
  token = TokenType.Text
71
78
  state = State.TopLevelContent
@@ -73,6 +80,14 @@ export const tokenizeLine = (line, lineState) => {
73
80
  throw new Error('no')
74
81
  }
75
82
  break
83
+ case State.InsideLineComment:
84
+ if ((next = part.match(RE_ANYTHING))) {
85
+ token = TokenType.Comment
86
+ state = State.TopLevelContent
87
+ } else {
88
+ throw new Error('no')
89
+ }
90
+ break
76
91
  default:
77
92
  console.log({ state, line })
78
93
  throw new Error('no')
@@ -83,6 +98,9 @@ export const tokenizeLine = (line, lineState) => {
83
98
  length: next[0].length,
84
99
  })
85
100
  }
101
+ if (state === State.InsideLineComment) {
102
+ state = State.TopLevelContent
103
+ }
86
104
  return {
87
105
  state,
88
106
  tokens,
@@ -4,6 +4,8 @@
4
4
  export const State = {
5
5
  TopLevelContent: 1,
6
6
  InsideLineComment: 2,
7
+ AfterPropertyName: 3,
8
+ AfterPropertyNameAfterEqualSign: 4,
7
9
  }
8
10
 
9
11
  export const StateMap = {
@@ -23,24 +25,36 @@ export const TokenType = {
23
25
  Comment: 885,
24
26
  Query: 886,
25
27
  Text: 887,
28
+ LanguageConstant: 11,
29
+ Numeric: 15,
30
+ PropertyName: 12,
31
+ PropertyValueString: 14,
32
+ Punctuation: 13,
33
+ String: 188,
26
34
  }
27
35
 
28
36
  export const TokenMap = {
29
- [TokenType.CssSelector]: 'CssSelector',
30
- [TokenType.Whitespace]: 'Whitespace',
31
- [TokenType.None]: 'None',
32
- [TokenType.Unknown]: 'Unknown',
33
- [TokenType.NewLine]: 'NewLine',
34
37
  [TokenType.Comment]: 'Comment',
38
+ [TokenType.LanguageConstant]: 'LanguageConstant',
39
+ [TokenType.NewLine]: 'NewLine',
40
+ [TokenType.None]: 'None',
41
+ [TokenType.Numeric]: 'Numeric',
42
+ [TokenType.PropertyName]: 'JsonPropertyName',
35
43
  [TokenType.Query]: 'Query',
36
44
  [TokenType.Text]: 'Text',
45
+ [TokenType.Unknown]: 'Unknown',
46
+ [TokenType.Whitespace]: 'Whitespace',
47
+ [TokenType.Punctuation]: 'Punctuation',
48
+ [TokenType.PropertyValueString]: 'String',
49
+ [TokenType.String]: 'String',
37
50
  }
38
51
 
52
+ const RE_LANGUAGE_CONSTANT = /^(?:true|false)/
39
53
  const RE_LINE_COMMENT_START = /^#/
40
54
  const RE_WHITESPACE = /^ +/
41
55
  const RE_CURLY_OPEN = /^\{/
42
56
  const RE_CURLY_CLOSE = /^\}/
43
- const RE_PROPERTY_NAME = /^[a-zA-Z\-]+\b/
57
+ const RE_PROPERTY_NAME = /^[a-zA-Z\-\_\d\s]+\b(?=\s*\=)/
44
58
  const RE_COLON = /^:/
45
59
  const RE_PROPERTY_VALUE = /^[^;\}]+/
46
60
  const RE_SEMICOLON = /^;/
@@ -62,6 +76,7 @@ const RE_STAR = /^\*/
62
76
  const RE_QUERY_NAME = /^[a-z\-]+/
63
77
  const RE_QUERY_CONTENT = /^[^\)]+/
64
78
  const RE_COMBINATOR = /^[\+\>\~]/
79
+ const RE_EQUAL_SIGN = /^\=/
65
80
 
66
81
  export const initialLineState = {
67
82
  state: State.TopLevelContent,
@@ -69,6 +84,8 @@ export const initialLineState = {
69
84
  stack: [],
70
85
  }
71
86
 
87
+ export const hasArrayReturn = true
88
+
72
89
  /**
73
90
  * @param {string} line
74
91
  * @param {any} lineState
@@ -89,6 +106,10 @@ export const tokenizeLine = (line, lineState) => {
89
106
  } else if ((next = part.match(RE_WHITESPACE))) {
90
107
  token = TokenType.Whitespace
91
108
  state = State.TopLevelContent
109
+ } else if ((next = part.match(RE_PROPERTY_NAME))) {
110
+ part
111
+ token = TokenType.PropertyName
112
+ state = State.AfterPropertyName
92
113
  } else if ((next = part.match(RE_ANYTHING))) {
93
114
  token = TokenType.Text
94
115
  state = State.TopLevelContent
@@ -105,15 +126,45 @@ export const tokenizeLine = (line, lineState) => {
105
126
  throw new Error('no')
106
127
  }
107
128
  break
129
+ case State.AfterPropertyName:
130
+ if ((next = part.match(RE_EQUAL_SIGN))) {
131
+ token = TokenType.Punctuation
132
+ state = State.AfterPropertyNameAfterEqualSign
133
+ } else if ((next = part.match(RE_WHITESPACE))) {
134
+ token = TokenType.Whitespace
135
+ state = State.AfterPropertyName
136
+ } else {
137
+ part
138
+ throw new Error('no')
139
+ }
140
+ break
141
+ case State.AfterPropertyNameAfterEqualSign:
142
+ if ((next = part.match(RE_WHITESPACE))) {
143
+ token = TokenType.Whitespace
144
+ state = State.AfterPropertyNameAfterEqualSign
145
+ } else if ((next = part.match(RE_LANGUAGE_CONSTANT))) {
146
+ token = TokenType.LanguageConstant
147
+ state = State.TopLevelContent
148
+ } else if ((next = part.match(RE_NUMERIC))) {
149
+ token = TokenType.Numeric
150
+ state = State.TopLevelContent
151
+ } else if ((next = part.match(RE_LINE_COMMENT_START))) {
152
+ token = TokenType.Comment
153
+ state = State.InsideLineComment
154
+ } else if ((next = part.match(RE_ANYTHING))) {
155
+ token = TokenType.PropertyValueString
156
+ state = State.TopLevelContent
157
+ } else {
158
+ throw new Error('no')
159
+ }
160
+ break
108
161
  default:
109
162
  console.log({ state, line })
110
163
  throw new Error('no')
111
164
  }
112
- index += next[0].length
113
- tokens.push({
114
- type: token,
115
- length: next[0].length,
116
- })
165
+ const tokenLength = next[0].length
166
+ index += tokenLength
167
+ tokens.push(token, tokenLength)
117
168
  }
118
169
  return {
119
170
  state,
@@ -5,6 +5,7 @@ export const State = {
5
5
  TopLevelContent: 1,
6
6
  InsideLineComment: 2,
7
7
  AfterPropertyName: 3,
8
+ AfterPropertyNameAfterEqualSign: 4,
8
9
  }
9
10
 
10
11
  /**
@@ -28,13 +29,17 @@ export const TokenType = {
28
29
  export const TokenMap = {
29
30
  [TokenType.Text]: 'Text',
30
31
  [TokenType.Comment]: 'Comment',
32
+ [TokenType.PropertyName]: 'PropertyName',
33
+ [TokenType.Whitespace]: 'Whitespace',
34
+ [TokenType.Punctuation]: 'Punctuation',
35
+ [TokenType.PropertyValueString]: 'String',
31
36
  }
32
37
 
33
38
  const RE_LINE_COMMENT_START = /^#/
34
39
  const RE_WHITESPACE = /^ +/
35
40
  const RE_CURLY_OPEN = /^\{/
36
41
  const RE_CURLY_CLOSE = /^\}/
37
- const RE_PROPERTY_NAME = /^[a-zA-Z\-\_\d\s]+\b(?=\s*:)/
42
+ const RE_PROPERTY_NAME = /^[\w\-\_]+\b(?=\=)/
38
43
  const RE_PROPERTY_VALUE = /^[^;\}]+/
39
44
  const RE_SEMICOLON = /^;/
40
45
  const RE_COMMA = /^,/
@@ -59,7 +64,8 @@ const RE_COMBINATOR = /^[\+\>\~]/
59
64
  const RE_LANGUAGE_CONSTANT = /^(?:true|false)/
60
65
  const RE_COLON = /^:/
61
66
  const RE_DASH = /^\-/
62
- const RE_WORDS = /^[\w\s]*\w/
67
+ const RE_EQUAL_SIGN = /^\=/
68
+ const RE_WORD = /^[\w\*\.\/]+/
63
69
 
64
70
  export const initialLineState = {
65
71
  state: 1,
@@ -88,6 +94,12 @@ export const tokenizeLine = (line, lineState) => {
88
94
  } else if ((next = part.match(RE_WHITESPACE))) {
89
95
  token = TokenType.Whitespace
90
96
  state = State.TopLevelContent
97
+ } else if ((next = part.match(RE_PROPERTY_NAME))) {
98
+ token = TokenType.PropertyName
99
+ state = State.AfterPropertyName
100
+ } else if ((next = part.match(RE_WORD))) {
101
+ token = TokenType.Text
102
+ state = State.TopLevelContent
91
103
  } else if ((next = part.match(RE_ANYTHING))) {
92
104
  token = TokenType.Text
93
105
  state = State.TopLevelContent
@@ -104,9 +116,9 @@ export const tokenizeLine = (line, lineState) => {
104
116
  }
105
117
  break
106
118
  case State.AfterPropertyName:
107
- if ((next = part.match(RE_COLON))) {
119
+ if ((next = part.match(RE_EQUAL_SIGN))) {
108
120
  token = TokenType.Punctuation
109
- state = State.AfterPropertyNameAfterColon
121
+ state = State.AfterPropertyNameAfterEqualSign
110
122
  } else if ((next = part.match(RE_WHITESPACE))) {
111
123
  token = TokenType.Whitespace
112
124
  state = State.AfterPropertyName
@@ -114,6 +126,21 @@ export const tokenizeLine = (line, lineState) => {
114
126
  throw new Error('no')
115
127
  }
116
128
  break
129
+ case State.AfterPropertyNameAfterEqualSign:
130
+ if ((next = part.match(RE_LINE_COMMENT_START))) {
131
+ token = TokenType.Comment
132
+ state = State.InsideLineComment
133
+ } else if ((next = part.match(RE_WORD))) {
134
+ token = TokenType.PropertyValueString
135
+ state = State.TopLevelContent
136
+ } else if ((next = part.match(RE_WHITESPACE))) {
137
+ token = TokenType.Whitespace
138
+ state = State.AfterPropertyNameAfterEqualSign
139
+ } else {
140
+ part
141
+ throw new Error('no')
142
+ }
143
+ break
117
144
  default:
118
145
  console.log({ state, line })
119
146
  throw new Error('no')
@@ -122,7 +149,7 @@ export const tokenizeLine = (line, lineState) => {
122
149
  index += tokenLength
123
150
  tokens.push(token, tokenLength)
124
151
  }
125
- if (state === State.AfterPropertyNameAfterColon) {
152
+ if (state === State.InsideLineComment) {
126
153
  state = State.TopLevelContent
127
154
  }
128
155
  return {
@@ -59,7 +59,8 @@ const RE_ANGLE_BRACKET_OPEN = /^</
59
59
  const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?!\s)/
60
60
  const RE_ANY_TEXT = /^[^\n]+/
61
61
  const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-]+/
62
- const RE_BLOCK_COMMENT_CONTENT = /^.(?:.*?)(?=-->|$)/s
62
+ const RE_BLOCK_COMMENT_CONTENT_1 = /^.+?(?=-->)/s
63
+ const RE_BLOCK_COMMENT_CONTENT_2 = /^.+$/s
63
64
  const RE_BLOCK_COMMENT_END = /^-->/
64
65
  const RE_BLOCK_COMMENT_START = /^<!--/
65
66
  const RE_DASH_DASH = /^\-\-/
@@ -275,12 +276,16 @@ export const tokenizeLine = (line, lineState) => {
275
276
  }
276
277
  break
277
278
  case State.InsideBlockComment:
278
- if ((next = part.match(RE_BLOCK_COMMENT_CONTENT))) {
279
+ part
280
+ if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_1))) {
279
281
  token = TokenType.Comment
280
282
  state = State.InsideBlockComment
281
283
  } else if ((next = part.match(RE_BLOCK_COMMENT_END))) {
282
284
  token = TokenType.Comment
283
285
  state = State.TopLevelContent
286
+ } else if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_2))) {
287
+ token = TokenType.Comment
288
+ state = State.InsideBlockComment
284
289
  } else {
285
290
  throw new Error('no')
286
291
  }
@@ -5,7 +5,7 @@
5
5
  "languages": [
6
6
  {
7
7
  "id": "javascript",
8
- "extensions": [".js"],
8
+ "extensions": [".js", ".es6", ".mjs", ".cjs", ".pac"],
9
9
  "tokenize": "src/tokenizeJavaScript.js",
10
10
  "configuration": "./languageConfiguration.json"
11
11
  }
@@ -120,6 +120,14 @@ export const initialLineState = {
120
120
  state: State.TopLevelContent,
121
121
  }
122
122
 
123
+ export const hasArrayReturn = true
124
+
125
+ /**
126
+ *
127
+ * @param {string} line
128
+ * @param {*} lineState
129
+ * @returns
130
+ */
123
131
  export const tokenizeLine = (line, lineState) => {
124
132
  let next = null
125
133
  let index = 0
@@ -280,16 +288,12 @@ export const tokenizeLine = (line, lineState) => {
280
288
  state
281
289
  throw new Error('no')
282
290
  }
283
- index += next[0].length
284
- tokens.push({
285
- type: token,
286
- length: next[0].length,
287
- })
291
+ const tokenLength = next[0].length
292
+ index += tokenLength
293
+ tokens.push(token, tokenLength)
288
294
  }
289
295
  return {
290
296
  state,
291
297
  tokens,
292
298
  }
293
299
  }
294
-
295
- tokenizeLine(`\`\``, initialLineState) //?
@@ -27,9 +27,10 @@
27
27
  ".hintrc",
28
28
  ".babelrc",
29
29
  ".prettierrc",
30
- ".sublime-project"
30
+ ".sublime-project",
31
+ ".code-snippets"
31
32
  ],
32
- "filenames": ["composer.lock", ".watchmanconfig"],
33
+ "fileNames": ["composer.lock", ".watchmanconfig"],
33
34
  "tokenize": "src/tokenizeJson.js"
34
35
  }
35
36
  ]
@@ -99,8 +99,11 @@ export const initialLineState = {
99
99
  stack: [],
100
100
  }
101
101
 
102
+ export const hasArrayReturn = true
103
+
102
104
  /**
103
105
  * @param {string} line
106
+ * @param {any} lineState
104
107
  */
105
108
  export const tokenizeLine = (line, lineState) => {
106
109
  let next
@@ -110,6 +113,7 @@ export const tokenizeLine = (line, lineState) => {
110
113
  let __r = 0
111
114
  const tokens = []
112
115
  const stack = lineState.stack
116
+ state
113
117
  while (index < line.length) {
114
118
  if (__r++ > 100_000_000_000) {
115
119
  throw new Error('endless loop')
@@ -159,6 +163,7 @@ export const tokenizeLine = (line, lineState) => {
159
163
  }
160
164
  break
161
165
  case State.AfterCurlyOpen:
166
+ part
162
167
  if ((next = part.match(RE_WHITESPACE))) {
163
168
  token = TokenType.Whitespace
164
169
  state = State.AfterCurlyOpen
@@ -187,6 +192,7 @@ export const tokenizeLine = (line, lineState) => {
187
192
  } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
188
193
  token = TokenType.Punctuation
189
194
  state = stack.pop()
195
+ state
190
196
  } else if ((next = part.match(RE_ESCAPED_QUOTE))) {
191
197
  token = TokenType.JsonPropertyName
192
198
  state = State.InsidePropertyNameString
@@ -220,6 +226,9 @@ export const tokenizeLine = (line, lineState) => {
220
226
  if ((next = part.match(RE_COLON))) {
221
227
  token = TokenType.Punctuation
222
228
  state = State.AfterPropertyNameAfterColon
229
+ } else if ((next = part.match(RE_WHITESPACE))) {
230
+ token = TokenType.Whitespace
231
+ state = State.AfterPropertyName
223
232
  } else if ((next = part.match(RE_ANYTHING))) {
224
233
  token = TokenType.Text
225
234
  state = State.AfterCurlyOpen
@@ -228,11 +237,11 @@ export const tokenizeLine = (line, lineState) => {
228
237
  }
229
238
  break
230
239
  case State.AfterPropertyNameAfterColon:
240
+ part
231
241
  if ((next = part.match(RE_WHITESPACE))) {
232
242
  token = TokenType.Whitespace
233
243
  state = State.AfterPropertyNameAfterColon
234
244
  } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
235
- line.slice(0, index) //?
236
245
  token = TokenType.Punctuation
237
246
  state = State.InsideString
238
247
  stack.push(State.AfterPropertyValue)
@@ -292,10 +301,7 @@ export const tokenizeLine = (line, lineState) => {
292
301
  const currentTokenText = next[0]
293
302
  const currentTokenLength = currentTokenText.length
294
303
  index += currentTokenLength
295
- tokens.push({
296
- type: token,
297
- length: currentTokenLength,
298
- })
304
+ tokens.push(token, currentTokenLength)
299
305
  }
300
306
  if (state === State.InsideLineComment) {
301
307
  state = State.TopLevelContent
@@ -306,22 +312,3 @@ export const tokenizeLine = (line, lineState) => {
306
312
  tokens,
307
313
  }
308
314
  }
309
-
310
- // const result = tokenizeLine(` "a": "b",`, {
311
- // state: State.AfterCurlyOpen,
312
- // }) //?
313
-
314
- const result = tokenizeLine(
315
- `"extends: "eslint:recommended",
316
- `,
317
- {
318
- state: State.AfterCurlyOpen,
319
- stack: [],
320
- }
321
- ) //?
322
-
323
- result.tokens.map((t) => TokenMap[t.type]) //?
324
-
325
- // tokenizeLine(`{
326
- // "a": "b"
327
- // }`) //?
@@ -0,0 +1,14 @@
1
+ # Language Basics Nvmrc
2
+
3
+ ## Contributing
4
+
5
+ ```sh
6
+ git clone git@github.com:lvce-editor/language-basics-nvmrc.git &&
7
+ cd language-basics-nvmrc &&
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-nvmrc)
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "builtin.language-basics-nvmrc",
3
+ "name": "Language Basics nvmrc",
4
+ "description": "Provides syntax highlighting and bracket matching in nvmrc files.",
5
+ "languages": [
6
+ {
7
+ "id": "nvmrc",
8
+ "extensions": [".nvmrc"],
9
+ "tokenize": "src/tokenizeNvmrc.js"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @enum number
3
+ */
4
+ export const TokenType = {
5
+ Text: 1,
6
+ Numeric: 2,
7
+ }
8
+
9
+ export const TokenMap = {
10
+ [TokenType.Text]: 'Text',
11
+ [TokenType.Numeric]: 'Numeric',
12
+ }
13
+
14
+ export const initialLineState = {
15
+ state: 1,
16
+ tokens: [],
17
+ }
18
+
19
+ export const hasArrayReturn = true
20
+
21
+ /**
22
+ * @param {string} line
23
+ */
24
+ export const tokenizeLine = (line) => {
25
+ const tokens = [TokenType.Numeric, line.length]
26
+ return {
27
+ state: 1,
28
+ tokens,
29
+ }
30
+ }
@@ -14,18 +14,15 @@ export const initialLineState = {
14
14
  tokens: [],
15
15
  }
16
16
 
17
+ export const hasArrayReturn = true
18
+
17
19
  /**
18
20
  * @param {string} line
19
21
  */
20
22
  export const tokenizeLine = (line) => {
21
- const tokens = [
22
- {
23
- type: TokenType.Text,
24
- length: line.length,
25
- },
26
- ]
23
+ const tokens = [TokenType.Text, line.length]
27
24
  return {
28
- state: 0,
25
+ state: 1,
29
26
  tokens,
30
27
  }
31
28
  }
@@ -0,0 +1,14 @@
1
+ # Language Basics Rust
2
+
3
+ ## Contributing
4
+
5
+ ```sh
6
+ git clone git@github.com:lvce-editor/language-basics-rust.git &&
7
+ cd language-basics-rust &&
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-rust)