From 9127b52797b7de209cc70b92ee251ec0b20ce145 Mon Sep 17 00:00:00 2001 From: Sohum Banerjea Date: Thu, 26 Aug 2021 20:05:56 -0700 Subject: [PATCH] first pass at a svelte checker --- package.json | 1 + .../src/checkers/svelte/main.ts | 152 +++++++++++ packages/vite-plugin-checker/src/logger.ts | 6 +- packages/vite-plugin-checker/src/main.ts | 8 +- packages/vite-plugin-checker/src/types.ts | 8 + pnpm-lock.yaml | 246 +++++++++++++++++- 6 files changed, 416 insertions(+), 5 deletions(-) create mode 100644 packages/vite-plugin-checker/src/checkers/svelte/main.ts diff --git a/package.json b/package.json index e7a24d82..974fb5d7 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "rimraf": "^3.0.2", "semver": "^7.3.5", "strip-ansi": "^7.0.0", + "svelte-language-server": "^0.14.7", "ts-jest": "^27.0.3", "typescript": "^4.2.2", "vite": "^2.3.8", diff --git a/packages/vite-plugin-checker/src/checkers/svelte/main.ts b/packages/vite-plugin-checker/src/checkers/svelte/main.ts new file mode 100644 index 00000000..9d5a1c7f --- /dev/null +++ b/packages/vite-plugin-checker/src/checkers/svelte/main.ts @@ -0,0 +1,152 @@ +import os from 'os' +import path from 'path' +import * as fs from 'fs' +import invariant from 'tiny-invariant' +import { URI } from 'vscode-uri' +import { watch } from 'chokidar' +import { SvelteCheck } from 'svelte-language-server' +import { parentPort } from 'worker_threads' + +import { Checker } from '../../Checker' +import { + diagnosticToTerminalLog, + diagnosticToViteError, + normalizeLspDiagnostic, +} from '../../logger' + +import type { CreateDiagnostic } from '../../types' + +// based off the class in svelte-check/src/index.ts +class DiagnosticsWatcher { + private updateDiagnostics: any + private svelteCheck: SvelteCheck + private overlay: boolean + + public constructor(root: string, overlay: boolean) { + this.overlay = overlay + this.svelteCheck = new SvelteCheck(root, { + compilerWarnings: {}, + diagnosticSources: ['js', 'svelte', 'css'], + }) + + watch(`${root}/**/*.{svelte,d.ts,ts,js}`, { + ignored: ['node_modules'].map((ignore) => path.join(root, ignore)), + ignoreInitial: false, + }) + .on('add', (path) => this.updateDocument(path, true)) + .on('unlink', (path) => this.removeDocument(path)) + .on('change', (path) => this.updateDocument(path, false)) + } + + private async updateDocument(path: string, isNew: boolean) { + const text = fs.readFileSync(path, 'utf-8') + await this.svelteCheck.upsertDocument({ text, uri: URI.file(path).toString() }, isNew) + this.scheduleDiagnostics() + } + + private async removeDocument(path: string) { + await this.svelteCheck.removeDocument(URI.file(path).toString()) + this.scheduleDiagnostics() + } + + private scheduleDiagnostics() { + clearTimeout(this.updateDiagnostics) + this.updateDiagnostics = setTimeout(async () => { + let logChunk = '' + try { + const ds = await this.svelteCheck.getDiagnostics() + let currErr = null + + for (const { filePath, text, diagnostics } of ds) { + for (const diagnostic of diagnostics) { + const formattedDiagnostic = normalizeLspDiagnostic({ + diagnostic, + absFilePath: filePath, + fileText: text, + checker: 'svelte', + }) + + if (currErr === null) { + currErr = diagnosticToViteError(formattedDiagnostic) + } + logChunk += os.EOL + diagnosticToTerminalLog(formattedDiagnostic, 'svelte') + } + } + + if (this.overlay) { + parentPort?.postMessage({ + type: 'ERROR', + payload: { + type: 'error', + err: currErr, + }, + }) + } + + console.log(logChunk) + } catch (err) { + if (this.overlay) { + parentPort?.postMessage({ + type: 'ERROR', + payload: { + type: 'error', + err: err.message, + }, + }) + } + console.error(err.message) + } + }, 1000) + } +} + +const createDiagnostic: CreateDiagnostic<'svelte'> = (pluginConfig) => { + let overlay = true // Vite defaults to true + + return { + config: ({ hmr }) => { + const viteOverlay = !(typeof hmr === 'object' && hmr.overlay === false) + + if (pluginConfig.overlay === false || !viteOverlay) { + overlay = false + } + }, + configureServer({ root }) { + invariant(pluginConfig.svelte, 'config.svelte should be `false`') + let svelteRoot = root + + if (pluginConfig.svelte !== true && pluginConfig.svelte.root) { + svelteRoot = pluginConfig.svelte.root + } + + let watcher = new DiagnosticsWatcher(svelteRoot, overlay) + return watcher + }, + } +} + +export class SvelteChecker extends Checker<'svelte'> { + public constructor() { + super({ + name: 'svelte', + absFilePath: __filename, + build: { + buildBin: (_config) => { + return ['svelte-check', []] + }, + }, + createDiagnostic, + }) + } + + public init() { + const createServeAndBuild = super.initMainThread() + module.exports.createServeAndBuild = createServeAndBuild + + super.initWorkerThread() + } +} + +const svelteChecker = new SvelteChecker() +svelteChecker.prepare() +svelteChecker.init() diff --git a/packages/vite-plugin-checker/src/logger.ts b/packages/vite-plugin-checker/src/logger.ts index 6711ee39..a8ef983a 100644 --- a/packages/vite-plugin-checker/src/logger.ts +++ b/packages/vite-plugin-checker/src/logger.ts @@ -53,7 +53,7 @@ export enum DiagnosticLevel { export function diagnosticToTerminalLog( d: NormalizedDiagnostic, - name?: 'TypeScript' | 'vue-tsc' | 'VLS' | 'ESLint' + name?: 'TypeScript' | 'vue-tsc' | 'VLS' | 'ESLint' | 'svelte' ): string { const nameInLabel = name ? `(${name})` : '' const boldBlack = chalk.bold.rgb(0, 0, 0) @@ -180,10 +180,12 @@ export function normalizeLspDiagnostic({ diagnostic, absFilePath, fileText, + checker = 'VLS', }: { diagnostic: LspDiagnostic absFilePath: string fileText: string + checker?: string }): NormalizedDiagnostic { let level = DiagnosticLevel.Error const loc = lspRange2Location(diagnostic.range) @@ -210,7 +212,7 @@ export function normalizeLspDiagnostic({ codeFrame, stripedCodeFrame: codeFrame && strip(codeFrame), id: absFilePath, - checker: 'VLS', + checker, loc, level, } diff --git a/packages/vite-plugin-checker/src/main.ts b/packages/vite-plugin-checker/src/main.ts index 3ce0e21a..68da62eb 100644 --- a/packages/vite-plugin-checker/src/main.ts +++ b/packages/vite-plugin-checker/src/main.ts @@ -19,7 +19,13 @@ export * from './codeFrame' export * from './worker' const sharedConfigKeys: (keyof SharedConfig)[] = ['enableBuild', 'overlay'] -const buildInCheckerKeys: BuildInCheckerNames[] = ['typescript', 'vueTsc', 'vls', 'eslint'] +const buildInCheckerKeys: BuildInCheckerNames[] = [ + 'typescript', + 'vueTsc', + 'vls', + 'eslint', + 'svelte', +] function createCheckers(userConfig: UserPluginConfig, env: ConfigEnv): ServeAndBuildChecker[] { const serveAndBuildCheckers: ServeAndBuildChecker[] = [] diff --git a/packages/vite-plugin-checker/src/types.ts b/packages/vite-plugin-checker/src/types.ts index e2437f82..c7d1cea3 100644 --- a/packages/vite-plugin-checker/src/types.ts +++ b/packages/vite-plugin-checker/src/types.ts @@ -45,6 +45,13 @@ export type EslintConfig = // watchDelay?: number } +export type SvelteConfig = + | boolean + | Partial<{ + root?: string + // TODO: support svelte config + }> + /** checkers shared configuration */ export interface SharedConfig { /** @@ -65,6 +72,7 @@ export interface BuildInCheckers { vueTsc: VueTscConfig vls: VlsConfig eslint: EslintConfig + svelte: SvelteConfig } export type BuildInCheckerNames = keyof BuildInCheckers diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66e1bfa9..fd55fae7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,7 @@ importers: rimraf: ^3.0.2 semver: ^7.3.5 strip-ansi: ^7.0.0 + svelte-language-server: ^0.14.7 ts-jest: ^27.0.3 typescript: ^4.2.2 vite: ^2.3.8 @@ -66,6 +67,7 @@ importers: rimraf: 3.0.2 semver: 7.3.5 strip-ansi: 7.0.0 + svelte-language-server: 0.14.7 ts-jest: 27.0.3_jest@27.0.4+typescript@4.3.2 typescript: 4.3.2 vite: 2.3.8 @@ -648,6 +650,22 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@emmetio/abbreviation/2.2.2: + resolution: {integrity: sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw==} + dependencies: + '@emmetio/scanner': 1.0.0 + dev: true + + /@emmetio/css-abbreviation/2.1.4: + resolution: {integrity: sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==} + dependencies: + '@emmetio/scanner': 1.0.0 + dev: true + + /@emmetio/scanner/1.0.0: + resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} + dev: true + /@eslint/eslintrc/0.4.2: resolution: {integrity: sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1101,6 +1119,10 @@ packages: resolution: {integrity: sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==} dev: true + /@types/pug/2.0.5: + resolution: {integrity: sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==} + dev: true + /@types/react-dom/17.0.7: resolution: {integrity: sha512-Wd5xvZRlccOrCTej8jZkoFZuZRKHzanDDv1xglI33oBNFMWrqOSzrvWFw7ngSiZjrpJAzPKFtX7JvuXpkNmQHA==} dependencies: @@ -1122,6 +1144,12 @@ packages: '@types/node': 14.17.3 dev: true + /@types/sass/1.16.1: + resolution: {integrity: sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==} + dependencies: + '@types/node': 15.12.5 + dev: true + /@types/scheduler/0.16.1: resolution: {integrity: sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==} dev: true @@ -2775,6 +2803,10 @@ packages: resolution: {integrity: sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==} dev: true + /dedent-js/1.0.1: + resolution: {integrity: sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU=} + dev: true + /dedent/0.7.0: resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} dev: true @@ -2793,6 +2825,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /detect-indent/6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -2856,6 +2893,13 @@ packages: engines: {node: '>=10'} dev: true + /emmet/2.3.4: + resolution: {integrity: sha512-3IqSwmO+N2ZGeuhDyhV/TIOJFUbkChi53bcasSNRE7Yd+4eorbbYz4e53TpMECt38NtYkZNupQCZRlwdAYA42A==} + dependencies: + '@emmetio/abbreviation': 2.2.2 + '@emmetio/css-abbreviation': 2.1.4 + dev: true + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -4442,6 +4486,10 @@ packages: minimist: 1.2.5 dev: true + /jsonc-parser/2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + dev: true + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: @@ -4657,6 +4705,12 @@ packages: signal-exit: 3.0.3 dev: true + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.3.1 + dev: true + /lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -4849,6 +4903,13 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.3.1 + dev: true + /node-fetch/2.6.1: resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} engines: {node: 4.x || >=6.0.0} @@ -5050,6 +5111,13 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.1 + dev: true + /path-exists/2.1.0: resolution: {integrity: sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=} engines: {node: '>=0.10.0'} @@ -5293,6 +5361,16 @@ packages: fast-diff: 1.2.0 dev: true + /prettier-plugin-svelte/2.3.1_prettier@2.3.0+svelte@3.38.3: + resolution: {integrity: sha512-F1/r6OYoBq8Zgurhs1MN25tdrhPw0JW5JjioPRqpxbYdmrZ3gY/DzHGs0B6zwd4DLyRsfGB2gqhxUCbHt/D1fw==} + peerDependencies: + prettier: ^1.16.4 || ^2.0.0 + svelte: ^3.2.0 + dependencies: + prettier: 2.3.0 + svelte: 3.38.3 + dev: true + /prettier/1.19.1: resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} engines: {node: '>=4'} @@ -6015,6 +6093,107 @@ packages: supports-color: 7.2.0 dev: true + /svelte-language-server/0.14.7: + resolution: {integrity: sha512-GuqBLvHE41ZB6G4EPhUeShDGav4k5TdMmNXk8j1fXGZSrwW+3Q7WmCNMqqeQgrNNtOg1UCUUx7XEjrvPu7RqDg==} + engines: {node: '>= 12.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.1 + estree-walker: 2.0.2 + glob: 7.1.7 + lodash: 4.17.21 + prettier: 2.3.0 + prettier-plugin-svelte: 2.3.1_prettier@2.3.0+svelte@3.38.3 + source-map: 0.7.3 + svelte: 3.38.3 + svelte-preprocess: 4.7.4_svelte@3.38.3+typescript@4.3.2 + svelte2tsx: 0.4.5_svelte@3.38.3+typescript@4.3.2 + typescript: 4.3.2 + vscode-css-languageservice: 5.0.0 + vscode-emmet-helper: 2.1.2 + vscode-html-languageservice: 4.0.0 + vscode-languageserver: 7.1.0-next.4 + vscode-languageserver-types: 3.16.0 + vscode-uri: 2.1.2 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - node-sass + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + + /svelte-preprocess/4.7.4_svelte@3.38.3+typescript@4.3.2: + resolution: {integrity: sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.54.7 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.5 + '@types/sass': 1.16.1 + detect-indent: 6.1.0 + strip-indent: 3.0.0 + svelte: 3.38.3 + typescript: 4.3.2 + dev: true + + /svelte/3.38.3: + resolution: {integrity: sha512-N7bBZJH0iF24wsalFZF+fVYMUOigaAUQMIcEKHO3jstK/iL8VmP9xE+P0/a76+FkNcWt+TDv2Gx1taUoUscrvw==} + engines: {node: '>= 8'} + dev: true + + /svelte2tsx/0.4.5_svelte@3.38.3+typescript@4.3.2: + resolution: {integrity: sha512-5SbnH3rGA5eymeSidlPZ3qxL0P6SfJv0pWaoTVuJDxpHbI00dUZpuDTNn/WZ8yMXfU7vjY/QxKC/iYiDTbJEjg==} + peerDependencies: + svelte: ^3.24 + typescript: ^4.1.2 + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 3.38.3 + typescript: 4.3.2 + dev: true + /svg-tags/1.0.0: resolution: {integrity: sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=} dev: true @@ -6179,6 +6358,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + /tslint/6.1.3_typescript@4.3.2: resolution: {integrity: sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==} engines: {node: '>=4.8.0'} @@ -6416,11 +6599,46 @@ packages: - supports-color dev: true + /vscode-css-languageservice/5.0.0: + resolution: {integrity: sha512-DTMa8QbVmujFPvD3NxoC5jjIXCyCG+cvn3hNzwQRhvhsk8LblNymBZBwzfcDdgEtqsi4O/2AB5HnMIRzxhzEzg==} + dependencies: + vscode-languageserver-textdocument: 1.0.1 + vscode-languageserver-types: 3.16.0 + vscode-nls: 5.0.0 + vscode-uri: 2.1.2 + dev: true + + /vscode-emmet-helper/2.1.2: + resolution: {integrity: sha512-Fy6UNawSgxE3Kuqi54vSXohf03iOIrp1A74ReAgzvGP9Yt7fUAvkqF6No2WAc34/w0oWAHAeqoBNqmKKWh6U5w==} + deprecated: This package has been renamed to @vscode/emmet-helper, please update to the new name + dependencies: + emmet: 2.3.4 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.1 + vscode-languageserver-types: 3.16.0 + vscode-nls: 5.0.0 + vscode-uri: 2.1.2 + dev: true + + /vscode-html-languageservice/4.0.0: + resolution: {integrity: sha512-UmC+GS0IqBeZnOAmdtQvaDzoH1c5/un+b7qALUziu/Y4SOPXso5dF+YkJeTqsde6YU2pLm78RtMDzl9BParwbw==} + dependencies: + vscode-languageserver-textdocument: 1.0.1 + vscode-languageserver-types: 3.16.0 + vscode-nls: 5.0.0 + vscode-uri: 2.1.2 + dev: true + /vscode-jsonrpc/6.0.0: resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} engines: {node: '>=8.0.0 || >=10.0.0'} dev: false + /vscode-jsonrpc/6.1.0-next.2: + resolution: {integrity: sha512-nkiNDGI+Ytp7uj1lxHXddXCoEunhcry1D+KmVHBfUUgWT9jMF8ZJyH5KQObdF+OGAh7bXZxD/SV4uGwSCeHHWA==} + engines: {node: '>=8.0.0 || >=10.0.0'} + dev: true + /vscode-languageclient/7.0.0: resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} engines: {vscode: ^1.52.0} @@ -6437,13 +6655,22 @@ packages: vscode-languageserver-types: 3.16.0 dev: false + /vscode-languageserver-protocol/3.17.0-next.5: + resolution: {integrity: sha512-LFZ6WMB3iPezQAU9OnGoERzcIVKhcs0OLfD/NHcqSj3g1wgxuLUL5kSlZbbjFySQCmhzm6b0yb3hjTSeBtq1+w==} + dependencies: + vscode-jsonrpc: 6.1.0-next.2 + vscode-languageserver-types: 3.17.0-next.1 + dev: true + /vscode-languageserver-textdocument/1.0.1: resolution: {integrity: sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==} - dev: false /vscode-languageserver-types/3.16.0: resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} - dev: false + + /vscode-languageserver-types/3.17.0-next.1: + resolution: {integrity: sha512-VGzh06oynbYa6JbTKUbxOEZN7CYEtWhN7DK5wfzUpeCJl8X8xZX39g2PVfpqXrIEduu7dcJgK007KgnX9tHNKA==} + dev: true /vscode-languageserver/7.0.0: resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==} @@ -6452,6 +6679,21 @@ packages: vscode-languageserver-protocol: 3.16.0 dev: false + /vscode-languageserver/7.1.0-next.4: + resolution: {integrity: sha512-/65lxR/CuLJoOdzTjOTYUPWS7k5qzaWese4PObnWc6jwLryUrSa7DslYfaRXigh5/xr1nlaUZCcJwkpgM0wFvw==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.17.0-next.5 + dev: true + + /vscode-nls/5.0.0: + resolution: {integrity: sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==} + dev: true + + /vscode-uri/2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + dev: true + /vscode-uri/3.0.2: resolution: {integrity: sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==} dev: false