├── .gitignore
├── .vscode
└── launch.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── images
├── vala.png
├── vala.svg
└── vls-vscode.png
├── language-configuration-genie.json
├── language-configuration-vala.json
├── package-lock.json
├── package.json
├── src
├── client.ts
└── main.ts
├── syntaxes
├── genie.YAML-tmLanguage
├── genie.tmLanguage
├── vala.YAML-tmLanguage
└── vala.tmLanguage
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore extension packages
2 | *.vsix
3 |
4 | # Ignore npm packages
5 | node_modules/
6 |
7 | # Ignore generated code
8 | out/
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that launches the extension inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [
8 | {
9 | "name": "Extension",
10 | "type": "extensionHost",
11 | "request": "launch",
12 | "runtimeExecutable": "${execPath}",
13 | "args": [
14 | "--extensionDevelopmentPath=${workspaceFolder}"
15 | ]
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | **/*.ts
2 | **/tsconfig.json
3 | !file.ts
4 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## 1.1.0
4 | - Allow `${workspaceFolder}` in `vala.languageServerPath` configuration
5 |
6 | ## 1.0.4
7 | - Updated grammars
8 |
9 | ## 1.0.3
10 | - Add option to start server in debug mode
11 | - Add option for server to fail on critical messages
12 |
13 | ## 1.0.2
14 | - Support latest GVLS
15 |
16 | ## 1.0.0
17 | - Initial release
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2019 Jeremy Philippe
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vala-vscode - Vala support for Visual Studio Code
2 |
3 | ## Syntax highlighting and code intelligence for the Vala / Genie languages
4 |
5 | ---
6 |
7 | 
8 |
9 | ---
10 |
11 | This extension is based off of the `vala-code` extension by T. Abreu (https://github.com/thiagoabreu) and the `vala-grammar` extension by Jereme Philippe (https://github.com/philippejer/vala-grammar).
12 |
13 | **NOTE**: in order to get code intelligence, you must install the Vala Language Server (https://github.com/benwaffle/vala-language-server).
14 |
15 | ## How to edit the rules
16 |
17 | The YAML source file should be edited and then converted to XML with the "TextMate Languages" extension (https://marketplace.visualstudio.com/items?itemName=Togusa09.tmlanguage).
18 |
19 | Note that this plugin has an issue which interacts badly with language servers (false syntax errors), so it is a good idea to disable it afterwards.
20 |
--------------------------------------------------------------------------------
/images/vala.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vala-lang/vala-vscode/f526ecfc7ff9abe746002db7c1f27a27a2f5ec5b/images/vala.png
--------------------------------------------------------------------------------
/images/vala.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/vls-vscode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vala-lang/vala-vscode/f526ecfc7ff9abe746002db7c1f27a27a2f5ec5b/images/vls-vscode.png
--------------------------------------------------------------------------------
/language-configuration-genie.json:
--------------------------------------------------------------------------------
1 | {
2 | "comments": {
3 | "lineComment": "// ",
4 | "blockComment": [ "/* ", " */" ]
5 | },
6 | "brackets": [
7 | ["[", "]"],
8 | ["(", ")"]
9 | ],
10 | "autoClosingPairs": [
11 | ["[", "]"],
12 | ["(", ")"],
13 | { "open": "'", "close": "'", "notIn": ["string", "comment"] },
14 | { "open": "\"", "close": "\"", "notIn": ["string"] },
15 | { "open": "/**", "close": " */", "notIn": ["string"] },
16 | { "open": "/*", "close": " */", "notIn": ["string"] }
17 | ],
18 | "surroundingPairs": [
19 | ["[", "]"],
20 | ["(", ")"],
21 | ["'", "'"],
22 | ["\"", "\""]
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/language-configuration-vala.json:
--------------------------------------------------------------------------------
1 | {
2 | "indentationRules": {
3 | "increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"']*|\\([^)\"']*|\\[[^\\]\"']*)$",
4 | "decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
5 | },
6 | "comments": {
7 | "lineComment": "// ",
8 | "blockComment": [ "/* ", " */" ]
9 | },
10 | "brackets": [
11 | ["{", "}"],
12 | ["[", "]"],
13 | ["(", ")"]
14 | ],
15 | "autoClosingPairs": [
16 | ["{", "}"],
17 | ["[", "]"],
18 | ["(", ")"],
19 | { "open": "'", "close": "'", "notIn": ["string", "comment"] },
20 | { "open": "\"", "close": "\"", "notIn": ["string"] },
21 | { "open": "/**", "close": " */", "notIn": ["string"] },
22 | { "open": "/*", "close": " */", "notIn": ["string"] }
23 | ],
24 | "surroundingPairs": [
25 | ["{", "}"],
26 | ["[", "]"],
27 | ["(", ")"],
28 | ["<", ">"],
29 | ["'", "'"],
30 | ["\"", "\""]
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vala",
3 | "version": "1.1.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "vala",
9 | "version": "1.1.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "vscode-languageclient": "8.0.0-next.14",
13 | "which": "^2.0.2"
14 | },
15 | "devDependencies": {
16 | "@types/node": "^10.12.12",
17 | "@types/vscode": "^1.66.0",
18 | "@types/which": "^1.3.2",
19 | "esbuild": "^0.14.36",
20 | "typescript": "^3.2.2"
21 | },
22 | "engines": {
23 | "vscode": "^1.66.0"
24 | }
25 | },
26 | "node_modules/@types/node": {
27 | "version": "10.17.60",
28 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
29 | "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
30 | "dev": true
31 | },
32 | "node_modules/@types/vscode": {
33 | "version": "1.66.0",
34 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz",
35 | "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==",
36 | "dev": true
37 | },
38 | "node_modules/@types/which": {
39 | "version": "1.3.2",
40 | "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz",
41 | "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==",
42 | "dev": true
43 | },
44 | "node_modules/balanced-match": {
45 | "version": "1.0.2",
46 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
47 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
48 | },
49 | "node_modules/brace-expansion": {
50 | "version": "1.1.11",
51 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
52 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
53 | "dependencies": {
54 | "balanced-match": "^1.0.0",
55 | "concat-map": "0.0.1"
56 | }
57 | },
58 | "node_modules/concat-map": {
59 | "version": "0.0.1",
60 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
61 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
62 | },
63 | "node_modules/esbuild": {
64 | "version": "0.14.36",
65 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.36.tgz",
66 | "integrity": "sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw==",
67 | "dev": true,
68 | "hasInstallScript": true,
69 | "bin": {
70 | "esbuild": "bin/esbuild"
71 | },
72 | "engines": {
73 | "node": ">=12"
74 | },
75 | "optionalDependencies": {
76 | "esbuild-android-64": "0.14.36",
77 | "esbuild-android-arm64": "0.14.36",
78 | "esbuild-darwin-64": "0.14.36",
79 | "esbuild-darwin-arm64": "0.14.36",
80 | "esbuild-freebsd-64": "0.14.36",
81 | "esbuild-freebsd-arm64": "0.14.36",
82 | "esbuild-linux-32": "0.14.36",
83 | "esbuild-linux-64": "0.14.36",
84 | "esbuild-linux-arm": "0.14.36",
85 | "esbuild-linux-arm64": "0.14.36",
86 | "esbuild-linux-mips64le": "0.14.36",
87 | "esbuild-linux-ppc64le": "0.14.36",
88 | "esbuild-linux-riscv64": "0.14.36",
89 | "esbuild-linux-s390x": "0.14.36",
90 | "esbuild-netbsd-64": "0.14.36",
91 | "esbuild-openbsd-64": "0.14.36",
92 | "esbuild-sunos-64": "0.14.36",
93 | "esbuild-windows-32": "0.14.36",
94 | "esbuild-windows-64": "0.14.36",
95 | "esbuild-windows-arm64": "0.14.36"
96 | }
97 | },
98 | "node_modules/esbuild-android-64": {
99 | "version": "0.14.36",
100 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz",
101 | "integrity": "sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw==",
102 | "cpu": [
103 | "x64"
104 | ],
105 | "dev": true,
106 | "optional": true,
107 | "os": [
108 | "android"
109 | ],
110 | "engines": {
111 | "node": ">=12"
112 | }
113 | },
114 | "node_modules/esbuild-android-arm64": {
115 | "version": "0.14.36",
116 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz",
117 | "integrity": "sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg==",
118 | "cpu": [
119 | "arm64"
120 | ],
121 | "dev": true,
122 | "optional": true,
123 | "os": [
124 | "android"
125 | ],
126 | "engines": {
127 | "node": ">=12"
128 | }
129 | },
130 | "node_modules/esbuild-darwin-64": {
131 | "version": "0.14.36",
132 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz",
133 | "integrity": "sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ==",
134 | "cpu": [
135 | "x64"
136 | ],
137 | "dev": true,
138 | "optional": true,
139 | "os": [
140 | "darwin"
141 | ],
142 | "engines": {
143 | "node": ">=12"
144 | }
145 | },
146 | "node_modules/esbuild-darwin-arm64": {
147 | "version": "0.14.36",
148 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz",
149 | "integrity": "sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw==",
150 | "cpu": [
151 | "arm64"
152 | ],
153 | "dev": true,
154 | "optional": true,
155 | "os": [
156 | "darwin"
157 | ],
158 | "engines": {
159 | "node": ">=12"
160 | }
161 | },
162 | "node_modules/esbuild-freebsd-64": {
163 | "version": "0.14.36",
164 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz",
165 | "integrity": "sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww==",
166 | "cpu": [
167 | "x64"
168 | ],
169 | "dev": true,
170 | "optional": true,
171 | "os": [
172 | "freebsd"
173 | ],
174 | "engines": {
175 | "node": ">=12"
176 | }
177 | },
178 | "node_modules/esbuild-freebsd-arm64": {
179 | "version": "0.14.36",
180 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz",
181 | "integrity": "sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA==",
182 | "cpu": [
183 | "arm64"
184 | ],
185 | "dev": true,
186 | "optional": true,
187 | "os": [
188 | "freebsd"
189 | ],
190 | "engines": {
191 | "node": ">=12"
192 | }
193 | },
194 | "node_modules/esbuild-linux-32": {
195 | "version": "0.14.36",
196 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz",
197 | "integrity": "sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw==",
198 | "cpu": [
199 | "ia32"
200 | ],
201 | "dev": true,
202 | "optional": true,
203 | "os": [
204 | "linux"
205 | ],
206 | "engines": {
207 | "node": ">=12"
208 | }
209 | },
210 | "node_modules/esbuild-linux-64": {
211 | "version": "0.14.36",
212 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz",
213 | "integrity": "sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg==",
214 | "cpu": [
215 | "x64"
216 | ],
217 | "dev": true,
218 | "optional": true,
219 | "os": [
220 | "linux"
221 | ],
222 | "engines": {
223 | "node": ">=12"
224 | }
225 | },
226 | "node_modules/esbuild-linux-arm": {
227 | "version": "0.14.36",
228 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz",
229 | "integrity": "sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg==",
230 | "cpu": [
231 | "arm"
232 | ],
233 | "dev": true,
234 | "optional": true,
235 | "os": [
236 | "linux"
237 | ],
238 | "engines": {
239 | "node": ">=12"
240 | }
241 | },
242 | "node_modules/esbuild-linux-arm64": {
243 | "version": "0.14.36",
244 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz",
245 | "integrity": "sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw==",
246 | "cpu": [
247 | "arm64"
248 | ],
249 | "dev": true,
250 | "optional": true,
251 | "os": [
252 | "linux"
253 | ],
254 | "engines": {
255 | "node": ">=12"
256 | }
257 | },
258 | "node_modules/esbuild-linux-mips64le": {
259 | "version": "0.14.36",
260 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz",
261 | "integrity": "sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA==",
262 | "cpu": [
263 | "mips64el"
264 | ],
265 | "dev": true,
266 | "optional": true,
267 | "os": [
268 | "linux"
269 | ],
270 | "engines": {
271 | "node": ">=12"
272 | }
273 | },
274 | "node_modules/esbuild-linux-ppc64le": {
275 | "version": "0.14.36",
276 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz",
277 | "integrity": "sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg==",
278 | "cpu": [
279 | "ppc64"
280 | ],
281 | "dev": true,
282 | "optional": true,
283 | "os": [
284 | "linux"
285 | ],
286 | "engines": {
287 | "node": ">=12"
288 | }
289 | },
290 | "node_modules/esbuild-linux-riscv64": {
291 | "version": "0.14.36",
292 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz",
293 | "integrity": "sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A==",
294 | "cpu": [
295 | "riscv64"
296 | ],
297 | "dev": true,
298 | "optional": true,
299 | "os": [
300 | "linux"
301 | ],
302 | "engines": {
303 | "node": ">=12"
304 | }
305 | },
306 | "node_modules/esbuild-linux-s390x": {
307 | "version": "0.14.36",
308 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz",
309 | "integrity": "sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg==",
310 | "cpu": [
311 | "s390x"
312 | ],
313 | "dev": true,
314 | "optional": true,
315 | "os": [
316 | "linux"
317 | ],
318 | "engines": {
319 | "node": ">=12"
320 | }
321 | },
322 | "node_modules/esbuild-netbsd-64": {
323 | "version": "0.14.36",
324 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz",
325 | "integrity": "sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A==",
326 | "cpu": [
327 | "x64"
328 | ],
329 | "dev": true,
330 | "optional": true,
331 | "os": [
332 | "netbsd"
333 | ],
334 | "engines": {
335 | "node": ">=12"
336 | }
337 | },
338 | "node_modules/esbuild-openbsd-64": {
339 | "version": "0.14.36",
340 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz",
341 | "integrity": "sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg==",
342 | "cpu": [
343 | "x64"
344 | ],
345 | "dev": true,
346 | "optional": true,
347 | "os": [
348 | "openbsd"
349 | ],
350 | "engines": {
351 | "node": ">=12"
352 | }
353 | },
354 | "node_modules/esbuild-sunos-64": {
355 | "version": "0.14.36",
356 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz",
357 | "integrity": "sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ==",
358 | "cpu": [
359 | "x64"
360 | ],
361 | "dev": true,
362 | "optional": true,
363 | "os": [
364 | "sunos"
365 | ],
366 | "engines": {
367 | "node": ">=12"
368 | }
369 | },
370 | "node_modules/esbuild-windows-32": {
371 | "version": "0.14.36",
372 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz",
373 | "integrity": "sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w==",
374 | "cpu": [
375 | "ia32"
376 | ],
377 | "dev": true,
378 | "optional": true,
379 | "os": [
380 | "win32"
381 | ],
382 | "engines": {
383 | "node": ">=12"
384 | }
385 | },
386 | "node_modules/esbuild-windows-64": {
387 | "version": "0.14.36",
388 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz",
389 | "integrity": "sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ==",
390 | "cpu": [
391 | "x64"
392 | ],
393 | "dev": true,
394 | "optional": true,
395 | "os": [
396 | "win32"
397 | ],
398 | "engines": {
399 | "node": ">=12"
400 | }
401 | },
402 | "node_modules/esbuild-windows-arm64": {
403 | "version": "0.14.36",
404 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz",
405 | "integrity": "sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q==",
406 | "cpu": [
407 | "arm64"
408 | ],
409 | "dev": true,
410 | "optional": true,
411 | "os": [
412 | "win32"
413 | ],
414 | "engines": {
415 | "node": ">=12"
416 | }
417 | },
418 | "node_modules/isexe": {
419 | "version": "2.0.0",
420 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
421 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
422 | },
423 | "node_modules/lru-cache": {
424 | "version": "7.8.1",
425 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz",
426 | "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==",
427 | "engines": {
428 | "node": ">=12"
429 | }
430 | },
431 | "node_modules/minimatch": {
432 | "version": "3.1.2",
433 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
434 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
435 | "dependencies": {
436 | "brace-expansion": "^1.1.7"
437 | },
438 | "engines": {
439 | "node": "*"
440 | }
441 | },
442 | "node_modules/semver": {
443 | "version": "7.3.6",
444 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
445 | "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
446 | "dependencies": {
447 | "lru-cache": "^7.4.0"
448 | },
449 | "bin": {
450 | "semver": "bin/semver.js"
451 | },
452 | "engines": {
453 | "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0"
454 | }
455 | },
456 | "node_modules/typescript": {
457 | "version": "3.9.10",
458 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
459 | "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
460 | "dev": true,
461 | "bin": {
462 | "tsc": "bin/tsc",
463 | "tsserver": "bin/tsserver"
464 | },
465 | "engines": {
466 | "node": ">=4.2.0"
467 | }
468 | },
469 | "node_modules/vscode-jsonrpc": {
470 | "version": "8.0.0-next.7",
471 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.7.tgz",
472 | "integrity": "sha512-JX/F31LEsims0dAlOTKFE4E+AJMiJvdRSRViifFJSqSN7EzeYyWlfuDchF7g91oRNPZOIWfibTkDf3/UMsQGzQ==",
473 | "engines": {
474 | "node": ">=14.0.0"
475 | }
476 | },
477 | "node_modules/vscode-languageclient": {
478 | "version": "8.0.0-next.14",
479 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.14.tgz",
480 | "integrity": "sha512-NqjkOuDTMu8uo+PhoMsV72VO9Gd3wBi/ZpOrkRUOrWKQo7yUdiIw183g8wjH8BImgbK9ZP51HM7TI0ZhCnI1Mw==",
481 | "dependencies": {
482 | "minimatch": "^3.0.4",
483 | "semver": "^7.3.5",
484 | "vscode-languageserver-protocol": "3.17.0-next.16"
485 | },
486 | "engines": {
487 | "vscode": "^1.66.0"
488 | }
489 | },
490 | "node_modules/vscode-languageserver-protocol": {
491 | "version": "3.17.0-next.16",
492 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.16.tgz",
493 | "integrity": "sha512-tx4DnXw9u3N7vw+bx6n2NKp6FoxoNwiP/biH83AS30I2AnTGyLd7afSeH6Oewn2E8jvB7K15bs12sMppkKOVeQ==",
494 | "dependencies": {
495 | "vscode-jsonrpc": "8.0.0-next.7",
496 | "vscode-languageserver-types": "3.17.0-next.9"
497 | }
498 | },
499 | "node_modules/vscode-languageserver-types": {
500 | "version": "3.17.0-next.9",
501 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.9.tgz",
502 | "integrity": "sha512-9/PeDNPYduaoXRUzYpqmu4ZV9L01HGo0wH9FUt+sSHR7IXwA7xoXBfNUlv8gB9H0D2WwEmMomSy1NmhjKQyn3A=="
503 | },
504 | "node_modules/which": {
505 | "version": "2.0.2",
506 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
507 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
508 | "dependencies": {
509 | "isexe": "^2.0.0"
510 | },
511 | "bin": {
512 | "node-which": "bin/node-which"
513 | },
514 | "engines": {
515 | "node": ">= 8"
516 | }
517 | }
518 | },
519 | "dependencies": {
520 | "@types/node": {
521 | "version": "10.17.60",
522 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
523 | "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
524 | "dev": true
525 | },
526 | "@types/vscode": {
527 | "version": "1.66.0",
528 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz",
529 | "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==",
530 | "dev": true
531 | },
532 | "@types/which": {
533 | "version": "1.3.2",
534 | "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz",
535 | "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==",
536 | "dev": true
537 | },
538 | "balanced-match": {
539 | "version": "1.0.2",
540 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
541 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
542 | },
543 | "brace-expansion": {
544 | "version": "1.1.11",
545 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
546 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
547 | "requires": {
548 | "balanced-match": "^1.0.0",
549 | "concat-map": "0.0.1"
550 | }
551 | },
552 | "concat-map": {
553 | "version": "0.0.1",
554 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
555 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
556 | },
557 | "esbuild": {
558 | "version": "0.14.36",
559 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.36.tgz",
560 | "integrity": "sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw==",
561 | "dev": true,
562 | "requires": {
563 | "esbuild-android-64": "0.14.36",
564 | "esbuild-android-arm64": "0.14.36",
565 | "esbuild-darwin-64": "0.14.36",
566 | "esbuild-darwin-arm64": "0.14.36",
567 | "esbuild-freebsd-64": "0.14.36",
568 | "esbuild-freebsd-arm64": "0.14.36",
569 | "esbuild-linux-32": "0.14.36",
570 | "esbuild-linux-64": "0.14.36",
571 | "esbuild-linux-arm": "0.14.36",
572 | "esbuild-linux-arm64": "0.14.36",
573 | "esbuild-linux-mips64le": "0.14.36",
574 | "esbuild-linux-ppc64le": "0.14.36",
575 | "esbuild-linux-riscv64": "0.14.36",
576 | "esbuild-linux-s390x": "0.14.36",
577 | "esbuild-netbsd-64": "0.14.36",
578 | "esbuild-openbsd-64": "0.14.36",
579 | "esbuild-sunos-64": "0.14.36",
580 | "esbuild-windows-32": "0.14.36",
581 | "esbuild-windows-64": "0.14.36",
582 | "esbuild-windows-arm64": "0.14.36"
583 | }
584 | },
585 | "esbuild-android-64": {
586 | "version": "0.14.36",
587 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz",
588 | "integrity": "sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw==",
589 | "dev": true,
590 | "optional": true
591 | },
592 | "esbuild-android-arm64": {
593 | "version": "0.14.36",
594 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz",
595 | "integrity": "sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg==",
596 | "dev": true,
597 | "optional": true
598 | },
599 | "esbuild-darwin-64": {
600 | "version": "0.14.36",
601 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz",
602 | "integrity": "sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ==",
603 | "dev": true,
604 | "optional": true
605 | },
606 | "esbuild-darwin-arm64": {
607 | "version": "0.14.36",
608 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz",
609 | "integrity": "sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw==",
610 | "dev": true,
611 | "optional": true
612 | },
613 | "esbuild-freebsd-64": {
614 | "version": "0.14.36",
615 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz",
616 | "integrity": "sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww==",
617 | "dev": true,
618 | "optional": true
619 | },
620 | "esbuild-freebsd-arm64": {
621 | "version": "0.14.36",
622 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz",
623 | "integrity": "sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA==",
624 | "dev": true,
625 | "optional": true
626 | },
627 | "esbuild-linux-32": {
628 | "version": "0.14.36",
629 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz",
630 | "integrity": "sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw==",
631 | "dev": true,
632 | "optional": true
633 | },
634 | "esbuild-linux-64": {
635 | "version": "0.14.36",
636 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz",
637 | "integrity": "sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg==",
638 | "dev": true,
639 | "optional": true
640 | },
641 | "esbuild-linux-arm": {
642 | "version": "0.14.36",
643 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz",
644 | "integrity": "sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg==",
645 | "dev": true,
646 | "optional": true
647 | },
648 | "esbuild-linux-arm64": {
649 | "version": "0.14.36",
650 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz",
651 | "integrity": "sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw==",
652 | "dev": true,
653 | "optional": true
654 | },
655 | "esbuild-linux-mips64le": {
656 | "version": "0.14.36",
657 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz",
658 | "integrity": "sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA==",
659 | "dev": true,
660 | "optional": true
661 | },
662 | "esbuild-linux-ppc64le": {
663 | "version": "0.14.36",
664 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz",
665 | "integrity": "sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg==",
666 | "dev": true,
667 | "optional": true
668 | },
669 | "esbuild-linux-riscv64": {
670 | "version": "0.14.36",
671 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz",
672 | "integrity": "sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A==",
673 | "dev": true,
674 | "optional": true
675 | },
676 | "esbuild-linux-s390x": {
677 | "version": "0.14.36",
678 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz",
679 | "integrity": "sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg==",
680 | "dev": true,
681 | "optional": true
682 | },
683 | "esbuild-netbsd-64": {
684 | "version": "0.14.36",
685 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz",
686 | "integrity": "sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A==",
687 | "dev": true,
688 | "optional": true
689 | },
690 | "esbuild-openbsd-64": {
691 | "version": "0.14.36",
692 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz",
693 | "integrity": "sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg==",
694 | "dev": true,
695 | "optional": true
696 | },
697 | "esbuild-sunos-64": {
698 | "version": "0.14.36",
699 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz",
700 | "integrity": "sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ==",
701 | "dev": true,
702 | "optional": true
703 | },
704 | "esbuild-windows-32": {
705 | "version": "0.14.36",
706 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz",
707 | "integrity": "sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w==",
708 | "dev": true,
709 | "optional": true
710 | },
711 | "esbuild-windows-64": {
712 | "version": "0.14.36",
713 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz",
714 | "integrity": "sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ==",
715 | "dev": true,
716 | "optional": true
717 | },
718 | "esbuild-windows-arm64": {
719 | "version": "0.14.36",
720 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz",
721 | "integrity": "sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q==",
722 | "dev": true,
723 | "optional": true
724 | },
725 | "isexe": {
726 | "version": "2.0.0",
727 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
728 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
729 | },
730 | "lru-cache": {
731 | "version": "7.8.1",
732 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz",
733 | "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg=="
734 | },
735 | "minimatch": {
736 | "version": "3.1.2",
737 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
738 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
739 | "requires": {
740 | "brace-expansion": "^1.1.7"
741 | }
742 | },
743 | "semver": {
744 | "version": "7.3.6",
745 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
746 | "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
747 | "requires": {
748 | "lru-cache": "^7.4.0"
749 | }
750 | },
751 | "typescript": {
752 | "version": "3.9.10",
753 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
754 | "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
755 | "dev": true
756 | },
757 | "vscode-jsonrpc": {
758 | "version": "8.0.0-next.7",
759 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.7.tgz",
760 | "integrity": "sha512-JX/F31LEsims0dAlOTKFE4E+AJMiJvdRSRViifFJSqSN7EzeYyWlfuDchF7g91oRNPZOIWfibTkDf3/UMsQGzQ=="
761 | },
762 | "vscode-languageclient": {
763 | "version": "8.0.0-next.14",
764 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.0-next.14.tgz",
765 | "integrity": "sha512-NqjkOuDTMu8uo+PhoMsV72VO9Gd3wBi/ZpOrkRUOrWKQo7yUdiIw183g8wjH8BImgbK9ZP51HM7TI0ZhCnI1Mw==",
766 | "requires": {
767 | "minimatch": "^3.0.4",
768 | "semver": "^7.3.5",
769 | "vscode-languageserver-protocol": "3.17.0-next.16"
770 | }
771 | },
772 | "vscode-languageserver-protocol": {
773 | "version": "3.17.0-next.16",
774 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.16.tgz",
775 | "integrity": "sha512-tx4DnXw9u3N7vw+bx6n2NKp6FoxoNwiP/biH83AS30I2AnTGyLd7afSeH6Oewn2E8jvB7K15bs12sMppkKOVeQ==",
776 | "requires": {
777 | "vscode-jsonrpc": "8.0.0-next.7",
778 | "vscode-languageserver-types": "3.17.0-next.9"
779 | }
780 | },
781 | "vscode-languageserver-types": {
782 | "version": "3.17.0-next.9",
783 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.9.tgz",
784 | "integrity": "sha512-9/PeDNPYduaoXRUzYpqmu4ZV9L01HGo0wH9FUt+sSHR7IXwA7xoXBfNUlv8gB9H0D2WwEmMomSy1NmhjKQyn3A=="
785 | },
786 | "which": {
787 | "version": "2.0.2",
788 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
789 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
790 | "requires": {
791 | "isexe": "^2.0.0"
792 | }
793 | }
794 | }
795 | }
796 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vala",
3 | "displayName": "Vala",
4 | "description": "Syntax highlighting and language support for the Vala / Genie languages",
5 | "version": "1.1.0",
6 | "publisher": "prince781",
7 | "author": {
8 | "name": "Princeton Ferro",
9 | "email": "princetonferro@gmail.com"
10 | },
11 | "license": "MIT",
12 | "engines": {
13 | "vscode": "^1.66.0"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "https://github.com/vala-lang/vala-vscode.git"
18 | },
19 | "categories": [
20 | "Programming Languages"
21 | ],
22 | "icon": "images/vala.png",
23 | "main": "./out/main.js",
24 | "activationEvents": [
25 | "onLanguage:vala",
26 | "onLanguage:genie"
27 | ],
28 | "contributes": {
29 | "languages": [
30 | {
31 | "id": "vala",
32 | "aliases": [
33 | "Vala",
34 | "vala"
35 | ],
36 | "extensions": [
37 | ".vala",
38 | ".vapi"
39 | ],
40 | "configuration": "./language-configuration-vala.json"
41 | },
42 | {
43 | "id": "genie",
44 | "aliases": [
45 | "Genie",
46 | "genie"
47 | ],
48 | "extensions": [
49 | ".gs"
50 | ],
51 | "configuration": "./language-configuration-genie.json"
52 | }
53 | ],
54 | "grammars": [
55 | {
56 | "language": "vala",
57 | "scopeName": "source.vala",
58 | "path": "./syntaxes/vala.tmLanguage"
59 | },
60 | {
61 | "language": "genie",
62 | "scopeName": "source.genie",
63 | "path": "./syntaxes/genie.tmLanguage"
64 | }
65 | ],
66 | "problemPatterns": [
67 | {
68 | "name": "valac",
69 | "regexp": "^(.*?):(\\d+)[:\\.](\\d+)(?:-(\\d+)\\.(\\d+))?:\\s+(warning|error):\\s+(.*)$",
70 | "file": 1,
71 | "line": 2,
72 | "column": 3,
73 | "endLine": 4,
74 | "endColumn": 5,
75 | "severity": 6,
76 | "message": 7
77 | }
78 | ],
79 | "problemMatchers": [
80 | {
81 | "name": "valac",
82 | "owner": "vala",
83 | "fileLocation": "absolute",
84 | "pattern": "$valac"
85 | }
86 | ],
87 | "breakpoints": [
88 | {
89 | "language": "vala"
90 | }
91 | ],
92 | "configuration": {
93 | "type": "object",
94 | "title": "Vala / Genie Settings",
95 | "properties": {
96 | "vala.languageServerPath": {
97 | "type": "string",
98 | "description": "Binary name or path to language server",
99 | "default": ""
100 | },
101 | "vala.debugMode": {
102 | "type": "boolean",
103 | "description": "Whether to start the server in debug mode (`G_MESSAGES_DEBUG=all`)",
104 | "default": false
105 | },
106 | "vala.failOnCriticals": {
107 | "type": "boolean",
108 | "description": "Whether the server should fail on GLib critical messages (`G_DEBUG=fatal-criticals`)",
109 | "default": false
110 | }
111 | }
112 | }
113 | },
114 | "dependencies": {
115 | "vscode-languageclient": "8.0.0-next.14",
116 | "which": "^2.0.2"
117 | },
118 | "devDependencies": {
119 | "@types/node": "^10.12.12",
120 | "@types/vscode": "^1.66.0",
121 | "@types/which": "^1.3.2",
122 | "esbuild": "^0.14.36",
123 | "typescript": "^3.2.2"
124 | },
125 | "scripts": {
126 | "vscode:prepublish": "npm run esbuild-base --minify",
127 | "esbuild-base": "esbuild ./src/main.ts ./src/client.ts --bundle --outdir=out/ --external:vscode --format=cjs --platform=node",
128 | "esbuild": "npm run esbuild-base -- --sourcemap",
129 | "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch",
130 | "test-compile": "tsc -p ./"
131 | }
132 | }
133 |
--------------------------------------------------------------------------------
/src/client.ts:
--------------------------------------------------------------------------------
1 | // import LSP types
2 | import * as lsp from 'vscode-languageclient/node';
3 | import {
4 | LanguageClient,
5 | LanguageClientOptions,
6 | RevealOutputChannelOn,
7 | ServerOptions,
8 | Executable
9 | } from 'vscode-languageclient/node';
10 |
11 | import {
12 | ExtensionContext,
13 | workspace,
14 | window,
15 | commands,
16 | TextEditor,
17 | TextEditorEdit,
18 | Uri,
19 | Location,
20 | Position,
21 | Range,
22 | WorkspaceConfiguration
23 | } from 'vscode'
24 |
25 | import * as which from 'which'
26 |
27 | const VarRegex = new RegExp(/\$\{(\w+)\}/g);
28 | function substituteVSCodeVariableInString(val: string): string {
29 | return val.replace(VarRegex, (substring: string, varName) => {
30 | if (varName === "workspaceFolder") {
31 | const folders = workspace.workspaceFolders ?? [];
32 | if (folders.length >= 1) {
33 | return folders[0].uri.fsPath;
34 | }
35 | }
36 | return substring;
37 | });
38 | }
39 |
40 | export class ValaLanguageClient {
41 |
42 | config: WorkspaceConfiguration
43 |
44 | ls: LanguageClient | null = null
45 |
46 | constructor(_context: ExtensionContext) {
47 | this.config = workspace.getConfiguration('vala', window.activeTextEditor?.document.uri);
48 | let serverModule = this.languageServerPath;
49 |
50 | if (serverModule == null)
51 | return;
52 |
53 | let clientOptions: LanguageClientOptions = {
54 | documentSelector: ['vala', 'genie'],
55 | revealOutputChannelOn: RevealOutputChannelOn.Info
56 | };
57 |
58 | // default environment in non-debug mode
59 | let runEnvironment = { ...process.env };
60 |
61 | if (this.config.debugMode)
62 | runEnvironment['G_MESSAGES_DEBUG'] = 'all';
63 | if (this.config.failOnCriticals)
64 | runEnvironment['G_DEBUG'] = 'fatal-criticals';
65 |
66 | let runExe: Executable = {
67 | command: serverModule,
68 | options: {
69 | env: runEnvironment
70 | }
71 | };
72 | let debugExe: Executable = {
73 | command: serverModule,
74 | options: {
75 | env: {
76 | ...process.env,
77 | G_MESSAGES_DEBUG: 'all'
78 | }
79 | }
80 | };
81 | let serverOptions: ServerOptions = {
82 | run: runExe,
83 | debug: debugExe
84 | };
85 |
86 | this.ls = new LanguageClient('Vala Language Server', serverOptions, clientOptions);
87 |
88 | commands.registerTextEditorCommand('vala.showBaseSymbol', this.peekSymbol);
89 | commands.registerTextEditorCommand('vala.showHiddenSymbol', this.peekSymbol);
90 |
91 | this.ls.start();
92 | }
93 |
94 | get languageServerPath(): string | null {
95 | return substituteVSCodeVariableInString(this.config.languageServerPath)
96 | || which.sync('vala-language-server', { nothrow: true })
97 | || which.sync('org.gnome.gvls.stdio.Server', { nothrow: true })
98 | || which.sync('gvls', { nothrow: true }) // for legacy GVLS
99 | }
100 |
101 | peekSymbol(_editor: TextEditor, _edit: TextEditorEdit, lspCurrentLocation: lsp.Location, lspTargetLocation: lsp.Location): void {
102 | let currentLocation = new Location(
103 | Uri.parse(lspCurrentLocation.uri),
104 | new Range(
105 | new Position(lspCurrentLocation.range.start.line, lspCurrentLocation.range.start.character),
106 | new Position(lspCurrentLocation.range.end.line, lspCurrentLocation.range.end.character)
107 | )
108 | );
109 | let targetLocation = new Location(
110 | Uri.parse(lspTargetLocation.uri),
111 | new Range(
112 | new Position(lspTargetLocation.range.start.line, lspTargetLocation.range.start.character),
113 | new Position(lspTargetLocation.range.end.line, lspTargetLocation.range.end.character)
114 | )
115 | );
116 |
117 | commands.executeCommand(
118 | 'editor.action.peekLocations',
119 | currentLocation.uri, // anchor uri and position
120 | currentLocation.range.end,
121 | [targetLocation], // results (vscode.Location[])
122 | 'peek', // mode ('peek' | 'gotoAndPeek' | 'goto')
123 | 'Nothing found' // <- message
124 | );
125 | }
126 |
127 | dispose() {
128 | if (this.ls) {
129 | this.ls!.stop()
130 |
131 | this.ls = null
132 | }
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path'
2 | import { spawn } from 'child_process'
3 |
4 | import { ExtensionContext, languages, IndentAction, commands } from 'vscode'
5 |
6 | import { ValaLanguageClient } from './client'
7 |
8 | export function activate(context: ExtensionContext) {
9 | let client = new ValaLanguageClient(context)
10 |
11 | context.subscriptions.push(client)
12 | }
13 |
14 |
15 |
--------------------------------------------------------------------------------
/syntaxes/genie.YAML-tmLanguage:
--------------------------------------------------------------------------------
1 | name: Genie
2 | scopeName: source.genie
3 | fileTypes:
4 | - gs
5 | uuid: b1e902c2-7248-400a-a6e6-666f250eadb1
6 |
7 | patterns:
8 | - include: '#code'
9 |
10 | repository:
11 | code:
12 | patterns:
13 | - include: '#comments'
14 | - include: '#constants'
15 | - include: '#strings'
16 | - include: '#keywords'
17 | - include: '#types'
18 | - include: '#functions'
19 | - include: '#variables'
20 |
21 | comments:
22 | patterns:
23 | - name: comment.block.empty.vala
24 | match: '/\*\*/'
25 | captures:
26 | '0': { name: punctuation.definition.comment.vala }
27 | - include: text.html.javadoc
28 | - include: '#comments-inline'
29 |
30 | comments-inline:
31 | patterns:
32 | - name: comment.block.vala
33 | begin: '/\*'
34 | captures:
35 | '0': { name: punctuation.definition.comment.vala }
36 | end: '\*/'
37 | - match: '\s*((//).*$\n?)'
38 | captures:
39 | '1': { name: comment.line.double-slash.vala }
40 | '2': { name: punctuation.definition.comment.vala }
41 |
42 | constants:
43 | patterns:
44 | - name: constant.numeric.vala
45 | match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b'
46 | - name: variable.other.constant.vala
47 | match: '\b([A-Z][A-Z0-9_]+)\b'
48 |
49 | strings:
50 | patterns:
51 | - name: string.quoted.triple.vala
52 | begin: '"""'
53 | end: '"""'
54 | - name: string.quoted.interpolated.vala
55 | begin: '@"'
56 | end: '"'
57 | patterns:
58 | - name: constant.character.escape.vala
59 | match: '\\.'
60 | - name: constant.character.escape.vala
61 | match: '\$\w+'
62 | - name: constant.character.escape.vala
63 | match: '\$\(([^)(]|\(([^)(]|\([^)]*\))*\))*\)'
64 | - name: string.quoted.double.vala
65 | begin: '"'
66 | end: '"'
67 | patterns:
68 | - name: constant.character.escape.vala
69 | match: '\\.'
70 | - name: string.quoted.single.vala
71 | begin: ''''
72 | end: ''''
73 | patterns:
74 | - name: constant.character.escape.vala
75 | match: '\\.'
76 | - name: string.regexp.vala
77 | match: '/((\\/)|([^/]))*/(?=\s*[,;)\.\n])'
78 |
79 | keywords:
80 | patterns:
81 | - name: keyword.vala
82 | match: '(?<=^|[^@\w\.])(as|do|if|in|is|of|or|to|and|def|for|get|isa|new|not|out|ref|set|try|var|case|dict|else|enum|init|list|lock|null|pass|prop|self|true|uses|void|weak|when|array|async|break|class|const|event|false|final|owned|print|super|raise|while|yield|assert|delete|downto|except|extern|inline|params|public|raises|return|sealed|sizeof|static|struct|typeof|default|dynamic|ensures|finally|private|unowned|virtual|abstract|continue|delegate|internal|override|readonly|requires|volatile|construct|errordomain|interface|namespace|protected|implements)\b'
83 | - name: keyword.vala
84 | match: '(?<=^|[^@\w\.])(bool|double|float|unichar|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\b'
85 | - name: keyword.vala
86 | match: '(#if|#elif|#else|#endif)'
87 |
88 | types:
89 | patterns:
90 | - name: storage.type.primitive.vala
91 | match: '(?<=^|[^@\w\.])(bool|double|float|unichar|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\b'
92 | - name: entity.name.type.vala
93 | match: '\b([A-Z]+\w*)\b'
94 |
95 | functions:
96 | patterns:
97 | - name: entity.name.function.vala
98 | match: '(\w+)(?=\s*(<[\s\w.]+>\s*)?\()'
99 |
100 | variables:
101 | patterns:
102 | - name: variable.other.vala
103 | match: '\b([_a-z]+\w*)\b'
104 |
--------------------------------------------------------------------------------
/syntaxes/genie.tmLanguage:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | name
6 | Genie
7 | scopeName
8 | source.genie
9 | fileTypes
10 |
11 | gs
12 |
13 | uuid
14 | b1e902c2-7248-400a-a6e6-666f250eadb1
15 | patterns
16 |
17 |
18 | include
19 | #code
20 |
21 |
22 | repository
23 |
24 | code
25 |
26 | patterns
27 |
28 |
29 | include
30 | #comments
31 |
32 |
33 | include
34 | #constants
35 |
36 |
37 | include
38 | #strings
39 |
40 |
41 | include
42 | #keywords
43 |
44 |
45 | include
46 | #types
47 |
48 |
49 | include
50 | #functions
51 |
52 |
53 | include
54 | #variables
55 |
56 |
57 |
58 | comments
59 |
60 | patterns
61 |
62 |
63 | name
64 | comment.block.empty.vala
65 | match
66 | /\*\*/
67 | captures
68 |
69 | 0
70 |
71 | name
72 | punctuation.definition.comment.vala
73 |
74 |
75 |
76 |
77 | include
78 | text.html.javadoc
79 |
80 |
81 | include
82 | #comments-inline
83 |
84 |
85 |
86 | comments-inline
87 |
88 | patterns
89 |
90 |
91 | name
92 | comment.block.vala
93 | begin
94 | /\*
95 | captures
96 |
97 | 0
98 |
99 | name
100 | punctuation.definition.comment.vala
101 |
102 |
103 | end
104 | \*/
105 |
106 |
107 | match
108 | \s*((//).*$\n?)
109 | captures
110 |
111 | 1
112 |
113 | name
114 | comment.line.double-slash.vala
115 |
116 | 2
117 |
118 | name
119 | punctuation.definition.comment.vala
120 |
121 |
122 |
123 |
124 |
125 | constants
126 |
127 | patterns
128 |
129 |
130 | name
131 | constant.numeric.vala
132 | match
133 | \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
134 |
135 |
136 | name
137 | variable.other.constant.vala
138 | match
139 | \b([A-Z][A-Z0-9_]+)\b
140 |
141 |
142 |
143 | strings
144 |
145 | patterns
146 |
147 |
148 | name
149 | string.quoted.triple.vala
150 | begin
151 | """
152 | end
153 | """
154 |
155 |
156 | name
157 | string.quoted.interpolated.vala
158 | begin
159 | @"
160 | end
161 | "
162 | patterns
163 |
164 |
165 | name
166 | constant.character.escape.vala
167 | match
168 | \\.
169 |
170 |
171 | name
172 | constant.character.escape.vala
173 | match
174 | \$\w+
175 |
176 |
177 | name
178 | constant.character.escape.vala
179 | match
180 | \$\(([^)(]|\(([^)(]|\([^)]*\))*\))*\)
181 |
182 |
183 |
184 |
185 | name
186 | string.quoted.double.vala
187 | begin
188 | "
189 | end
190 | "
191 | patterns
192 |
193 |
194 | name
195 | constant.character.escape.vala
196 | match
197 | \\.
198 |
199 |
200 |
201 |
202 | name
203 | string.quoted.single.vala
204 | begin
205 | '
206 | end
207 | '
208 | patterns
209 |
210 |
211 | name
212 | constant.character.escape.vala
213 | match
214 | \\.
215 |
216 |
217 |
218 |
219 | name
220 | string.regexp.vala
221 | match
222 | /((\\/)|([^/]))*/(?=\s*[,;)\.\n])
223 |
224 |
225 |
226 | keywords
227 |
228 | patterns
229 |
230 |
231 | name
232 | keyword.vala
233 | match
234 | (?<=^|[^@\w\.])(as|do|if|in|is|of|or|to|and|def|for|get|isa|new|not|out|ref|set|try|var|case|dict|else|enum|init|list|lock|null|pass|prop|self|true|uses|void|weak|when|array|async|break|class|const|event|false|final|owned|print|super|raise|while|yield|assert|delete|downto|except|extern|inline|params|public|raises|return|sealed|sizeof|static|struct|typeof|default|dynamic|ensures|finally|private|unowned|virtual|abstract|continue|delegate|internal|override|readonly|requires|volatile|construct|errordomain|interface|namespace|protected|implements)\b
235 |
236 |
237 | name
238 | keyword.vala
239 | match
240 | (?<=^|[^@\w\.])(bool|double|float|unichar|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\b
241 |
242 |
243 | name
244 | keyword.vala
245 | match
246 | (#if|#elif|#else|#endif)
247 |
248 |
249 |
250 | types
251 |
252 | patterns
253 |
254 |
255 | name
256 | storage.type.primitive.vala
257 | match
258 | (?<=^|[^@\w\.])(bool|double|float|unichar|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\b
259 |
260 |
261 | name
262 | entity.name.type.vala
263 | match
264 | \b([A-Z]+\w*)\b
265 |
266 |
267 |
268 | functions
269 |
270 | patterns
271 |
272 |
273 | name
274 | entity.name.function.vala
275 | match
276 | (\w+)(?=\s*(<[\s\w.]+>\s*)?\()
277 |
278 |
279 |
280 | variables
281 |
282 | patterns
283 |
284 |
285 | name
286 | variable.other.vala
287 | match
288 | \b([_a-z]+\w*)\b
289 |
290 |
291 |
292 |
293 |
294 |
--------------------------------------------------------------------------------
/syntaxes/vala.YAML-tmLanguage:
--------------------------------------------------------------------------------
1 | name: Vala
2 | scopeName: source.vala
3 | fileTypes:
4 | - vala
5 | - vapi
6 | - gs
7 | uuid: 5fbc8212-3c2f-45ac-83d2-0c9195878913
8 |
9 | patterns:
10 | - include: '#code'
11 |
12 | repository:
13 | code:
14 | patterns:
15 | - include: '#comments'
16 | - include: '#constants'
17 | - include: '#strings'
18 | - include: '#keywords'
19 | - include: '#types'
20 | - include: '#functions'
21 | - include: '#variables'
22 |
23 | comments:
24 | patterns:
25 | - name: comment.block.empty.vala
26 | match: '/\*\*/'
27 | captures:
28 | '0': { name: punctuation.definition.comment.vala }
29 | - include: text.html.javadoc
30 | - include: '#comments-inline'
31 |
32 | comments-inline:
33 | patterns:
34 | - name: comment.block.vala
35 | begin: '/\*'
36 | captures:
37 | '0': { name: punctuation.definition.comment.vala }
38 | end: '\*/'
39 | - match: '\s*((//).*$\n?)'
40 | captures:
41 | '1': { name: comment.line.double-slash.vala }
42 | '2': { name: punctuation.definition.comment.vala }
43 |
44 | constants:
45 | patterns:
46 | - name: constant.numeric.vala
47 | match: '\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b'
48 | - name: variable.other.constant.vala
49 | match: '\b([A-Z][A-Z0-9_]+)\b'
50 |
51 | strings:
52 | patterns:
53 | - name: string.quoted.triple.vala
54 | begin: '"""'
55 | end: '"""'
56 | - name: string.quoted.interpolated.vala
57 | begin: '@"'
58 | end: '"'
59 | patterns:
60 | - name: constant.character.escape.vala
61 | match: '\\.'
62 | - name: constant.character.escape.vala
63 | match: '\$\w+'
64 | - name: constant.character.escape.vala
65 | match: '\$\(([^)(]|\(([^)(]|\([^)]*\))*\))*\)'
66 | - name: string.quoted.double.vala
67 | begin: '"'
68 | end: '"'
69 | patterns:
70 | - name: constant.character.escape.vala
71 | match: '\\.'
72 | - name: string.quoted.single.vala
73 | begin: ''''
74 | end: ''''
75 | patterns:
76 | - name: constant.character.escape.vala
77 | match: '\\.'
78 | - name: string.regexp.vala
79 | match: '/((\\/)|([^/]))*/(?=\s*[,;)\.\n])'
80 |
81 | keywords:
82 | patterns:
83 | - name: keyword.vala
84 | match: '(?<=^|[^@\w\.])(as|do|if|in|is|not|or|and|for|get|new|out|ref|set|try|var|base|case|else|enum|lock|null|this|true|void|weak|async|break|catch|class|const|false|owned|throw|using|while|with|yield|delete|extern|inline|params|public|return|sealed|signal|sizeof|static|struct|switch|throws|typeof|unlock|default|dynamic|ensures|finally|foreach|private|unowned|virtual|abstract|continue|delegate|internal|override|requires|volatile|construct|interface|namespace|protected|errordomain)\b'
85 | - name: keyword.vala
86 | match: '(?<=^|[^@\w\.])(bool|double|float|unichar|unichar2|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|string16|string32|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64|va_list|time_t)\b'
87 | - name: keyword.vala
88 | match: '(#if|#elif|#else|#endif)'
89 |
90 | types:
91 | patterns:
92 | - name: storage.type.primitive.vala
93 | match: '(?<=^|[^@\w\.])(bool|double|float|unichar|unichar2|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|string16|string32|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64|va_list|time_t)\b'
94 | - name: entity.name.type.vala
95 | match: '\b([A-Z]+\w*)\b'
96 |
97 | functions:
98 | patterns:
99 | - name: entity.name.function.vala
100 | match: '(\w+)(?=\s*(<[\s\w.]+>\s*)?\()'
101 |
102 | variables:
103 | patterns:
104 | - name: variable.other.vala
105 | match: '\b([_a-z]+\w*)\b'
106 |
--------------------------------------------------------------------------------
/syntaxes/vala.tmLanguage:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | name
6 | Vala
7 | scopeName
8 | source.vala
9 | fileTypes
10 |
11 | vala
12 | vapi
13 | gs
14 |
15 | uuid
16 | 5fbc8212-3c2f-45ac-83d2-0c9195878913
17 | patterns
18 |
19 |
20 | include
21 | #code
22 |
23 |
24 | repository
25 |
26 | code
27 |
28 | patterns
29 |
30 |
31 | include
32 | #comments
33 |
34 |
35 | include
36 | #constants
37 |
38 |
39 | include
40 | #strings
41 |
42 |
43 | include
44 | #keywords
45 |
46 |
47 | include
48 | #types
49 |
50 |
51 | include
52 | #functions
53 |
54 |
55 | include
56 | #variables
57 |
58 |
59 |
60 | comments
61 |
62 | patterns
63 |
64 |
65 | name
66 | comment.block.empty.vala
67 | match
68 | /\*\*/
69 | captures
70 |
71 | 0
72 |
73 | name
74 | punctuation.definition.comment.vala
75 |
76 |
77 |
78 |
79 | include
80 | text.html.javadoc
81 |
82 |
83 | include
84 | #comments-inline
85 |
86 |
87 |
88 | comments-inline
89 |
90 | patterns
91 |
92 |
93 | name
94 | comment.block.vala
95 | begin
96 | /\*
97 | captures
98 |
99 | 0
100 |
101 | name
102 | punctuation.definition.comment.vala
103 |
104 |
105 | end
106 | \*/
107 |
108 |
109 | match
110 | \s*((//).*$\n?)
111 | captures
112 |
113 | 1
114 |
115 | name
116 | comment.line.double-slash.vala
117 |
118 | 2
119 |
120 | name
121 | punctuation.definition.comment.vala
122 |
123 |
124 |
125 |
126 |
127 | constants
128 |
129 | patterns
130 |
131 |
132 | name
133 | constant.numeric.vala
134 | match
135 | \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\b
136 |
137 |
138 | name
139 | variable.other.constant.vala
140 | match
141 | \b([A-Z][A-Z0-9_]+)\b
142 |
143 |
144 |
145 | strings
146 |
147 | patterns
148 |
149 |
150 | name
151 | string.quoted.triple.vala
152 | begin
153 | """
154 | end
155 | """
156 |
157 |
158 | name
159 | string.quoted.interpolated.vala
160 | begin
161 | @"
162 | end
163 | "
164 | patterns
165 |
166 |
167 | name
168 | constant.character.escape.vala
169 | match
170 | \\.
171 |
172 |
173 | name
174 | constant.character.escape.vala
175 | match
176 | \$\w+
177 |
178 |
179 | name
180 | constant.character.escape.vala
181 | match
182 | \$\(([^)(]|\(([^)(]|\([^)]*\))*\))*\)
183 |
184 |
185 |
186 |
187 | name
188 | string.quoted.double.vala
189 | begin
190 | "
191 | end
192 | "
193 | patterns
194 |
195 |
196 | name
197 | constant.character.escape.vala
198 | match
199 | \\.
200 |
201 |
202 |
203 |
204 | name
205 | string.quoted.single.vala
206 | begin
207 | '
208 | end
209 | '
210 | patterns
211 |
212 |
213 | name
214 | constant.character.escape.vala
215 | match
216 | \\.
217 |
218 |
219 |
220 |
221 | name
222 | string.regexp.vala
223 | match
224 | /((\\/)|([^/]))*/(?=\s*[,;)\.\n])
225 |
226 |
227 |
228 | keywords
229 |
230 | patterns
231 |
232 |
233 | name
234 | keyword.vala
235 | match
236 | (?<=^|[^@\w\.])(as|do|if|in|is|not|or|and|for|get|new|out|ref|set|try|var|base|case|else|enum|lock|null|this|true|void|weak|async|break|catch|class|const|false|owned|throw|using|while|with|yield|delete|extern|inline|params|public|return|sealed|signal|sizeof|static|struct|switch|throws|typeof|unlock|default|dynamic|ensures|finally|foreach|private|unowned|virtual|abstract|continue|delegate|internal|override|requires|volatile|construct|interface|namespace|protected|errordomain)\b
237 |
238 |
239 | name
240 | keyword.vala
241 | match
242 | (?<=^|[^@\w\.])(bool|double|float|unichar|unichar2|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|string16|string32|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64|va_list|time_t)\b
243 |
244 |
245 | name
246 | keyword.vala
247 | match
248 | (#if|#elif|#else|#endif)
249 |
250 |
251 |
252 | types
253 |
254 | patterns
255 |
256 |
257 | name
258 | storage.type.primitive.vala
259 | match
260 | (?<=^|[^@\w\.])(bool|double|float|unichar|unichar2|char|uchar|int|uint|long|ulong|short|ushort|size_t|ssize_t|string|string16|string32|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64|va_list|time_t)\b
261 |
262 |
263 | name
264 | entity.name.type.vala
265 | match
266 | \b([A-Z]+\w*)\b
267 |
268 |
269 |
270 | functions
271 |
272 | patterns
273 |
274 |
275 | name
276 | entity.name.function.vala
277 | match
278 | (\w+)(?=\s*(<[\s\w.]+>\s*)?\()
279 |
280 |
281 |
282 | variables
283 |
284 | patterns
285 |
286 |
287 | name
288 | variable.other.vala
289 | match
290 | \b([_a-z]+\w*)\b
291 |
292 |
293 |
294 |
295 |
296 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es6",
5 | "outDir": "out",
6 | "moduleResolution": "node",
7 | "strict": true
8 | },
9 | "exclude": [
10 | "node_modules"
11 | ]
12 | }
--------------------------------------------------------------------------------