├── .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 | ![screenshot](images/vls-vscode.png) 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 | } --------------------------------------------------------------------------------