From aa2ddd43409e4b2405913d17b35196ce6496dabe Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 17 Nov 2023 05:52:58 +0800 Subject: [PATCH 01/25] updates --- packages/astro-check/src/index.ts | 2 +- packages/language-server/src/check.ts | 33 ++-- .../language-server/src/core/astro2tsx.ts | 1 + packages/language-server/src/core/index.ts | 3 +- packages/language-server/src/core/parseCSS.ts | 2 + .../language-server/src/core/parseHTML.ts | 1 + packages/language-server/src/core/parseJS.ts | 2 + packages/language-server/src/core/svelte.ts | 1 + packages/language-server/src/core/utils.ts | 1 + packages/language-server/src/core/vue.ts | 1 + .../src/languageServerPlugin.ts | 182 +++++++++--------- packages/language-server/src/nodeServer.ts | 9 +- .../src/plugins/typescript/index.ts | 11 +- packages/ts-plugin/src/astro2tsx.ts | 1 + packages/ts-plugin/src/index.ts | 4 +- packages/ts-plugin/src/language.ts | 1 + 16 files changed, 135 insertions(+), 120 deletions(-) diff --git a/packages/astro-check/src/index.ts b/packages/astro-check/src/index.ts index 26f26f7c..a1701cb3 100644 --- a/packages/astro-check/src/index.ts +++ b/packages/astro-check/src/index.ts @@ -44,7 +44,7 @@ export async function check(flags: Partial): Promise { // Dynamically get the list of extensions to watch from the files already included in the project const checkedExtensions = Array.from( new Set( - checker.project.languageHost.getScriptFileNames().map((fileName) => path.extname(fileName)) + checker.project.typescript!.projectHost.getScriptFileNames().map((fileName) => path.extname(fileName)) ) ); createWatcher(workspaceRoot, checkedExtensions) diff --git a/packages/language-server/src/check.ts b/packages/language-server/src/check.ts index 9df5d09f..7ce7679a 100644 --- a/packages/language-server/src/check.ts +++ b/packages/language-server/src/check.ts @@ -30,7 +30,7 @@ export interface CheckResult { export class AstroCheck { private ts!: typeof import('typescript/lib/tsserverlibrary.js'); - public project!: ReturnType; + public project!: kit.Project; private linter!: ReturnType; constructor( @@ -61,7 +61,7 @@ export class AstroCheck { | undefined; }): Promise { const files = - fileNames !== undefined ? fileNames : this.project.languageHost.getScriptFileNames(); + fileNames !== undefined ? fileNames : this.project.typescript!.projectHost.getScriptFileNames(); const result: CheckResult = { status: undefined, @@ -98,7 +98,7 @@ export class AstroCheck { console.info(errorText); } - const fileSnapshot = this.project.languageHost.getScriptSnapshot(file); + const fileSnapshot = this.project.typescript!.projectHost.getScriptSnapshot(file); const fileContent = fileSnapshot?.getText(0, fileSnapshot.getLength()); result.fileResult.push({ @@ -130,26 +130,25 @@ export class AstroCheck { this.ts = this.typescriptPath ? require(this.typescriptPath) : require('typescript'); const tsconfigPath = this.getTsconfig(); - const config: kit.Config = { - languages: { - astro: getLanguageModule(getAstroInstall([this.workspacePath]), this.ts), - svelte: getSvelteLanguageModule(), - vue: getVueLanguageModule(), - }, - services: { - typescript: createTypeScriptService(), - astro: createAstroService(), - }, - }; + const languages: kit.Language[] = [ + getLanguageModule(getAstroInstall([this.workspacePath]), this.ts), + getSvelteLanguageModule(), + getVueLanguageModule(), + ]; + const services = [ + createTypeScriptService(), + createAstroService(), + ]; + const env = kit.createServiceEnvironment(); if (tsconfigPath) { - this.project = kit.createProject(tsconfigPath, [ + this.project = kit.createTypeScriptKitProject(languages, env, tsconfigPath, [ { extension: 'astro', isMixedContent: true, scriptKind: 7 }, { extension: 'vue', isMixedContent: true, scriptKind: 7 }, { extension: 'svelte', isMixedContent: true, scriptKind: 7 }, ]); } else { - this.project = kit.createInferredProject(this.workspacePath, () => { + this.project = kit.createTypeScriptInferredKitProject(languages, env, () => { return fg.sync('**/*.astro', { cwd: this.workspacePath, ignore: ['node_modules'], @@ -158,7 +157,7 @@ export class AstroCheck { }); } - this.linter = kit.createLinter(config, this.project.languageHost); + this.linter = kit.createLinter(services, env, this.project); } private getTsconfig() { diff --git a/packages/language-server/src/core/astro2tsx.ts b/packages/language-server/src/core/astro2tsx.ts index 8a9dfe71..2658f603 100644 --- a/packages/language-server/src/core/astro2tsx.ts +++ b/packages/language-server/src/core/astro2tsx.ts @@ -147,6 +147,7 @@ function getVirtualFileTSX( return { fileName: fileName + '.tsx', + languageId: 'typescriptreact', kind: FileKind.TypeScriptHostFile, capabilities: { codeAction: true, diff --git a/packages/language-server/src/core/index.ts b/packages/language-server/src/core/index.ts index 04124cde..f9dd37a2 100644 --- a/packages/language-server/src/core/index.ts +++ b/packages/language-server/src/core/index.ts @@ -29,7 +29,7 @@ export function getLanguageModule( updateVirtualFile(astroFile, snapshot) { astroFile.update(snapshot); }, - resolveHost(host) { + resolveTypeScriptProjectHost(host) { return { ...host, resolveModuleName(moduleName, impliedNodeFormat) { @@ -83,6 +83,7 @@ export class AstroFile implements VirtualFile { capabilities = FileCapabilities.full; fileName: string; + languageId = 'astro'; mappings!: VirtualFile['mappings']; embeddedFiles!: VirtualFile['embeddedFiles']; astroMeta!: ParseResult & { frontmatter: FrontmatterStatus }; diff --git a/packages/language-server/src/core/parseCSS.ts b/packages/language-server/src/core/parseCSS.ts index d68e2d27..8d9a79af 100644 --- a/packages/language-server/src/core/parseCSS.ts +++ b/packages/language-server/src/core/parseCSS.ts @@ -38,6 +38,7 @@ export function extractStylesheets( embeddedCSSFiles.push({ fileName: fileName + '.inline.css', + languageId: 'css', codegenStacks: [], snapshot: { getText: (start, end) => text.substring(start, end), @@ -78,6 +79,7 @@ function findEmbeddedStyles( const styleText = snapshot.getText(node.startTagEnd, node.endTagStart); embeddedCSSFiles.push({ fileName: fileName + `.${cssIndex}.css`, + languageId: 'css', kind: FileKind.TextFile, snapshot: { getText: (start, end) => styleText.substring(start, end), diff --git a/packages/language-server/src/core/parseHTML.ts b/packages/language-server/src/core/parseHTML.ts index 54c64b51..c25f9e4c 100644 --- a/packages/language-server/src/core/parseHTML.ts +++ b/packages/language-server/src/core/parseHTML.ts @@ -87,6 +87,7 @@ export function preprocessHTML(text: string, frontmatterEnd?: number) { function getHTMLVirtualFile(fileName: string, preprocessedHTML: string): VirtualFile { return { fileName: fileName + `.html`, + languageId: 'html', kind: FileKind.TextFile, snapshot: { getText: (start, end) => preprocessedHTML.substring(start, end), diff --git a/packages/language-server/src/core/parseJS.ts b/packages/language-server/src/core/parseJS.ts index fb4d55dd..9a0e9e06 100644 --- a/packages/language-server/src/core/parseJS.ts +++ b/packages/language-server/src/core/parseJS.ts @@ -69,6 +69,7 @@ function findIsolatedScripts( const scriptText = snapshot.getText(node.startTagEnd, node.endTagStart); embeddedScripts.push({ fileName: fileName + `.${scriptIndex}.mts`, + languageId: 'typescript', kind: FileKind.TypeScriptHostFile, snapshot: { getText: (start, end) => scriptText.substring(start, end), @@ -214,6 +215,7 @@ function mergeJSContexts(fileName: string, javascriptContexts: JavaScriptContext return { fileName: fileName + '.inline.mjs', + languageId: 'javascript', codegenStacks: [], snapshot: { getText: (start, end) => text.substring(start, end), diff --git a/packages/language-server/src/core/svelte.ts b/packages/language-server/src/core/svelte.ts index 97b6a46d..1f049ddc 100644 --- a/packages/language-server/src/core/svelte.ts +++ b/packages/language-server/src/core/svelte.ts @@ -27,6 +27,7 @@ class SvelteFile implements VirtualFile { capabilities = FileCapabilities.full; fileName: string; + languageId = 'svelte'; mappings!: Mapping[]; embeddedFiles!: VirtualFile[]; codegenStacks = []; diff --git a/packages/language-server/src/core/utils.ts b/packages/language-server/src/core/utils.ts index c589f25e..c0b45216 100644 --- a/packages/language-server/src/core/utils.ts +++ b/packages/language-server/src/core/utils.ts @@ -30,6 +30,7 @@ export function framework2tsx( function getVirtualFile(content: string): VirtualFile { return { fileName: fileName + '.tsx', + languageId: 'typescript', capabilities: FileCapabilities.full, kind: FileKind.TypeScriptHostFile, snapshot: { diff --git a/packages/language-server/src/core/vue.ts b/packages/language-server/src/core/vue.ts index 748d03e4..7016f149 100644 --- a/packages/language-server/src/core/vue.ts +++ b/packages/language-server/src/core/vue.ts @@ -27,6 +27,7 @@ class VueFile implements VirtualFile { capabilities = FileCapabilities.full; fileName: string; + languageId = 'vue'; mappings!: Mapping[]; embeddedFiles!: VirtualFile[]; codegenStacks = []; diff --git a/packages/language-server/src/languageServerPlugin.ts b/packages/language-server/src/languageServerPlugin.ts index 50c24899..55d4f3b0 100644 --- a/packages/language-server/src/languageServerPlugin.ts +++ b/packages/language-server/src/languageServerPlugin.ts @@ -1,7 +1,8 @@ import { - LanguageServerPlugin, + TypeScriptServerPlugin, MessageType, ShowMessageNotification, + Connection, } from '@volar/language-server/node'; import { getLanguageModule } from './core'; import { getSvelteLanguageModule } from './core/svelte.js'; @@ -20,104 +21,103 @@ import { create as createHtmlService } from './plugins/html.js'; import { create as createTypescriptAddonsService } from './plugins/typescript-addons/index.js'; import { create as createTypeScriptService } from './plugins/typescript/index.js'; -export const plugin: LanguageServerPlugin = ( - initOptions, - modules -): ReturnType => ({ - extraFileExtensions: [ - { extension: 'astro', isMixedContent: true, scriptKind: 7 }, - { extension: 'vue', isMixedContent: true, scriptKind: 7 }, - { extension: 'svelte', isMixedContent: true, scriptKind: 7 }, - ], - watchFileExtensions: [ - 'js', - 'cjs', - 'mjs', - 'ts', - 'cts', - 'mts', - 'jsx', - 'tsx', - 'json', - 'astro', - 'vue', - 'svelte', - ], - resolveConfig(config, ctx) { - config.languages ??= {}; - if (ctx) { - const astroInstall = getAstroInstall([ctx.project.rootUri.fsPath]); +export function createPlugin(connection: Connection): TypeScriptServerPlugin { + return ({ modules }): ReturnType => ({ + extraFileExtensions: [ + { extension: 'astro', isMixedContent: true, scriptKind: 7 }, + { extension: 'vue', isMixedContent: true, scriptKind: 7 }, + { extension: 'svelte', isMixedContent: true, scriptKind: 7 }, + ], + watchFileExtensions: [ + 'js', + 'cjs', + 'mjs', + 'ts', + 'cts', + 'mts', + 'jsx', + 'tsx', + 'json', + 'astro', + 'vue', + 'svelte', + ], + resolveConfig(config, env, projectHost) { + config.languages ??= {}; + if (projectHost) { + const astroInstall = getAstroInstall([projectHost.getCurrentDirectory()]); - if (!astroInstall) { - ctx.server.connection.sendNotification(ShowMessageNotification.type, { - message: `Couldn't find Astro in workspace "${ctx.project.rootUri.fsPath}". Experience might be degraded. For the best experience, please make sure Astro is installed into your project and restart the language server.`, - type: MessageType.Warning, - }); - } + if (!astroInstall) { + connection.sendNotification(ShowMessageNotification.type, { + message: `Couldn't find Astro in workspace "${projectHost.getCurrentDirectory()}". Experience might be degraded. For the best experience, please make sure Astro is installed into your project and restart the language server.`, + type: MessageType.Warning, + }); + } - config.languages.astro = getLanguageModule(astroInstall, modules.typescript!); - config.languages.vue = getVueLanguageModule(); - config.languages.svelte = getSvelteLanguageModule(); - } + config.languages.astro = getLanguageModule(astroInstall, modules.typescript!); + config.languages.vue = getVueLanguageModule(); + config.languages.svelte = getSvelteLanguageModule(); + } - config.services ??= {}; - config.services.html ??= createHtmlService(); - config.services.css ??= createCssService(); - config.services.emmet ??= createEmmetService(); - config.services.typescript ??= createTypeScriptService(); - config.services.typescripttwoslash ??= createTypeScriptTwoSlashService(); - config.services.typescriptaddons ??= createTypescriptAddonsService(); - config.services.astro ??= createAstroService(); + config.services ??= {}; + config.services.html ??= createHtmlService(); + config.services.css ??= createCssService(); + config.services.emmet ??= createEmmetService(); + config.services.typescript ??= createTypeScriptService(); + config.services.typescripttwoslash ??= createTypeScriptTwoSlashService(); + config.services.typescriptaddons ??= createTypescriptAddonsService(); + config.services.astro ??= createAstroService(); - if (ctx) { - const rootDir = ctx.env.uriToFileName(ctx.project.rootUri.toString()); - const prettier = importPrettier(rootDir); - const prettierPluginPath = getPrettierPluginPath(rootDir); + if (env && projectHost) { + const rootDir = projectHost.getCurrentDirectory(); + const prettier = importPrettier(rootDir); + const prettierPluginPath = getPrettierPluginPath(rootDir); - if (prettier && prettierPluginPath) { - config.services.prettier ??= createPrettierService({ - prettier: prettier, - languages: ['astro'], - ignoreIdeOptions: true, - useIdeOptionsFallback: true, - resolveConfigOptions: { - // This seems to be broken since Prettier 3, and it'll always use its cumbersome cache. Hopefully it works one day. - useCache: false, - }, - additionalOptions: async (resolvedConfig) => { - async function getAstroPrettierPlugin() { - if (!prettier || !prettierPluginPath) { - return []; - } + if (prettier && prettierPluginPath) { + config.services.prettier ??= createPrettierService({ + prettier: prettier, + languages: ['astro'], + ignoreIdeOptions: true, + useIdeOptionsFallback: true, + resolveConfigOptions: { + // This seems to be broken since Prettier 3, and it'll always use its cumbersome cache. Hopefully it works one day. + useCache: false, + }, + additionalOptions: async (resolvedConfig) => { + async function getAstroPrettierPlugin() { + if (!prettier || !prettierPluginPath) { + return []; + } - const hasPluginLoadedAlready = - (await prettier.getSupportInfo()).languages.some((l: any) => l.name === 'astro') || - resolvedConfig.plugins?.includes('prettier-plugin-astro'); // getSupportInfo doesn't seems to work very well in Prettier 3 for plugins + const hasPluginLoadedAlready = + (await prettier.getSupportInfo()).languages.some((l: any) => l.name === 'astro') || + resolvedConfig.plugins?.includes('prettier-plugin-astro'); // getSupportInfo doesn't seems to work very well in Prettier 3 for plugins - return hasPluginLoadedAlready ? [] : [prettierPluginPath]; - } + return hasPluginLoadedAlready ? [] : [prettierPluginPath]; + } - const plugins = [ - ...(await getAstroPrettierPlugin()), - ...(resolvedConfig.plugins ?? []), - ]; + const plugins = [ + ...(await getAstroPrettierPlugin()), + ...(resolvedConfig.plugins ?? []), + ]; - return { - ...resolvedConfig, - plugins: plugins, - parser: 'astro', - }; - }, - }); - } else { - ctx.server.connection.sendNotification(ShowMessageNotification.type, { - message: - "Couldn't load `prettier` or `prettier-plugin-astro`. Formatting will not work. Please make sure those two packages are installed into your project.", - type: MessageType.Warning, - }); + return { + ...resolvedConfig, + plugins: plugins, + parser: 'astro', + }; + }, + }); + } else { + connection.sendNotification(ShowMessageNotification.type, { + message: + "Couldn't load `prettier` or `prettier-plugin-astro`. Formatting will not work. Please make sure those two packages are installed into your project.", + type: MessageType.Warning, + }); + } } - } - return config; - }, -}); + return config; + }, + }); +} diff --git a/packages/language-server/src/nodeServer.ts b/packages/language-server/src/nodeServer.ts index d0ffbcb1..7fddfb70 100644 --- a/packages/language-server/src/nodeServer.ts +++ b/packages/language-server/src/nodeServer.ts @@ -1,4 +1,7 @@ -import { createConnection, startLanguageServer } from '@volar/language-server/node'; -import { plugin } from './languageServerPlugin.js'; +import { createConnection, startTypeScriptServer } from '@volar/language-server/node'; +import { createPlugin } from './languageServerPlugin.js'; -startLanguageServer(createConnection(), plugin); +const connection = createConnection(); +const plugin = createPlugin(connection); + +startTypeScriptServer(connection, plugin); diff --git a/packages/language-server/src/plugins/typescript/index.ts b/packages/language-server/src/plugins/typescript/index.ts index 070b210c..4e222531 100644 --- a/packages/language-server/src/plugins/typescript/index.ts +++ b/packages/language-server/src/plugins/typescript/index.ts @@ -27,10 +27,10 @@ export const create = transformCompletionItem(item) { const [_, source] = context.documents.getVirtualFileByUri(item.data.uri); const file = source?.root; - if (!(file instanceof AstroFile) || !context.host) return undefined; + if (!(file instanceof AstroFile) || !context.project.typescript) return undefined; if (file.scriptFiles.includes(item.data.fileName)) return undefined; - const newLine = context.host.getCompilationSettings().newLine?.toString() ?? '\n'; + const newLine = context.project.typescript.projectHost.getCompilationSettings().newLine?.toString() ?? '\n'; if (item.additionalTextEdits) { item.additionalTextEdits = item.additionalTextEdits.map((edit) => { // HACK: There's a weird situation sometimes where some components (especially Svelte) will get imported as type imports @@ -55,7 +55,7 @@ export const create = const [_, source] = context.documents.getVirtualFileByUri(originalFileName); const file = source?.root; - if (!(file instanceof AstroFile) || !context.host) return undefined; + if (!(file instanceof AstroFile) || !context.project.typescript) return undefined; if ( file.scriptFiles.includes(item.diagnostics?.[0].data.documentUri.replace('file://', '')) ) @@ -64,7 +64,7 @@ export const create = const document = context.getTextDocument(originalFileName); if (!document) return undefined; - const newLine = context.host.getCompilationSettings().newLine?.toString() ?? '\n'; + const newLine = context.project.typescript.projectHost.getCompilationSettings().newLine?.toString() ?? '\n'; if (!item.edit?.documentChanges) return undefined; item.edit.documentChanges = item.edit.documentChanges.map((change) => { if (TextDocumentEdit.is(change)) { @@ -146,7 +146,8 @@ export const create = const astroDocument = context.documents.getDocumentByFileName( file.snapshot, - file.sourceFileName + file.sourceFileName, + file.languageId ); return enhancedProvideSemanticDiagnostics(diagnostics, astroDocument.lineCount); diff --git a/packages/ts-plugin/src/astro2tsx.ts b/packages/ts-plugin/src/astro2tsx.ts index f9f28639..7bf5aa6c 100644 --- a/packages/ts-plugin/src/astro2tsx.ts +++ b/packages/ts-plugin/src/astro2tsx.ts @@ -127,6 +127,7 @@ function getVirtualFileTSX( return { fileName: fileName + '.tsx', + languageId: 'typescriptreact', kind: FileKind.TypeScriptHostFile, capabilities: { codeAction: true, diff --git a/packages/ts-plugin/src/index.ts b/packages/ts-plugin/src/index.ts index 7dd27ab0..491728fb 100644 --- a/packages/ts-plugin/src/index.ts +++ b/packages/ts-plugin/src/index.ts @@ -1,4 +1,4 @@ -import { createVirtualFiles } from '@volar/language-core'; +import { createFileProvider } from '@volar/language-core'; import { decorateLanguageService, decorateLanguageServiceHost, @@ -14,7 +14,7 @@ const init: ts.server.PluginModuleFactory = (modules) => { const { typescript: ts } = modules; const pluginModule: ts.server.PluginModule = { create(info) { - const virtualFiles = createVirtualFiles([getLanguageModule(ts)]); + const virtualFiles = createFileProvider([getLanguageModule(ts)], () => {}); decorateLanguageService(virtualFiles, info.languageService, true); decorateLanguageServiceHost(virtualFiles, info.languageServiceHost, ts, ['.astro']); diff --git a/packages/ts-plugin/src/language.ts b/packages/ts-plugin/src/language.ts index daab83f1..416eba35 100644 --- a/packages/ts-plugin/src/language.ts +++ b/packages/ts-plugin/src/language.ts @@ -28,6 +28,7 @@ export class AstroFile implements VirtualFile { capabilities = FileCapabilities.full; fileName: string; + languageId = 'astro'; mappings!: VirtualFile['mappings']; embeddedFiles!: VirtualFile['embeddedFiles']; codegenStacks = []; From fc3c13c581e4ee0552390b15cd2c20ad7956cca6 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 17 Nov 2023 12:56:52 +0800 Subject: [PATCH 02/25] updates --- packages/astro-check/src/index.ts | 8 ++++---- packages/language-server/src/check.ts | 16 ++++++---------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/astro-check/src/index.ts b/packages/astro-check/src/index.ts index a1701cb3..ddba48f6 100644 --- a/packages/astro-check/src/index.ts +++ b/packages/astro-check/src/index.ts @@ -44,20 +44,20 @@ export async function check(flags: Partial): Promise { // Dynamically get the list of extensions to watch from the files already included in the project const checkedExtensions = Array.from( new Set( - checker.project.typescript!.projectHost.getScriptFileNames().map((fileName) => path.extname(fileName)) + checker.linter.projectHost.getScriptFileNames().map((fileName) => path.extname(fileName)) ) ); createWatcher(workspaceRoot, checkedExtensions) .on('add', (fileName) => { - checker.project.fileCreated(fileName); + checker.linter.fileCreated(fileName); update(); }) .on('unlink', (fileName) => { - checker.project.fileDeleted(fileName); + checker.linter.fileDeleted(fileName); update(); }) .on('change', (fileName) => { - checker.project.fileUpdated(fileName); + checker.linter.fileUpdated(fileName); update(); }); } diff --git a/packages/language-server/src/check.ts b/packages/language-server/src/check.ts index 7ce7679a..29337245 100644 --- a/packages/language-server/src/check.ts +++ b/packages/language-server/src/check.ts @@ -30,8 +30,7 @@ export interface CheckResult { export class AstroCheck { private ts!: typeof import('typescript/lib/tsserverlibrary.js'); - public project!: kit.Project; - private linter!: ReturnType; + public linter!: ReturnType; constructor( private readonly workspacePath: string, @@ -61,7 +60,7 @@ export class AstroCheck { | undefined; }): Promise { const files = - fileNames !== undefined ? fileNames : this.project.typescript!.projectHost.getScriptFileNames(); + fileNames !== undefined ? fileNames : this.linter.projectHost.getScriptFileNames(); const result: CheckResult = { status: undefined, @@ -98,7 +97,7 @@ export class AstroCheck { console.info(errorText); } - const fileSnapshot = this.project.typescript!.projectHost.getScriptSnapshot(file); + const fileSnapshot = this.linter.projectHost.getScriptSnapshot(file); const fileContent = fileSnapshot?.getText(0, fileSnapshot.getLength()); result.fileResult.push({ @@ -130,7 +129,7 @@ export class AstroCheck { this.ts = this.typescriptPath ? require(this.typescriptPath) : require('typescript'); const tsconfigPath = this.getTsconfig(); - const languages: kit.Language[] = [ + const languages = [ getLanguageModule(getAstroInstall([this.workspacePath]), this.ts), getSvelteLanguageModule(), getVueLanguageModule(), @@ -139,16 +138,15 @@ export class AstroCheck { createTypeScriptService(), createAstroService(), ]; - const env = kit.createServiceEnvironment(); if (tsconfigPath) { - this.project = kit.createTypeScriptKitProject(languages, env, tsconfigPath, [ + this.linter = kit.createTypeScriptChecker(languages, services, tsconfigPath, [ { extension: 'astro', isMixedContent: true, scriptKind: 7 }, { extension: 'vue', isMixedContent: true, scriptKind: 7 }, { extension: 'svelte', isMixedContent: true, scriptKind: 7 }, ]); } else { - this.project = kit.createTypeScriptInferredKitProject(languages, env, () => { + this.linter = kit.createTypeScriptInferredChecker(languages, services, () => { return fg.sync('**/*.astro', { cwd: this.workspacePath, ignore: ['node_modules'], @@ -156,8 +154,6 @@ export class AstroCheck { }); }); } - - this.linter = kit.createLinter(services, env, this.project); } private getTsconfig() { From 51f58dd8712c84cba73e12e69a9affa4516612a8 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Tue, 21 Nov 2023 07:44:50 +0800 Subject: [PATCH 03/25] sync https://github.com/volarjs/volar.js/pull/91 --- .../language-server/src/core/astro2tsx.ts | 59 ++++----- packages/language-server/src/core/index.ts | 118 +++++++++--------- packages/language-server/src/core/parseCSS.ts | 51 +++++--- .../language-server/src/core/parseHTML.ts | 16 +-- packages/language-server/src/core/parseJS.ts | 38 ++---- packages/language-server/src/core/svelte.ts | 24 ++-- packages/language-server/src/core/utils.ts | 12 +- packages/language-server/src/core/vue.ts | 24 ++-- .../src/languageServerPlugin.ts | 18 +-- packages/language-server/src/plugins/astro.ts | 4 +- packages/language-server/src/plugins/html.ts | 2 +- .../src/plugins/typescript-addons/index.ts | 2 +- .../src/plugins/typescript/index.ts | 30 +++-- packages/ts-plugin/src/astro2tsx.ts | 31 ++--- packages/ts-plugin/src/index.ts | 2 +- packages/ts-plugin/src/language.ts | 17 ++- 16 files changed, 213 insertions(+), 235 deletions(-) diff --git a/packages/language-server/src/core/astro2tsx.ts b/packages/language-server/src/core/astro2tsx.ts index 2658f603..94224f9d 100644 --- a/packages/language-server/src/core/astro2tsx.ts +++ b/packages/language-server/src/core/astro2tsx.ts @@ -1,7 +1,7 @@ import { convertToTSX } from '@astrojs/compiler/sync'; import type { ConvertToTSXOptions, TSXResult } from '@astrojs/compiler/types'; import { decode } from '@jridgewell/sourcemap-codec'; -import { FileKind, FileRangeCapabilities, VirtualFile } from '@volar/language-core'; +import { FileKind, CodeInformations, VirtualFile } from '@volar/language-core'; import { HTMLDocument, TextDocument } from 'vscode-html-languageservice'; import { patchTSX } from './utils.js'; @@ -38,14 +38,14 @@ function safeConvertToTSX(content: string, options: ConvertToTSXOptions) { export function astro2tsx( input: string, - fileName: string, + fileId: string, ts: typeof import('typescript/lib/tsserverlibrary.js'), htmlDocument: HTMLDocument ) { - const tsx = safeConvertToTSX(input, { filename: fileName }); + const tsx = safeConvertToTSX(input, { filename: fileId }); return { - virtualFile: getVirtualFileTSX(input, tsx, fileName, ts, htmlDocument), + virtualFile: getVirtualFileTSX(input, tsx, fileId, ts, htmlDocument), diagnostics: tsx.diagnostics, }; } @@ -53,14 +53,14 @@ export function astro2tsx( function getVirtualFileTSX( input: string, tsx: TSXResult, - fileName: string, + fileId: string, ts: typeof import('typescript/lib/tsserverlibrary.js'), htmlDocument: HTMLDocument ): VirtualFile { - tsx.code = patchTSX(tsx.code, fileName); + tsx.code = patchTSX(tsx.code, fileId); const v3Mappings = decode(tsx.map.mappings); - const sourcedDoc = TextDocument.create(fileName, 'astro', 0, input); - const genDoc = TextDocument.create(fileName + '.tsx', 'typescriptreact', 0, tsx.code); + const sourcedDoc = TextDocument.create(fileId, 'astro', 0, input); + const genDoc = TextDocument.create(fileId + '.tsx', 'typescriptreact', 0, tsx.code); const mappings: VirtualFile['mappings'] = []; @@ -102,19 +102,29 @@ function getVirtualFileTSX( // Disable features inside script tags. This is a bit annoying to do, I wonder if maybe leaving script tags // unmapped would be better. const node = htmlDocument.findNodeAt(current.sourceOffset); - const rangeCapabilities: FileRangeCapabilities = + const rangeCapabilities: CodeInformations = node.tag !== 'script' - ? FileRangeCapabilities.full + ? {} : { - completion: false, - definition: false, - diagnostic: false, - displayWithLink: false, - hover: false, - references: false, - referencesCodeLens: false, - rename: false, - semanticTokens: false, + diagnostics: false, + renameEdits: false, + formattingEdits: false, + definitions: false, + references: false, + foldingRanges: false, + inlayHints: false, + codeActions: false, + symbols: false, + selectionRanges: false, + linkedEditingRanges: false, + colors: false, + autoInserts: false, + codeLenses: false, + highlights: false, + links: false, + semanticTokens: false, + hover: false, + signatureHelps: false, }; mappings.push({ @@ -146,18 +156,9 @@ function getVirtualFileTSX( } return { - fileName: fileName + '.tsx', + id: fileId + '.tsx', languageId: 'typescriptreact', kind: FileKind.TypeScriptHostFile, - capabilities: { - codeAction: true, - documentFormatting: false, - diagnostic: true, - documentSymbol: true, - inlayHint: true, - foldingRange: true, - }, - codegenStacks: [], snapshot: { getText: (start, end) => tsx.code.substring(start, end), getLength: () => tsx.code.length, diff --git a/packages/language-server/src/core/index.ts b/packages/language-server/src/core/index.ts index f9dd37a2..aa913568 100644 --- a/packages/language-server/src/core/index.ts +++ b/packages/language-server/src/core/index.ts @@ -1,8 +1,6 @@ import type { DiagnosticMessage, ParseResult } from '@astrojs/compiler/types'; import { - FileCapabilities, FileKind, - FileRangeCapabilities, type Language, type VirtualFile, } from '@volar/language-core'; @@ -21,83 +19,83 @@ export function getLanguageModule( ts: typeof import('typescript/lib/tsserverlibrary.js') ): Language { return { - createVirtualFile(fileName, snapshot) { - if (fileName.endsWith('.astro')) { - return new AstroFile(fileName, snapshot, ts); + createVirtualFile(id, languageId, snapshot) { + if (languageId === 'astro') { + return new AstroFile(id, snapshot, ts); } }, updateVirtualFile(astroFile, snapshot) { astroFile.update(snapshot); }, - resolveTypeScriptProjectHost(host) { - return { - ...host, - resolveModuleName(moduleName, impliedNodeFormat) { - if ( - impliedNodeFormat === ts.ModuleKind.ESNext && - (moduleName.endsWith('.astro') || - moduleName.endsWith('.vue') || - moduleName.endsWith('.svelte')) - ) { - return `${moduleName}.js`; - } - return host.resolveModuleName?.(moduleName, impliedNodeFormat) ?? moduleName; - }, - getScriptFileNames() { - const fileNames = host.getScriptFileNames(); - return [ - ...fileNames, - ...(astroInstall - ? ['./env.d.ts', './astro-jsx.d.ts'].map((filePath) => + typescript: { + resolveModuleName(moduleName, impliedNodeFormat) { + if ( + impliedNodeFormat === ts.ModuleKind.ESNext && + (moduleName.endsWith('.astro') || + moduleName.endsWith('.vue') || + moduleName.endsWith('.svelte')) + ) { + return `${moduleName}.js`; + } + }, + resolveLanguageServiceHost(host) { + return { + ...host, + getScriptFileNames() { + const fileNames = host.getScriptFileNames(); + return [ + ...fileNames, + ...(astroInstall + ? ['./env.d.ts', './astro-jsx.d.ts'].map((filePath) => ts.sys.resolvePath(path.resolve(astroInstall.path, filePath)) - ) - : []), - ]; - }, - getCompilationSettings() { - const baseCompilationSettings = host.getCompilationSettings(); - return { - ...baseCompilationSettings, - module: ts.ModuleKind.ESNext ?? 99, - target: ts.ScriptTarget.ESNext ?? 99, - jsx: ts.JsxEmit.Preserve ?? 1, - jsxImportSource: undefined, - jsxFactory: 'astroHTML', - resolveJsonModule: true, - allowJs: true, - isolatedModules: true, - moduleResolution: - baseCompilationSettings.moduleResolution === ts.ModuleResolutionKind.Classic || - !baseCompilationSettings.moduleResolution - ? ts.ModuleResolutionKind.Node10 - : baseCompilationSettings.moduleResolution, - }; - }, - }; + ) + : []), + ]; + }, + getCompilationSettings() { + const baseCompilationSettings = host.getCompilationSettings(); + return { + ...baseCompilationSettings, + module: ts.ModuleKind.ESNext ?? 99, + target: ts.ScriptTarget.ESNext ?? 99, + jsx: ts.JsxEmit.Preserve ?? 1, + jsxImportSource: undefined, + jsxFactory: 'astroHTML', + resolveJsonModule: true, + allowJs: true, + isolatedModules: true, + moduleResolution: + baseCompilationSettings.moduleResolution === ts.ModuleResolutionKind.Classic || + !baseCompilationSettings.moduleResolution + ? ts.ModuleResolutionKind.Node10 + : baseCompilationSettings.moduleResolution, + }; + }, + }; + }, }, }; } export class AstroFile implements VirtualFile { kind = FileKind.TextFile; - capabilities = FileCapabilities.full; - fileName: string; + id: string; languageId = 'astro'; mappings!: VirtualFile['mappings']; embeddedFiles!: VirtualFile['embeddedFiles']; astroMeta!: ParseResult & { frontmatter: FrontmatterStatus }; compilerDiagnostics!: DiagnosticMessage[]; htmlDocument!: HTMLDocument; - scriptFiles!: string[]; + scriptFileIds!: string[]; codegenStacks = []; constructor( - public sourceFileName: string, + public sourceFileId: string, public snapshot: ts.IScriptSnapshot, private readonly ts: typeof import('typescript/lib/tsserverlibrary.js') ) { - this.fileName = sourceFileName; + this.id = sourceFileId; this.onSnapshotUpdated(); } @@ -115,14 +113,14 @@ export class AstroFile implements VirtualFile { { sourceRange: [0, this.snapshot.getLength()], generatedRange: [0, this.snapshot.getLength()], - data: FileRangeCapabilities.full, + data: {}, }, ]; this.astroMeta = getAstroMetadata(this.snapshot.getText(0, this.snapshot.getLength())); const { htmlDocument, virtualFile: htmlVirtualFile } = parseHTML( - this.fileName, + this.id, this.snapshot, this.astroMeta.frontmatter.status === 'closed' ? this.astroMeta.frontmatter.position.end.offset @@ -131,16 +129,16 @@ export class AstroFile implements VirtualFile { this.htmlDocument = htmlDocument; const scriptTags = extractScriptTags( - this.fileName, + this.id, this.snapshot, htmlDocument, this.astroMeta.ast ); - this.scriptFiles = scriptTags.map((scriptTag) => scriptTag.fileName); + this.scriptFileIds = scriptTags.map((scriptTag) => scriptTag.id); htmlVirtualFile.embeddedFiles.push( - ...extractStylesheets(this.fileName, this.snapshot, htmlDocument, this.astroMeta.ast), + ...extractStylesheets(this.id, this.snapshot, htmlDocument, this.astroMeta.ast), ...scriptTags ); @@ -149,7 +147,7 @@ export class AstroFile implements VirtualFile { const tsx = astro2tsx( this.snapshot.getText(0, this.snapshot.getLength()), - this.fileName, + this.id, this.ts, htmlDocument ); diff --git a/packages/language-server/src/core/parseCSS.ts b/packages/language-server/src/core/parseCSS.ts index 8d9a79af..f0ead279 100644 --- a/packages/language-server/src/core/parseCSS.ts +++ b/packages/language-server/src/core/parseCSS.ts @@ -1,6 +1,6 @@ import type { ParentNode, ParseResult } from '@astrojs/compiler/types'; import { is } from '@astrojs/compiler/utils'; -import { FileKind, FileRangeCapabilities, VirtualFile } from '@volar/language-core'; +import { FileKind, CodeInformations, VirtualFile } from '@volar/language-core'; import * as SourceMap from '@volar/source-map'; import * as muggle from 'muggle-string'; import type ts from 'typescript/lib/tsserverlibrary'; @@ -8,27 +8,48 @@ import type { HTMLDocument, Node } from 'vscode-html-languageservice'; import type { AttributeNodeWithPosition } from './compilerUtils.js'; export function extractStylesheets( - fileName: string, + fileId: string, snapshot: ts.IScriptSnapshot, htmlDocument: HTMLDocument, ast: ParseResult['ast'] ): VirtualFile[] { const embeddedCSSFiles: VirtualFile[] = findEmbeddedStyles( - fileName, + fileId, snapshot, htmlDocument.roots ); const inlineStyles = findInlineStyles(ast); if (inlineStyles.length > 0) { - const codes: muggle.Segment[] = []; + const codes: muggle.Segment[] = []; for (const inlineStyle of inlineStyles) { codes.push('x { '); codes.push([ inlineStyle.value, undefined, inlineStyle.position.start.offset + 'style="'.length, - FileRangeCapabilities.full, + // disable all but only keep document colors + { + diagnostics: false, + renameEdits: false, + formattingEdits: false, + definitions: false, + references: false, + foldingRanges: false, + inlayHints: false, + codeActions: false, + symbols: false, + selectionRanges: false, + linkedEditingRanges: false, + // colors: false, + autoInserts: false, + codeLenses: false, + highlights: false, + links: false, + semanticTokens: false, + hover: false, + signatureHelps: false, + }, ]); codes.push(' }\n'); } @@ -37,15 +58,13 @@ export function extractStylesheets( const text = muggle.toString(codes); embeddedCSSFiles.push({ - fileName: fileName + '.inline.css', + id: fileId + '.inline.css', languageId: 'css', - codegenStacks: [], snapshot: { getText: (start, end) => text.substring(start, end), getLength: () => text.length, getChangeRange: () => undefined, }, - capabilities: { documentSymbol: true }, embeddedFiles: [], kind: FileKind.TextFile, mappings, @@ -60,7 +79,7 @@ export function extractStylesheets( * Embedded styles are styles that are defined in ``); - const completions = await languageServer.helpers.requestCompletion( - document, + const document = await serverHandle.openUntitledTextDocument( + ``, + 'astro' + ); + const completions = await serverHandle.sendCompletionRequest( + document.uri, Position.create(0, 18) ); - expect(completions.items).to.not.be.empty; - expect(completions.items[0].data.serviceId).to.equal('css'); + expect(completions!.items).to.not.be.empty; + expect(completions!.items[0].data.serviceId).to.equal('css'); }); it('Can provide completions for CSS values', async () => { - const document = await languageServer.helpers.openFakeDocument( - `` + const document = await serverHandle.openUntitledTextDocument( + ``, + 'astro' ); - const completions = await languageServer.helpers.requestCompletion( - document, + const completions = await serverHandle.sendCompletionRequest( + document.uri, Position.create(0, 21) ); - expect(completions.items).to.not.be.empty; - expect(completions.items[0].data.serviceId).to.equal('css'); + expect(completions!.items).to.not.be.empty; + expect(completions!.items[0].data.serviceId).to.equal('css'); }); }); diff --git a/packages/language-server/test/html/completions.test.ts b/packages/language-server/test/html/completions.test.ts index cec46b5c..37d5575e 100644 --- a/packages/language-server/test/html/completions.test.ts +++ b/packages/language-server/test/html/completions.test.ts @@ -1,36 +1,35 @@ import { Position } from '@volar/language-server'; +import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { describe } from 'mocha'; -import { LanguageServer, getLanguageServer } from '../server.js'; +import { getLanguageServer } from '../server.js'; describe('HTML - Completions', () => { - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => { - languageServer = await getLanguageServer(); - }); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide completions for HTML tags', async () => { - const document = await languageServer.helpers.openFakeDocument(` { - const document = await languageServer.helpers.openFakeDocument(`
{ - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => { - languageServer = await getLanguageServer(); - }); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide hover for HTML tags', async () => { - const document = await languageServer.helpers.openFakeDocument(` { - const document = await languageServer.helpers.openFakeDocument(`
{ - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => { - languageServer = await getLanguageServer(); - }); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can format document', async () => { - const document = await languageServer.helpers.openFakeDocument(`---\n\n\n---`); - const formatEdits = await languageServer.helpers.requestFormatting(document, { + const document = await serverHandle.openUntitledTextDocument(`---\n\n\n---`, 'astro'); + const formatEdits = await serverHandle.sendDocumentFormattingRequest(document.uri, { tabSize: 2, insertSpaces: true, }); diff --git a/packages/language-server/test/misc/init.test.ts b/packages/language-server/test/misc/init.test.ts index 5cc42bb0..db92be4d 100644 --- a/packages/language-server/test/misc/init.test.ts +++ b/packages/language-server/test/misc/init.test.ts @@ -1,19 +1,19 @@ -import type { ServerCapabilities } from '@volar/language-server'; +import type { InitializeResult, ServerCapabilities } from '@volar/language-server'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { LanguageServer, getLanguageServer } from '../server.js'; +import { getLanguageServer } from '../server.js'; describe('Initialize', async () => { - let languageServer: LanguageServer; + let initializeResult: InitializeResult; before(async function () { // First init can sometimes be slow in CI, even though the rest of the tests will be fast. this.timeout(50000); - languageServer = await getLanguageServer(); + initializeResult = (await getLanguageServer()).initializeResult; }); it('Can start server', async () => { - expect(languageServer.initResult).not.be.null; + expect(initializeResult).not.be.null; }); it('Has proper capabilities', async () => { @@ -143,6 +143,6 @@ describe('Initialize', async () => { workspaceSymbolProvider: true, }; - expect(languageServer.initResult.capabilities).to.deep.equal(capabilities); + expect(initializeResult.capabilities).to.deep.equal(capabilities); }); }); diff --git a/packages/language-server/test/server.ts b/packages/language-server/test/server.ts index adfb2bf4..50655381 100644 --- a/packages/language-server/test/server.ts +++ b/packages/language-server/test/server.ts @@ -1,167 +1,41 @@ /* eslint-disable no-console */ -import { createHash } from 'crypto'; -import cp from 'node:child_process'; -import fs from 'node:fs'; +import { startLanguageServer, LanguageServerHandle } from '@volar/test-utils'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import * as protocol from 'vscode-languageserver-protocol/node'; -import { TextDocument } from 'vscode-languageserver-textdocument'; import { URI } from 'vscode-uri'; -export interface LanguageServer { - process: cp.ChildProcess; - connection: protocol.ProtocolConnection; - initResult: protocol.InitializeResult; - helpers: { - /** - * Open a real file path (relative to `./fixture`) and return the associated TextDocument - */ - openRealDocument: (filePath: string, languageId?: string) => Promise; - /** - * Create a fake document from content and return the associated TextDocument - */ - openFakeDocument: (content: string, languageId?: string) => Promise; - requestCompletion: ( - document: TextDocument, - position: protocol.Position - ) => Promise; - requestDiagnostics: (document: TextDocument) => Promise; - requestHover: (document: TextDocument, position: protocol.Position) => Promise; - requestFormatting( - document: TextDocument, - options?: protocol.FormattingOptions - ): Promise; - }; -} - -let languageServer: LanguageServer | undefined; +let serverHandle: LanguageServerHandle | undefined; +let initializeResult: protocol.InitializeResult | undefined; export async function getLanguageServer() { - if (!languageServer) { - await initLanguageServer(); + if (!serverHandle) { + serverHandle = startLanguageServer( + path.resolve('./bin/nodeServer.js'), + fileURLToPath(new URL('./fixture', import.meta.url)) + ); + initializeResult = await serverHandle.initialize( + URI.file(fileURLToPath(new URL('./fixture', import.meta.url))).toString(), + { + typescript: { + tsdk: path.join( + path.dirname(fileURLToPath(import.meta.url)), + '../', + 'node_modules', + 'typescript', + 'lib' + ), + }, + } + ); + // Ensure that our first test does not suffer from a TypeScript overhead + await serverHandle.sendCompletionRequest( + 'file://doesnt-exists', + protocol.Position.create(0, 0) + ); } - return languageServer!; -} - -async function initLanguageServer() { - if (languageServer) return; - - const dir = fileURLToPath(new URL('./fixture', import.meta.url)); - const serverModule = path.resolve('./bin/nodeServer.js'); - const childProcess = cp.fork( - serverModule, - ['--node-ipc', `--clientProcessId=${process.pid.toString()}`], - { - execArgv: ['--nolazy'], - env: process.env, - cwd: dir, - } - ); - const connection = protocol.createProtocolConnection( - new protocol.IPCMessageReader(childProcess), - new protocol.IPCMessageWriter(childProcess) - ); - connection.listen(); - - connection.onClose((e) => console.log(e)); - connection.onDispose((e) => console.log(e)); - connection.onUnhandledNotification((e) => console.log(e)); - connection.onError((e) => console.log(e)); - - const initRequest = await connection.sendRequest('initialize', { - rootPath: './fixture', - capabilities: {}, - initializationOptions: { - diagnosticModel: 2, // DiagnosticModel.Pull - typescript: { - tsdk: path.join( - path.dirname(fileURLToPath(import.meta.url)), - '../', - 'node_modules', - 'typescript', - 'lib' - ), - }, - }, - }); - await connection.sendNotification('initialized'); - - languageServer = { - process: childProcess, - connection: connection, - get initResult() { - return initRequest; - }, - helpers: { - async openRealDocument(filePath, languageId = 'astro') { - const fileName = path.resolve(dir, filePath); - const uri = URI.file(fileName).toString(); - const item = protocol.TextDocumentItem.create( - uri, - languageId, - 0, - fs.readFileSync(fileName, 'utf-8') - ); - await connection.sendNotification(protocol.DidOpenTextDocumentNotification.type, { - textDocument: item, - }); - return TextDocument.create(uri, languageId, 0, item.text); - }, - async openFakeDocument(content, languageId = 'astro') { - const hash = createHash('sha256').update(content).digest('base64url'); - const uri = URI.file(`does-not-exists-${hash}-.astro`).toString(); - const item = protocol.TextDocumentItem.create(uri, languageId, 0, content); - await connection.sendNotification(protocol.DidOpenTextDocumentNotification.type, { - textDocument: item, - }); - return TextDocument.create(uri, languageId, 0, item.text); - }, - async requestCompletion(document, position) { - return await connection.sendRequest( - protocol.CompletionRequest.method, - { - textDocument: { - uri: document.uri, - }, - position: position, - } - ); - }, - async requestDiagnostics(document) { - return await connection.sendRequest( - protocol.DocumentDiagnosticRequest.method, - { - textDocument: { - uri: document.uri, - }, - } - ); - }, - async requestHover(document, position) { - return await connection.sendRequest(protocol.HoverRequest.method, { - textDocument: { - uri: document.uri, - }, - position: position, - }); - }, - async requestFormatting(document, options) { - return await connection.sendRequest( - protocol.DocumentFormattingRequest.method, - { - textDocument: { - uri: document.uri, - }, - options: options, - } - ); - }, - }, + return { + serverHandle: serverHandle!, + initializeResult: initializeResult!, }; - - // Ensure that our first test does not suffer from a TypeScript overhead - await languageServer.helpers.requestCompletion( - TextDocument.create('file://doesnt-exists', 'astro', 0, ''), - protocol.Position.create(0, 0) - ); } diff --git a/packages/language-server/test/typescript-addons/completions.test.ts b/packages/language-server/test/typescript-addons/completions.test.ts index c356f3d2..f113e253 100644 --- a/packages/language-server/test/typescript-addons/completions.test.ts +++ b/packages/language-server/test/typescript-addons/completions.test.ts @@ -1,21 +1,22 @@ import { Position } from '@volar/language-server'; +import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { LanguageServer, getLanguageServer } from '../server.js'; +import { getLanguageServer } from '../server.js'; describe('TypeScript Addons - Completions', async () => { - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => (languageServer = await getLanguageServer())); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide neat snippets', async () => { - const document = await languageServer.helpers.openFakeDocument('---\nprerender\n---'); - const completions = await languageServer.helpers.requestCompletion( - document, + const document = await serverHandle.openUntitledTextDocument('---\nprerender\n---', 'astro'); + const completions = await serverHandle.sendCompletionRequest( + document.uri, Position.create(1, 10) ); - const prerenderCompletions = completions.items.filter((item) => item.label === 'prerender'); + const prerenderCompletions = completions?.items.filter((item) => item.label === 'prerender'); expect(prerenderCompletions).to.not.be.empty; - expect(prerenderCompletions[0].data.serviceId).to.equal('typescriptaddons'); + expect(prerenderCompletions?.[0].data.serviceId).to.equal('typescriptaddons'); }); }); diff --git a/packages/language-server/test/typescript/completions.test.ts b/packages/language-server/test/typescript/completions.test.ts index de1b9c8e..3c33eb60 100644 --- a/packages/language-server/test/typescript/completions.test.ts +++ b/packages/language-server/test/typescript/completions.test.ts @@ -1,41 +1,42 @@ import { Position } from '@volar/language-server'; +import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { LanguageServer, getLanguageServer } from '../server.js'; +import { getLanguageServer } from '../server.js'; describe('TypeScript - Completions', async () => { - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => (languageServer = await getLanguageServer())); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can get completions in the frontmatter', async () => { - const document = await languageServer.helpers.openFakeDocument('---\nc\n---'); - const completions = await languageServer.helpers.requestCompletion( - document, + const document = await serverHandle.openUntitledTextDocument('---\nc\n---', 'astro'); + const completions = await serverHandle.sendCompletionRequest( + document.uri, Position.create(1, 1) ); - expect(completions.items).to.not.be.empty; + expect(completions?.items).to.not.be.empty; }); it('Can get completions in the template', async () => { - const document = await languageServer.helpers.openFakeDocument('{c}'); - const completions = await languageServer.helpers.requestCompletion( - document, + const document = await serverHandle.openUntitledTextDocument('{c}', 'astro'); + const completions = await serverHandle.sendCompletionRequest( + document.uri, Position.create(0, 1) ); - expect(completions.items).to.not.be.empty; + expect(completions?.items).to.not.be.empty; }); it('sort completions starting with `astro:` higher than other imports', async () => { - const document = await languageServer.helpers.openFakeDocument(' item.labelDetails?.description === 'astro:assets' ); diff --git a/packages/language-server/test/typescript/diagnostics.test.ts b/packages/language-server/test/typescript/diagnostics.test.ts index 7f406dea..95372ae9 100644 --- a/packages/language-server/test/typescript/diagnostics.test.ts +++ b/packages/language-server/test/typescript/diagnostics.test.ts @@ -1,16 +1,24 @@ -import { DiagnosticSeverity, Range, type Diagnostic } from '@volar/language-server'; +import { + DiagnosticSeverity, + Range, + type Diagnostic, + FullDocumentDiagnosticReport, +} from '@volar/language-server'; +import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { LanguageServer, getLanguageServer } from '../server.js'; +import { getLanguageServer } from '../server.js'; describe('TypeScript - Diagnostics', async () => { - let languageServer: LanguageServer; + let serverHandle: LanguageServerHandle; - before(async () => (languageServer = await getLanguageServer())); + before(async () => ({ serverHandle } = await getLanguageServer())); it('Can get diagnostics in the frontmatter', async () => { - const document = await languageServer.helpers.openFakeDocument('---\nNotAThing\n---', 'astro'); - const diagnostics = await languageServer.helpers.requestDiagnostics(document); + const document = await serverHandle.openUntitledTextDocument('---\nNotAThing\n---', 'astro'); + const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + document.uri + )) as FullDocumentDiagnosticReport; // We should only have one error here. expect(diagnostics.items).length(1); @@ -29,8 +37,10 @@ describe('TypeScript - Diagnostics', async () => { }); it('Can get diagnostics in the template', async () => { - const document = await languageServer.helpers.openFakeDocument('---\n\n---\n{nope}', 'astro'); - const diagnostics = await languageServer.helpers.requestDiagnostics(document); + const document = await serverHandle.openUntitledTextDocument('---\n\n---\n{nope}', 'astro'); + const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + document.uri + )) as FullDocumentDiagnosticReport; expect(diagnostics.items).length(1); const diagnostic: Diagnostic = { ...diagnostics.items[0], data: {} }; @@ -45,11 +55,13 @@ describe('TypeScript - Diagnostics', async () => { }); it('shows enhanced diagnostics', async () => { - const document = await languageServer.helpers.openFakeDocument( + const document = await serverHandle.openUntitledTextDocument( '---\nimport {getEntryBySlug} from "astro:content";getEntryBySlug\n---\n
', 'astro' ); - const diagnostics = await languageServer.helpers.requestDiagnostics(document); + const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + document.uri + )) as FullDocumentDiagnosticReport; expect(diagnostics.items).length(2); diagnostics.items = diagnostics.items.map((diag) => ({ ...diag, data: {} })); diff --git a/packages/language-server/test/units/parseJS.test.ts b/packages/language-server/test/units/parseJS.test.ts index 36b99829..14f47c57 100644 --- a/packages/language-server/test/units/parseJS.test.ts +++ b/packages/language-server/test/units/parseJS.test.ts @@ -50,13 +50,15 @@ describe('parseJS - Can find all the scripts in an Astro file', () => { astroAst ); - expect(scriptTags[0].capabilities).to.deep.equal({ - diagnostic: true, - foldingRange: true, - documentFormatting: false, - documentSymbol: true, - codeAction: true, - inlayHint: true, + scriptTags[0].mappings.forEach((mapping) => { + expect(mapping.data).to.deep.equal({ + verification: true, + completion: true, + semantic: true, + navigation: true, + structure: true, + format: false, + }); }); }); }); diff --git a/packages/ts-plugin/package.json b/packages/ts-plugin/package.json index 8db95e7c..6966f1af 100644 --- a/packages/ts-plugin/package.json +++ b/packages/ts-plugin/package.json @@ -27,8 +27,8 @@ "author": "withastro", "license": "MIT", "dependencies": { - "@volar/language-core": "2.0.0-alpha.2", - "@volar/typescript": "2.0.0-alpha.2", + "@volar/language-core": "2.0.0-alpha.3", + "@volar/typescript": "2.0.0-alpha.3", "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", "semver": "^7.3.8", diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 80850ef0..53f49256 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -224,8 +224,8 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", "@types/vscode": "^1.82.0", - "@volar/language-server": "2.0.0-alpha.2", - "@volar/vscode": "2.0.0-alpha.2", + "@volar/language-server": "2.0.0-alpha.3", + "@volar/vscode": "2.0.0-alpha.3", "@vscode/test-electron": "^2.3.2", "@vscode/vsce": "latest", "esbuild": "^0.17.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d773b31d..68feef47 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,41 +88,41 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/kit': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2(typescript@5.2.2) + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3(typescript@5.2.2) '@volar/language-core': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@volar/language-server': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@volar/language-service': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@volar/typescript': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 fast-glob: specifier: ^3.2.12 version: 3.2.12 volar-service-css: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3) volar-service-emmet: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3) volar-service-html: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3) volar-service-prettier: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2)(prettier@3.0.0) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0) volar-service-typescript: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2)(@volar/typescript@2.0.0-alpha.2) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3) volar-service-typescript-twoslash-queries: specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.2) + version: 0.0.19(@volar/language-service@2.0.0-alpha.3) vscode-html-languageservice: specifier: ^5.1.0 version: 5.1.0 @@ -145,6 +145,9 @@ importers: '@types/node': specifier: ^18.17.8 version: 18.17.8 + '@volar/test-utils': + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 astro: specifier: ^3.3.0 version: 3.3.0(@types/node@18.17.8)(typescript@5.2.2) @@ -176,11 +179,11 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/language-core': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@volar/typescript': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 semver: specifier: ^7.3.8 version: 7.5.4 @@ -241,11 +244,11 @@ importers: specifier: ^1.82.0 version: 1.83.0 '@volar/language-server': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@volar/vscode': - specifier: 2.0.0-alpha.2 - version: 2.0.0-alpha.2 + specifier: 2.0.0-alpha.3 + version: 2.0.0-alpha.3 '@vscode/test-electron': specifier: ^2.3.2 version: 2.3.2 @@ -2068,31 +2071,31 @@ packages: optional: true dev: true - /@volar/kit@2.0.0-alpha.2(typescript@5.2.2): - resolution: {integrity: sha512-hAMmxHKZQEOZZWcLI3UTCecVq+ndDsqQkIEoqvMeLibdVjdnm5iZpGpnDWbbruRbQ6n14XLPSEG916YcEGM5Lw==} + /@volar/kit@2.0.0-alpha.3(typescript@5.2.2): + resolution: {integrity: sha512-TgVe2oinvD2EB+na24xcJTouvgxSuistT3EqMMs43pB/4K0WQw1Df8kvmBHCn1U4dp32I9/hRWnHFsstsTt7rw==} peerDependencies: typescript: '*' dependencies: - '@volar/language-service': 2.0.0-alpha.2 - '@volar/typescript': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 + '@volar/typescript': 2.0.0-alpha.3 typesafe-path: 0.2.2 typescript: 5.2.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /@volar/language-core@2.0.0-alpha.2: - resolution: {integrity: sha512-vvCXUR79yF2FT0b5EWnc6zhTyNTtIzPFcQ3SIhX/TPnNQBbw1nr7eXnBGbxzMP2KmLCYp5RZRs8QNK2M0fAT0w==} + /@volar/language-core@2.0.0-alpha.3: + resolution: {integrity: sha512-+IFYZ6YaCtLoaoBxa5b6zj6HnNGGKtiXguVyK9LteJWI8QMNit6aeVhvevQAJKSeIMJEzbJBSBDI4fiZvumlSg==} dependencies: - '@volar/source-map': 2.0.0-alpha.2 + '@volar/source-map': 2.0.0-alpha.3 - /@volar/language-server@2.0.0-alpha.2: - resolution: {integrity: sha512-iQ+iGbZ+72zL2UYG3eSAPqS41xcCp/8pSFugm7Ed2OqmgNA7vXymBWRfu3ic6UrA95Cr9Zbj68w75N89KZg8Zg==} + /@volar/language-server@2.0.0-alpha.3: + resolution: {integrity: sha512-8lorXbuk4JXFF5GuYJ3ngb0DMtK4hop6mdsT3x+R/gfaq1/9qqVjUarXcfab25YtzET89TIplszMYRBwjZmZHw==} dependencies: - '@volar/language-core': 2.0.0-alpha.2 - '@volar/language-service': 2.0.0-alpha.2 - '@volar/snapshot-document': 2.0.0-alpha.2 - '@volar/typescript': 2.0.0-alpha.2 + '@volar/language-core': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.3 + '@volar/snapshot-document': 2.0.0-alpha.3 + '@volar/typescript': 2.0.0-alpha.3 '@vscode/l10n': 0.0.16 path-browserify: 1.0.1 request-light: 0.7.0 @@ -2101,35 +2104,43 @@ packages: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/language-service@2.0.0-alpha.2: - resolution: {integrity: sha512-EFUH14DR0CZF8kKDR8URkGNT9pIZmYQHe2uQ2epaMX9H/ZfX9hdq1dzrzK/pW3YU+glFL76kriFfZV1AJCNLdg==} + /@volar/language-service@2.0.0-alpha.3: + resolution: {integrity: sha512-rlVj5OF5lFnLYlMdYJWMQ79UP5BYcewy0Yy6Vd/IBuI6z/tkjAsARTbHaXdeHiTDCfLWtZ2HCKNTyqnQ0GjhYA==} dependencies: - '@volar/language-core': 2.0.0-alpha.2 + '@volar/language-core': 2.0.0-alpha.3 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/snapshot-document@2.0.0-alpha.2: - resolution: {integrity: sha512-8HHvdiusy87Bjcax9C1jQiYqYc63OoEUXQcCAPlAFeYzr72oUNdgDbT9NDytW9R134QXMd1McQsPn/78GFSAIQ==} + /@volar/snapshot-document@2.0.0-alpha.3: + resolution: {integrity: sha512-CLunbI4CxZQb2Ta9dsuCR7HVebvV3HyzeqT+lgxLlf+L0BeyLke1vMPL92TpaIhiv9bPeycwAqpFLSAsUtM8kA==} dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - /@volar/source-map@2.0.0-alpha.2: - resolution: {integrity: sha512-rbDBM/UWmhc8KwWTUSq/9N5exQaBI1ltnOEzyhIuvwcoommWJdxc3jvxa1aIIUbuaz22yQDvYipmNd9GeIVs9Q==} + /@volar/source-map@2.0.0-alpha.3: + resolution: {integrity: sha512-Y/1JI1ds2SsWgE2FdbFyqCdFzvd6inX2P//sxvdR3UohChcMY8GXWrVBBdRN3TJaKvRCBR6B9LMHkG/bMy7F+g==} dependencies: muggle-string: 0.4.0 - /@volar/typescript@2.0.0-alpha.2: - resolution: {integrity: sha512-Re3q21/w8ytW9Oia7bYUvbdh1pij6gfVOv9Of4ymlHLGWQiHfUXY7Gy1V3HjdKG6tTe7Sm3UtXhI8jyGtQptKg==} + /@volar/test-utils@2.0.0-alpha.3: + resolution: {integrity: sha512-Q2gizAfUP2je8yLUl1r/nlCQaSgJ+VdoaJkc42i9uoqQJO8WpJ1TJQpYaPoWe4nrmLXlAa83QY3hILVeyYzaUQ==} + dependencies: + '@volar/language-server': 2.0.0-alpha.3 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + dev: true + + /@volar/typescript@2.0.0-alpha.3: + resolution: {integrity: sha512-3f6oJvcJed5Ovvip7ge3iSm8MeVSZk+uwQp9+k3JPHz0rpGdgBVMW0/Gn36by65lrxumCDhj6HPUV05oSAPgzQ==} dependencies: - '@volar/language-core': 2.0.0-alpha.2 + '@volar/language-core': 2.0.0-alpha.3 path-browserify: 1.0.1 - /@volar/vscode@2.0.0-alpha.2: - resolution: {integrity: sha512-IXxCedTT8g0wmDVcNTc9XnZI6t9Z920UDdCqMXeoLi5LkD/9ba4e4udEYszcQev1RyWXa/PplgY2TuPlOxP+yA==} + /@volar/vscode@2.0.0-alpha.3: + resolution: {integrity: sha512-7bHWT3nKmb9Nn6rze4+YcZuE85ephJZDbDUK1pm/BGzAFSvVvPaW9ujAiiWerCV4R7wj96xWo6emBzbH+8WUpA==} dependencies: - '@volar/language-server': 2.0.0-alpha.2 + '@volar/language-server': 2.0.0-alpha.3 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -7083,7 +7094,7 @@ packages: vite: 4.4.11(@types/node@18.17.8) dev: true - /volar-service-css@0.0.19(@volar/language-service@2.0.0-alpha.2): + /volar-service-css@0.0.19(@volar/language-service@2.0.0-alpha.3): resolution: {integrity: sha512-GITaJBH/yCpH7MxRZ97cpGWxQrM7QDAj+P0bWKL2KUNRiLVDAWG6ltj4PvhgCDPoEXNKR31ggoaezOY64RvTFg==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7091,12 +7102,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 vscode-css-languageservice: 6.2.10 vscode-uri: 3.0.8 dev: false - /volar-service-emmet@0.0.19(@volar/language-service@2.0.0-alpha.2): + /volar-service-emmet@0.0.19(@volar/language-service@2.0.0-alpha.3): resolution: {integrity: sha512-3XCioC/WmvLX2TCkh7x0DzNI0WyXIQAeorXNZ5+jidwiimEddLjtx9WX6esKa81jfjBaYW8y5vgUm5JQigfsgw==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7104,12 +7115,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 '@vscode/emmet-helper': 2.9.2 - volar-service-html: 0.0.19(@volar/language-service@2.0.0-alpha.2) + volar-service-html: 0.0.19(@volar/language-service@2.0.0-alpha.3) dev: false - /volar-service-html@0.0.19(@volar/language-service@2.0.0-alpha.2): + /volar-service-html@0.0.19(@volar/language-service@2.0.0-alpha.3): resolution: {integrity: sha512-6TxQZIeW0qQEXzV6NcktIncPiPwqMPgDM35Xa8pgn/Y9Kg3xnnYNrzdnkmS8lmr7LXNGb6LG+ABNWhitioy3yQ==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7117,12 +7128,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 vscode-html-languageservice: 5.1.0 vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.19(@volar/language-service@2.0.0-alpha.2)(prettier@3.0.0): + /volar-service-prettier@0.0.19(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0): resolution: {integrity: sha512-F/aAIYMUXOSFCVHxEbvdJVm69P3PKr0yZt2p9O6+n0BDGLFeWGOroq2LxoNuEiMz6Cd+2tzgYW19JSbCwHsOHw==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7133,11 +7144,11 @@ packages: prettier: optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 prettier: 3.0.0 dev: false - /volar-service-typescript-twoslash-queries@0.0.19(@volar/language-service@2.0.0-alpha.2): + /volar-service-typescript-twoslash-queries@0.0.19(@volar/language-service@2.0.0-alpha.3): resolution: {integrity: sha512-WEQ8emzLbItAklbGRWhAmcu6pZnqVKFIt/pO7PBrWxElrmaJuldC4mL7g5NuUKZ3iiuUQVd/jFtdFgJLCRzQHg==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7145,10 +7156,10 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 dev: false - /volar-service-typescript@0.0.19(@volar/language-service@2.0.0-alpha.2)(@volar/typescript@2.0.0-alpha.2): + /volar-service-typescript@0.0.19(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3): resolution: {integrity: sha512-0DIM38N1I3hqmsGhSFdsaiMcLNdF3Td/LGKMsKRv3ZzuM4pbgOluVvBmL07EwY/TMgREDbgqnhu+m7vvsB2Yeg==} peerDependencies: '@volar/language-service': 2.0.0-alpha.2 @@ -7157,8 +7168,8 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.2 - '@volar/typescript': 2.0.0-alpha.2 + '@volar/language-service': 2.0.0-alpha.3 + '@volar/typescript': 2.0.0-alpha.3 path-browserify: 1.0.1 semver: 7.5.4 typescript-auto-import-cache: 0.3.0 From 300baf2672f12ed689109d04712c3fd58860e7d2 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 10 Dec 2023 06:28:29 +0800 Subject: [PATCH 19/25] bump services --- packages/language-server/package.json | 12 ++--- pnpm-lock.yaml | 64 +++++++++++++-------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index a41d5dea..06fe5960 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -34,12 +34,12 @@ "@volar/language-service": "2.0.0-alpha.3", "@volar/typescript": "2.0.0-alpha.3", "fast-glob": "^3.2.12", - "volar-service-css": "0.0.19", - "volar-service-emmet": "0.0.19", - "volar-service-html": "0.0.19", - "volar-service-prettier": "0.0.19", - "volar-service-typescript": "0.0.19", - "volar-service-typescript-twoslash-queries": "0.0.19", + "volar-service-css": "0.0.20", + "volar-service-emmet": "0.0.20", + "volar-service-html": "0.0.20", + "volar-service-prettier": "0.0.20", + "volar-service-typescript": "0.0.20", + "volar-service-typescript-twoslash-queries": "0.0.20", "vscode-html-languageservice": "^5.1.0", "vscode-uri": "^3.0.8" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68feef47..85c7cef7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,23 +106,23 @@ importers: specifier: ^3.2.12 version: 3.2.12 volar-service-css: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3) volar-service-emmet: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3) volar-service-html: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3) volar-service-prettier: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0) volar-service-typescript: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3) volar-service-typescript-twoslash-queries: - specifier: 0.0.19 - version: 0.0.19(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.20 + version: 0.0.20(@volar/language-service@2.0.0-alpha.3) vscode-html-languageservice: specifier: ^5.1.0 version: 5.1.0 @@ -7094,10 +7094,10 @@ packages: vite: 4.4.11(@types/node@18.17.8) dev: true - /volar-service-css@0.0.19(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-GITaJBH/yCpH7MxRZ97cpGWxQrM7QDAj+P0bWKL2KUNRiLVDAWG6ltj4PvhgCDPoEXNKR31ggoaezOY64RvTFg==} + /volar-service-css@0.0.20(@volar/language-service@2.0.0-alpha.3): + resolution: {integrity: sha512-wRIwc75Og3hS5PARf2cH2GkLH/OZFj+wbfMKIyz4fjDmjKp4OoRUuUpTleENeawEEKUQRdZtboClph1WSBAYgg==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true @@ -7107,23 +7107,23 @@ packages: vscode-uri: 3.0.8 dev: false - /volar-service-emmet@0.0.19(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-3XCioC/WmvLX2TCkh7x0DzNI0WyXIQAeorXNZ5+jidwiimEddLjtx9WX6esKa81jfjBaYW8y5vgUm5JQigfsgw==} + /volar-service-emmet@0.0.20(@volar/language-service@2.0.0-alpha.3): + resolution: {integrity: sha512-Zm6LN8nuOuvT6/+Owa3CazBsUuwCc5YSJH76I4cPqjjg4bBRWrFvSPuFSOlisrrdJLuYYZFc0eN0pZWzb9udtA==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true dependencies: '@volar/language-service': 2.0.0-alpha.3 '@vscode/emmet-helper': 2.9.2 - volar-service-html: 0.0.19(@volar/language-service@2.0.0-alpha.3) + volar-service-html: 0.0.20(@volar/language-service@2.0.0-alpha.3) dev: false - /volar-service-html@0.0.19(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-6TxQZIeW0qQEXzV6NcktIncPiPwqMPgDM35Xa8pgn/Y9Kg3xnnYNrzdnkmS8lmr7LXNGb6LG+ABNWhitioy3yQ==} + /volar-service-html@0.0.20(@volar/language-service@2.0.0-alpha.3): + resolution: {integrity: sha512-gzEtyDGxqw/avAHBSAFbr5lo8Wta7iUXh/B6O3F9A/CDg96lYjPnMzNVTn0ZIDXCPuygpik6hzG8srAjCAR0JA==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true @@ -7133,10 +7133,10 @@ packages: vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.19(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0): - resolution: {integrity: sha512-F/aAIYMUXOSFCVHxEbvdJVm69P3PKr0yZt2p9O6+n0BDGLFeWGOroq2LxoNuEiMz6Cd+2tzgYW19JSbCwHsOHw==} + /volar-service-prettier@0.0.20(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0): + resolution: {integrity: sha512-KLVpCEFf7P1vMnSjHxvydTbOvruenFjijACVxUHf9TOs7VeylsuN0QBOzAcPXhuJITWcqHSRRGurdThHqza5pA==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': next prettier: ^2.2 || ^3.0 peerDependenciesMeta: '@volar/language-service': @@ -7148,10 +7148,10 @@ packages: prettier: 3.0.0 dev: false - /volar-service-typescript-twoslash-queries@0.0.19(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-WEQ8emzLbItAklbGRWhAmcu6pZnqVKFIt/pO7PBrWxElrmaJuldC4mL7g5NuUKZ3iiuUQVd/jFtdFgJLCRzQHg==} + /volar-service-typescript-twoslash-queries@0.0.20(@volar/language-service@2.0.0-alpha.3): + resolution: {integrity: sha512-cFYhconxEQ3at5/CAyxrjkI1jQkuR8ooAm4Z8gdAhge/qBtC64HkeRcjLRYa7KhpwnVuAfahfQYaa/CUarVV1w==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 + '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true @@ -7159,11 +7159,11 @@ packages: '@volar/language-service': 2.0.0-alpha.3 dev: false - /volar-service-typescript@0.0.19(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3): - resolution: {integrity: sha512-0DIM38N1I3hqmsGhSFdsaiMcLNdF3Td/LGKMsKRv3ZzuM4pbgOluVvBmL07EwY/TMgREDbgqnhu+m7vvsB2Yeg==} + /volar-service-typescript@0.0.20(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3): + resolution: {integrity: sha512-7HNalHrkB1BUQI3x/RyQatUFw7QiuqueqFS1TFoUmnfKPL1r7lda6J83397u3GPI14ZfirFhFoafzYoYSVPS8A==} peerDependencies: - '@volar/language-service': 2.0.0-alpha.2 - '@volar/typescript': 2.0.0-alpha.2 + '@volar/language-service': next + '@volar/typescript': next peerDependenciesMeta: '@volar/language-service': optional: true From d96c4702df852a39c8e8eb814fb64e9d314239d2 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 13 Dec 2023 07:44:31 +0800 Subject: [PATCH 20/25] update package.json --- packages/language-server/package.json | 24 ++++++++++++------------ packages/ts-plugin/package.json | 4 ++-- packages/vscode/package.json | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 06fe5960..d941395f 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -28,18 +28,18 @@ "dependencies": { "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", - "@volar/kit": "2.0.0-alpha.3", - "@volar/language-core": "2.0.0-alpha.3", - "@volar/language-server": "2.0.0-alpha.3", - "@volar/language-service": "2.0.0-alpha.3", - "@volar/typescript": "2.0.0-alpha.3", + "@volar/kit": "2.0.0-alpha.4", + "@volar/language-core": "2.0.0-alpha.4", + "@volar/language-server": "2.0.0-alpha.4", + "@volar/language-service": "2.0.0-alpha.4", + "@volar/typescript": "2.0.0-alpha.4", "fast-glob": "^3.2.12", - "volar-service-css": "0.0.20", - "volar-service-emmet": "0.0.20", - "volar-service-html": "0.0.20", - "volar-service-prettier": "0.0.20", - "volar-service-typescript": "0.0.20", - "volar-service-typescript-twoslash-queries": "0.0.20", + "volar-service-css": "0.0.21", + "volar-service-emmet": "0.0.21", + "volar-service-html": "0.0.21", + "volar-service-prettier": "0.0.21", + "volar-service-typescript": "0.0.21", + "volar-service-typescript-twoslash-queries": "0.0.21", "vscode-html-languageservice": "^5.1.0", "vscode-uri": "^3.0.8" }, @@ -49,7 +49,7 @@ "@types/chai": "^4.3.5", "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", - "@volar/test-utils": "2.0.0-alpha.3", + "@volar/test-utils": "2.0.0-alpha.4", "astro": "^3.3.0", "chai": "^4.3.7", "mocha": "^10.2.0", diff --git a/packages/ts-plugin/package.json b/packages/ts-plugin/package.json index 6966f1af..f9b0c604 100644 --- a/packages/ts-plugin/package.json +++ b/packages/ts-plugin/package.json @@ -27,8 +27,8 @@ "author": "withastro", "license": "MIT", "dependencies": { - "@volar/language-core": "2.0.0-alpha.3", - "@volar/typescript": "2.0.0-alpha.3", + "@volar/language-core": "2.0.0-alpha.4", + "@volar/typescript": "2.0.0-alpha.4", "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", "semver": "^7.3.8", diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 53f49256..61fbff63 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -224,8 +224,8 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", "@types/vscode": "^1.82.0", - "@volar/language-server": "2.0.0-alpha.3", - "@volar/vscode": "2.0.0-alpha.3", + "@volar/language-server": "2.0.0-alpha.4", + "@volar/vscode": "2.0.0-alpha.4", "@vscode/test-electron": "^2.3.2", "@vscode/vsce": "latest", "esbuild": "^0.17.19", From b1e14dfac3db1ba8c77d57c04eb203cd3c6be54f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 15 Dec 2023 01:41:32 +0800 Subject: [PATCH 21/25] bump deps --- packages/language-server/package.json | 12 +- packages/ts-plugin/package.json | 4 +- packages/ts-plugin/src/index.ts | 2 +- packages/vscode/package.json | 4 +- pnpm-lock.yaml | 163 +++++++++++++------------- 5 files changed, 93 insertions(+), 92 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index d941395f..ec19783f 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -28,11 +28,11 @@ "dependencies": { "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", - "@volar/kit": "2.0.0-alpha.4", - "@volar/language-core": "2.0.0-alpha.4", - "@volar/language-server": "2.0.0-alpha.4", - "@volar/language-service": "2.0.0-alpha.4", - "@volar/typescript": "2.0.0-alpha.4", + "@volar/kit": "2.0.0-alpha.5", + "@volar/language-core": "2.0.0-alpha.5", + "@volar/language-server": "2.0.0-alpha.5", + "@volar/language-service": "2.0.0-alpha.5", + "@volar/typescript": "2.0.0-alpha.5", "fast-glob": "^3.2.12", "volar-service-css": "0.0.21", "volar-service-emmet": "0.0.21", @@ -49,7 +49,7 @@ "@types/chai": "^4.3.5", "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", - "@volar/test-utils": "2.0.0-alpha.4", + "@volar/test-utils": "2.0.0-alpha.5", "astro": "^3.3.0", "chai": "^4.3.7", "mocha": "^10.2.0", diff --git a/packages/ts-plugin/package.json b/packages/ts-plugin/package.json index f9b0c604..33cf0c2d 100644 --- a/packages/ts-plugin/package.json +++ b/packages/ts-plugin/package.json @@ -27,8 +27,8 @@ "author": "withastro", "license": "MIT", "dependencies": { - "@volar/language-core": "2.0.0-alpha.4", - "@volar/typescript": "2.0.0-alpha.4", + "@volar/language-core": "2.0.0-alpha.5", + "@volar/typescript": "2.0.0-alpha.5", "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", "semver": "^7.3.8", diff --git a/packages/ts-plugin/src/index.ts b/packages/ts-plugin/src/index.ts index ba9128f1..9d221160 100644 --- a/packages/ts-plugin/src/index.ts +++ b/packages/ts-plugin/src/index.ts @@ -20,7 +20,7 @@ const init: ts.server.PluginModuleFactory = (modules) => { () => {} ); - decorateLanguageService(virtualFiles, info.languageService, true); + decorateLanguageService(virtualFiles, info.languageService); decorateLanguageServiceHost(virtualFiles, info.languageServiceHost, ts, ['.astro']); if (semver.lt(ts.version, '5.3.0')) { diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 61fbff63..140443fa 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -224,8 +224,8 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", "@types/vscode": "^1.82.0", - "@volar/language-server": "2.0.0-alpha.4", - "@volar/vscode": "2.0.0-alpha.4", + "@volar/language-server": "2.0.0-alpha.5", + "@volar/vscode": "2.0.0-alpha.5", "@vscode/test-electron": "^2.3.2", "@vscode/vsce": "latest", "esbuild": "^0.17.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85c7cef7..6156ba4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,41 +88,41 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/kit': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3(typescript@5.2.2) + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5(typescript@5.2.2) '@volar/language-core': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@volar/language-server': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@volar/language-service': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@volar/typescript': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 fast-glob: specifier: ^3.2.12 version: 3.2.12 volar-service-css: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5) volar-service-emmet: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5) volar-service-html: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5) volar-service-prettier: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5)(prettier@3.0.0) volar-service-typescript: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5)(@volar/typescript@2.0.0-alpha.5) volar-service-typescript-twoslash-queries: - specifier: 0.0.20 - version: 0.0.20(@volar/language-service@2.0.0-alpha.3) + specifier: 0.0.21 + version: 0.0.21(@volar/language-service@2.0.0-alpha.5) vscode-html-languageservice: specifier: ^5.1.0 version: 5.1.0 @@ -146,8 +146,8 @@ importers: specifier: ^18.17.8 version: 18.17.8 '@volar/test-utils': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 astro: specifier: ^3.3.0 version: 3.3.0(@types/node@18.17.8)(typescript@5.2.2) @@ -179,11 +179,11 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/language-core': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@volar/typescript': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 semver: specifier: ^7.3.8 version: 7.5.4 @@ -244,11 +244,11 @@ importers: specifier: ^1.82.0 version: 1.83.0 '@volar/language-server': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@volar/vscode': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 + specifier: 2.0.0-alpha.5 + version: 2.0.0-alpha.5 '@vscode/test-electron': specifier: ^2.3.2 version: 2.3.2 @@ -2071,31 +2071,31 @@ packages: optional: true dev: true - /@volar/kit@2.0.0-alpha.3(typescript@5.2.2): - resolution: {integrity: sha512-TgVe2oinvD2EB+na24xcJTouvgxSuistT3EqMMs43pB/4K0WQw1Df8kvmBHCn1U4dp32I9/hRWnHFsstsTt7rw==} + /@volar/kit@2.0.0-alpha.5(typescript@5.2.2): + resolution: {integrity: sha512-B77u33bBbyYxxDD8fLizhVJQbSkPwSdopi98UHUayw86fLkK2vRExOcylakbeG2qQv2w0F/LsZ9baJgCAxvO2Q==} peerDependencies: typescript: '*' dependencies: - '@volar/language-service': 2.0.0-alpha.3 - '@volar/typescript': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 + '@volar/typescript': 2.0.0-alpha.5 typesafe-path: 0.2.2 typescript: 5.2.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /@volar/language-core@2.0.0-alpha.3: - resolution: {integrity: sha512-+IFYZ6YaCtLoaoBxa5b6zj6HnNGGKtiXguVyK9LteJWI8QMNit6aeVhvevQAJKSeIMJEzbJBSBDI4fiZvumlSg==} + /@volar/language-core@2.0.0-alpha.5: + resolution: {integrity: sha512-aN75cedk7+fkzP1A5+jEV5F1MY9oWE6MD0d/9cYEBqZ1dU85VSn1+KcTiHRh0UP3/y+ByClKopP30WV4z+q92A==} dependencies: - '@volar/source-map': 2.0.0-alpha.3 + '@volar/source-map': 2.0.0-alpha.5 - /@volar/language-server@2.0.0-alpha.3: - resolution: {integrity: sha512-8lorXbuk4JXFF5GuYJ3ngb0DMtK4hop6mdsT3x+R/gfaq1/9qqVjUarXcfab25YtzET89TIplszMYRBwjZmZHw==} + /@volar/language-server@2.0.0-alpha.5: + resolution: {integrity: sha512-jUwt+XMTOq9NaeDJRJiQkCSsjqMQU/m7ZNzt7cAuzpGokdNuTUu0Omox/rS4i+RnOOGe4b3SVe2pDdj9Jc4WbQ==} dependencies: - '@volar/language-core': 2.0.0-alpha.3 - '@volar/language-service': 2.0.0-alpha.3 - '@volar/snapshot-document': 2.0.0-alpha.3 - '@volar/typescript': 2.0.0-alpha.3 + '@volar/language-core': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.5 + '@volar/snapshot-document': 2.0.0-alpha.5 + '@volar/typescript': 2.0.0-alpha.5 '@vscode/l10n': 0.0.16 path-browserify: 1.0.1 request-light: 0.7.0 @@ -2104,43 +2104,43 @@ packages: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/language-service@2.0.0-alpha.3: - resolution: {integrity: sha512-rlVj5OF5lFnLYlMdYJWMQ79UP5BYcewy0Yy6Vd/IBuI6z/tkjAsARTbHaXdeHiTDCfLWtZ2HCKNTyqnQ0GjhYA==} + /@volar/language-service@2.0.0-alpha.5: + resolution: {integrity: sha512-YiaayV1oBKNrMph48wPeZpV67DDQzc87cHRhsWxcrXcFTxsw0KO4M1ldHnQzGAndhDFQi4RLd2o2sXUC+5J52Q==} dependencies: - '@volar/language-core': 2.0.0-alpha.3 + '@volar/language-core': 2.0.0-alpha.5 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/snapshot-document@2.0.0-alpha.3: - resolution: {integrity: sha512-CLunbI4CxZQb2Ta9dsuCR7HVebvV3HyzeqT+lgxLlf+L0BeyLke1vMPL92TpaIhiv9bPeycwAqpFLSAsUtM8kA==} + /@volar/snapshot-document@2.0.0-alpha.5: + resolution: {integrity: sha512-BDpNhSbnVJ+rdK5GtgS63nz/UMRvxthUs/McG0B3nbfS5uPRPzsfe9NnmYp71aW0mjvFEfGiMsOBAyi1+YV3zQ==} dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - /@volar/source-map@2.0.0-alpha.3: - resolution: {integrity: sha512-Y/1JI1ds2SsWgE2FdbFyqCdFzvd6inX2P//sxvdR3UohChcMY8GXWrVBBdRN3TJaKvRCBR6B9LMHkG/bMy7F+g==} + /@volar/source-map@2.0.0-alpha.5: + resolution: {integrity: sha512-ZOUTOVr1T+cjbLdKqzGlTpG3oiCk1v7YHWWnUKsRCAe/V2NaFA6Y6TMJUAwIwo3+l1DEbpqyQlqeg4q/jZ9Qyw==} dependencies: muggle-string: 0.4.0 - /@volar/test-utils@2.0.0-alpha.3: - resolution: {integrity: sha512-Q2gizAfUP2je8yLUl1r/nlCQaSgJ+VdoaJkc42i9uoqQJO8WpJ1TJQpYaPoWe4nrmLXlAa83QY3hILVeyYzaUQ==} + /@volar/test-utils@2.0.0-alpha.5: + resolution: {integrity: sha512-IzKOb+cDMTkn/7SaII5cry2JJAw5uvgE7ak51EjtEr0dk/EMMfPljEWEHBd2Gdchds1iW/LzlI1LkSda/WCr4A==} dependencies: - '@volar/language-server': 2.0.0-alpha.3 + '@volar/language-server': 2.0.0-alpha.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: true - /@volar/typescript@2.0.0-alpha.3: - resolution: {integrity: sha512-3f6oJvcJed5Ovvip7ge3iSm8MeVSZk+uwQp9+k3JPHz0rpGdgBVMW0/Gn36by65lrxumCDhj6HPUV05oSAPgzQ==} + /@volar/typescript@2.0.0-alpha.5: + resolution: {integrity: sha512-27nguq6k0Y9wv3lyf2gM20JTbxx/SOXDpUBoQ7Z1tLeOUZ50b3Ru+3rQxKf4XjHIIsVaHetG4FkL9qfXvHxAEg==} dependencies: - '@volar/language-core': 2.0.0-alpha.3 + '@volar/language-core': 2.0.0-alpha.5 path-browserify: 1.0.1 - /@volar/vscode@2.0.0-alpha.3: - resolution: {integrity: sha512-7bHWT3nKmb9Nn6rze4+YcZuE85ephJZDbDUK1pm/BGzAFSvVvPaW9ujAiiWerCV4R7wj96xWo6emBzbH+8WUpA==} + /@volar/vscode@2.0.0-alpha.5: + resolution: {integrity: sha512-qxuYZe+9y0mLvsxTSOFzTbIxpGkDohFLwOd2p2/nSHb31g9mI46+JHt2eVFNyzecFnm33f9cXBb9LPG41xE6IQ==} dependencies: - '@volar/language-server': 2.0.0-alpha.3 + '@volar/language-server': 2.0.0-alpha.5 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -2839,6 +2839,7 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + requiresBuild: true /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} @@ -7094,47 +7095,47 @@ packages: vite: 4.4.11(@types/node@18.17.8) dev: true - /volar-service-css@0.0.20(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-wRIwc75Og3hS5PARf2cH2GkLH/OZFj+wbfMKIyz4fjDmjKp4OoRUuUpTleENeawEEKUQRdZtboClph1WSBAYgg==} + /volar-service-css@0.0.21(@volar/language-service@2.0.0-alpha.5): + resolution: {integrity: sha512-GSn879I7v+gPqJQntoi0Qdl72w1TYegoa2JFm1GI60YiSpPAoQ745JWFElL6AYX0FL9VqTfa9J6Y9fCUP6ZO6A==} peerDependencies: '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 vscode-css-languageservice: 6.2.10 vscode-uri: 3.0.8 dev: false - /volar-service-emmet@0.0.20(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-Zm6LN8nuOuvT6/+Owa3CazBsUuwCc5YSJH76I4cPqjjg4bBRWrFvSPuFSOlisrrdJLuYYZFc0eN0pZWzb9udtA==} + /volar-service-emmet@0.0.21(@volar/language-service@2.0.0-alpha.5): + resolution: {integrity: sha512-JWmyZxAyAMU92RcGmwdsxixmO0UHD/n1N75Io4rxH0VxnUbrnbMh+20CCB5RTXJQhnwkINbIxFcHfe4caHWgDg==} peerDependencies: '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 '@vscode/emmet-helper': 2.9.2 - volar-service-html: 0.0.20(@volar/language-service@2.0.0-alpha.3) + volar-service-html: 0.0.21(@volar/language-service@2.0.0-alpha.5) dev: false - /volar-service-html@0.0.20(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-gzEtyDGxqw/avAHBSAFbr5lo8Wta7iUXh/B6O3F9A/CDg96lYjPnMzNVTn0ZIDXCPuygpik6hzG8srAjCAR0JA==} + /volar-service-html@0.0.21(@volar/language-service@2.0.0-alpha.5): + resolution: {integrity: sha512-bDZoOOwrF+IJw79qxMMeArrBR/FvxP4Lb15aAP9g3hpTcbvoUMatTuGauzMTsBbz+qt+Ae75zM+1xRmOEWfUqw==} peerDependencies: '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 vscode-html-languageservice: 5.1.0 vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.20(@volar/language-service@2.0.0-alpha.3)(prettier@3.0.0): - resolution: {integrity: sha512-KLVpCEFf7P1vMnSjHxvydTbOvruenFjijACVxUHf9TOs7VeylsuN0QBOzAcPXhuJITWcqHSRRGurdThHqza5pA==} + /volar-service-prettier@0.0.21(@volar/language-service@2.0.0-alpha.5)(prettier@3.0.0): + resolution: {integrity: sha512-rKB5HpNpxWA7yv5ZrUInaw5FRBxCaV32OkauP8WB9vZt4L+nrJ/qmicE0I3jgA5984xk3m25moJQ7ovCkx9VKw==} peerDependencies: '@volar/language-service': next prettier: ^2.2 || ^3.0 @@ -7144,23 +7145,23 @@ packages: prettier: optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 prettier: 3.0.0 dev: false - /volar-service-typescript-twoslash-queries@0.0.20(@volar/language-service@2.0.0-alpha.3): - resolution: {integrity: sha512-cFYhconxEQ3at5/CAyxrjkI1jQkuR8ooAm4Z8gdAhge/qBtC64HkeRcjLRYa7KhpwnVuAfahfQYaa/CUarVV1w==} + /volar-service-typescript-twoslash-queries@0.0.21(@volar/language-service@2.0.0-alpha.5): + resolution: {integrity: sha512-ZrqkbUkDKSv8euHmqVfGgrchpdXMIX0V3+tj1xzd3d5PSMnZI+tqV+dIseAb7XF3eEjO+JInBGnsccwp6t5+Ow==} peerDependencies: '@volar/language-service': next peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 dev: false - /volar-service-typescript@0.0.20(@volar/language-service@2.0.0-alpha.3)(@volar/typescript@2.0.0-alpha.3): - resolution: {integrity: sha512-7HNalHrkB1BUQI3x/RyQatUFw7QiuqueqFS1TFoUmnfKPL1r7lda6J83397u3GPI14ZfirFhFoafzYoYSVPS8A==} + /volar-service-typescript@0.0.21(@volar/language-service@2.0.0-alpha.5)(@volar/typescript@2.0.0-alpha.5): + resolution: {integrity: sha512-5IGcQxdXPmqCwwZxpy3nWw7hA3/5pRuKsWGJaWI7KsydZB8oqmJmdozX4rr/uLl5kdu5+ceQOmnUghl0IWM0WQ==} peerDependencies: '@volar/language-service': next '@volar/typescript': next @@ -7168,8 +7169,8 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.3 - '@volar/typescript': 2.0.0-alpha.3 + '@volar/language-service': 2.0.0-alpha.5 + '@volar/typescript': 2.0.0-alpha.5 path-browserify: 1.0.1 semver: 7.5.4 typescript-auto-import-cache: 0.3.0 From 01f8b41ea473d2e2380c13a7779fa375b538487a Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 15 Dec 2023 01:54:27 +0800 Subject: [PATCH 22/25] fix openUntitledDocument --- packages/language-server/test/css/completions.test.ts | 4 ++-- packages/language-server/test/html/completions.test.ts | 4 ++-- packages/language-server/test/html/hover.test.ts | 4 ++-- packages/language-server/test/misc/format.test.ts | 2 +- .../test/typescript-addons/completions.test.ts | 2 +- .../language-server/test/typescript/completions.test.ts | 6 +++--- .../language-server/test/typescript/diagnostics.test.ts | 6 +++--- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/language-server/test/css/completions.test.ts b/packages/language-server/test/css/completions.test.ts index 7e01c6e9..76dc1c30 100644 --- a/packages/language-server/test/css/completions.test.ts +++ b/packages/language-server/test/css/completions.test.ts @@ -10,7 +10,7 @@ describe('CSS - Completions', () => { before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide completions for CSS properties', async () => { - const document = await serverHandle.openUntitledTextDocument( + const document = await serverHandle.openUntitledDocument( ``, 'astro' ); @@ -24,7 +24,7 @@ describe('CSS - Completions', () => { }); it('Can provide completions for CSS values', async () => { - const document = await serverHandle.openUntitledTextDocument( + const document = await serverHandle.openUntitledDocument( ``, 'astro' ); diff --git a/packages/language-server/test/html/completions.test.ts b/packages/language-server/test/html/completions.test.ts index 37d5575e..f4d7b694 100644 --- a/packages/language-server/test/html/completions.test.ts +++ b/packages/language-server/test/html/completions.test.ts @@ -10,7 +10,7 @@ describe('HTML - Completions', () => { before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide completions for HTML tags', async () => { - const document = await serverHandle.openUntitledTextDocument(` { }); it('Can provide completions for HTML attributes', async () => { - const document = await serverHandle.openUntitledTextDocument(`
{ before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide hover for HTML tags', async () => { - const document = await serverHandle.openUntitledTextDocument(` { - const document = await serverHandle.openUntitledTextDocument(`
{ before(async () => ({ serverHandle } = await getLanguageServer())); it('Can format document', async () => { - const document = await serverHandle.openUntitledTextDocument(`---\n\n\n---`, 'astro'); + const document = await serverHandle.openUntitledDocument(`---\n\n\n---`, 'astro'); const formatEdits = await serverHandle.sendDocumentFormattingRequest(document.uri, { tabSize: 2, insertSpaces: true, diff --git a/packages/language-server/test/typescript-addons/completions.test.ts b/packages/language-server/test/typescript-addons/completions.test.ts index f113e253..82d8b75c 100644 --- a/packages/language-server/test/typescript-addons/completions.test.ts +++ b/packages/language-server/test/typescript-addons/completions.test.ts @@ -9,7 +9,7 @@ describe('TypeScript Addons - Completions', async () => { before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide neat snippets', async () => { - const document = await serverHandle.openUntitledTextDocument('---\nprerender\n---', 'astro'); + const document = await serverHandle.openUntitledDocument('---\nprerender\n---', 'astro'); const completions = await serverHandle.sendCompletionRequest( document.uri, Position.create(1, 10) diff --git a/packages/language-server/test/typescript/completions.test.ts b/packages/language-server/test/typescript/completions.test.ts index 3c33eb60..19e0f6f3 100644 --- a/packages/language-server/test/typescript/completions.test.ts +++ b/packages/language-server/test/typescript/completions.test.ts @@ -10,7 +10,7 @@ describe('TypeScript - Completions', async () => { before(async () => ({ serverHandle } = await getLanguageServer())); it('Can get completions in the frontmatter', async () => { - const document = await serverHandle.openUntitledTextDocument('---\nc\n---', 'astro'); + const document = await serverHandle.openUntitledDocument('---\nc\n---', 'astro'); const completions = await serverHandle.sendCompletionRequest( document.uri, Position.create(1, 1) @@ -20,7 +20,7 @@ describe('TypeScript - Completions', async () => { }); it('Can get completions in the template', async () => { - const document = await serverHandle.openUntitledTextDocument('{c}', 'astro'); + const document = await serverHandle.openUntitledDocument('{c}', 'astro'); const completions = await serverHandle.sendCompletionRequest( document.uri, Position.create(0, 1) @@ -30,7 +30,7 @@ describe('TypeScript - Completions', async () => { }); it('sort completions starting with `astro:` higher than other imports', async () => { - const document = await serverHandle.openUntitledTextDocument(' { before(async () => ({ serverHandle } = await getLanguageServer())); it('Can get diagnostics in the frontmatter', async () => { - const document = await serverHandle.openUntitledTextDocument('---\nNotAThing\n---', 'astro'); + const document = await serverHandle.openUntitledDocument('---\nNotAThing\n---', 'astro'); const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( document.uri )) as FullDocumentDiagnosticReport; @@ -37,7 +37,7 @@ describe('TypeScript - Diagnostics', async () => { }); it('Can get diagnostics in the template', async () => { - const document = await serverHandle.openUntitledTextDocument('---\n\n---\n{nope}', 'astro'); + const document = await serverHandle.openUntitledDocument('---\n\n---\n{nope}', 'astro'); const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( document.uri )) as FullDocumentDiagnosticReport; @@ -55,7 +55,7 @@ describe('TypeScript - Diagnostics', async () => { }); it('shows enhanced diagnostics', async () => { - const document = await serverHandle.openUntitledTextDocument( + const document = await serverHandle.openUntitledDocument( '---\nimport {getEntryBySlug} from "astro:content";getEntryBySlug\n---\n
', 'astro' ); From c6a581651ef994d1ab16d055fed7595968366f0e Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Fri, 15 Dec 2023 02:01:46 +0800 Subject: [PATCH 23/25] Update client.ts --- packages/vscode/src/client.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/vscode/src/client.ts b/packages/vscode/src/client.ts index 0c5ad87a..f536b51f 100644 --- a/packages/vscode/src/client.ts +++ b/packages/vscode/src/client.ts @@ -70,23 +70,22 @@ export async function activate(context: vscode.ExtensionContext): Promise document.languageId === 'astro'); + activateAutoInsertion('astro', client); activateFindFileReferences('astro.findFileReferences', client); - activateReloadProjects('astro.reloadProjects', [client]); - activateTsConfigStatusItem('astro.openTsConfig', client, () => false); + activateReloadProjects('astro.reloadProjects', client); + activateTsConfigStatusItem('astro', 'astro.openTsConfig', client); activateTsVersionStatusItem( + 'astro', 'astro.selectTypescriptVersion', context, client, - (document) => document.languageId === 'astro', - (text) => text, - true + (text) => text ); return { volarLabs: { version: supportLabsVersion, - languageClients: [client], + languageClient: client, languageServerProtocol: protocol, }, }; From ccfb062013113a49002055ca9fb29c03721e125d Mon Sep 17 00:00:00 2001 From: Princesseuh <3019731+Princesseuh@users.noreply.github.com> Date: Thu, 14 Dec 2023 14:59:28 -0500 Subject: [PATCH 24/25] test: update test setup to not stall --- packages/language-server/src/plugins/html.ts | 2 +- .../language-server/test/css/completions.test.ts | 2 -- .../language-server/test/html/completions.test.ts | 4 +--- packages/language-server/test/misc/init.test.ts | 8 ++++---- packages/language-server/test/server.ts | 13 ++++++++++--- packages/language-server/test/takedown.ts | 2 +- .../test/typescript-addons/completions.test.ts | 1 - 7 files changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/language-server/src/plugins/html.ts b/packages/language-server/src/plugins/html.ts index 46afc177..41d45649 100644 --- a/packages/language-server/src/plugins/html.ts +++ b/packages/language-server/src/plugins/html.ts @@ -1,4 +1,4 @@ -import { CompletionItemKind, ServicePluginInstance, ServicePlugin } from '@volar/language-server'; +import { CompletionItemKind, ServicePlugin, ServicePluginInstance } from '@volar/language-server'; import { create as createHtmlService } from 'volar-service-html'; import { AstroFile } from '../core/index.js'; import { astroAttributes, astroElements, classListAttribute } from './html-data.js'; diff --git a/packages/language-server/test/css/completions.test.ts b/packages/language-server/test/css/completions.test.ts index 76dc1c30..1e813740 100644 --- a/packages/language-server/test/css/completions.test.ts +++ b/packages/language-server/test/css/completions.test.ts @@ -20,7 +20,6 @@ describe('CSS - Completions', () => { ); expect(completions!.items).to.not.be.empty; - expect(completions!.items[0].data.serviceId).to.equal('css'); }); it('Can provide completions for CSS values', async () => { @@ -34,6 +33,5 @@ describe('CSS - Completions', () => { ); expect(completions!.items).to.not.be.empty; - expect(completions!.items[0].data.serviceId).to.equal('css'); }); }); diff --git a/packages/language-server/test/html/completions.test.ts b/packages/language-server/test/html/completions.test.ts index f4d7b694..9c184178 100644 --- a/packages/language-server/test/html/completions.test.ts +++ b/packages/language-server/test/html/completions.test.ts @@ -9,7 +9,7 @@ describe('HTML - Completions', () => { before(async () => ({ serverHandle } = await getLanguageServer())); - it('Can provide completions for HTML tags', async () => { + it('Can provide completions for HTML tags zzz', async () => { const document = await serverHandle.openUntitledDocument(` { expect(completions!.items).to.not.be.empty; expect(completions!.items[0].label).to.equal('blockquote'); - expect(completions!.items[0].data.serviceId).to.equal('html'); }); it('Can provide completions for HTML attributes', async () => { @@ -30,6 +29,5 @@ describe('HTML - Completions', () => { expect(completions!.items).to.not.be.empty; expect(completions!.items[0].label).to.equal('cite'); - expect(completions!.items[0].data.serviceId).to.equal('html'); }); }); diff --git a/packages/language-server/test/misc/init.test.ts b/packages/language-server/test/misc/init.test.ts index db92be4d..64190104 100644 --- a/packages/language-server/test/misc/init.test.ts +++ b/packages/language-server/test/misc/init.test.ts @@ -39,16 +39,16 @@ describe('Initialize', async () => { documentSymbolProvider: true, documentFormattingProvider: true, documentRangeFormattingProvider: true, + documentOnTypeFormattingProvider: { + firstTriggerCharacter: ';', + moreTriggerCharacter: ['}', '\n'], + }, referencesProvider: true, implementationProvider: true, definitionProvider: true, typeDefinitionProvider: true, callHierarchyProvider: true, hoverProvider: true, - diagnosticProvider: { - interFileDependencies: true, - workspaceDiagnostics: false, - }, renameProvider: { prepareProvider: true }, signatureHelpProvider: { triggerCharacters: ['(', ',', '<'], retriggerCharacters: [')'] }, completionProvider: { diff --git a/packages/language-server/test/server.ts b/packages/language-server/test/server.ts index 50655381..291473f9 100644 --- a/packages/language-server/test/server.ts +++ b/packages/language-server/test/server.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -import { startLanguageServer, LanguageServerHandle } from '@volar/test-utils'; +import { LanguageServerHandle, startLanguageServer } from '@volar/test-utils'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import * as protocol from 'vscode-languageserver-protocol/node'; @@ -14,6 +14,7 @@ export async function getLanguageServer() { path.resolve('./bin/nodeServer.js'), fileURLToPath(new URL('./fixture', import.meta.url)) ); + initializeResult = await serverHandle.initialize( URI.file(fileURLToPath(new URL('./fixture', import.meta.url))).toString(), { @@ -34,8 +35,14 @@ export async function getLanguageServer() { protocol.Position.create(0, 0) ); } + + if (!initializeResult || !serverHandle) { + throw new Error('Server not initialized'); + } + return { - serverHandle: serverHandle!, - initializeResult: initializeResult!, + serverHandle: serverHandle, + initializeResult: initializeResult, + connection: serverHandle.connection, }; } diff --git a/packages/language-server/test/takedown.ts b/packages/language-server/test/takedown.ts index 9f2aa39e..80dc2b9c 100644 --- a/packages/language-server/test/takedown.ts +++ b/packages/language-server/test/takedown.ts @@ -1,5 +1,5 @@ import { getLanguageServer } from './server.js'; export async function mochaGlobalTeardown() { const languageServer = await getLanguageServer(); - languageServer.process.kill(); + languageServer.connection.dispose(); } diff --git a/packages/language-server/test/typescript-addons/completions.test.ts b/packages/language-server/test/typescript-addons/completions.test.ts index 82d8b75c..e6a19192 100644 --- a/packages/language-server/test/typescript-addons/completions.test.ts +++ b/packages/language-server/test/typescript-addons/completions.test.ts @@ -17,6 +17,5 @@ describe('TypeScript Addons - Completions', async () => { const prerenderCompletions = completions?.items.filter((item) => item.label === 'prerender'); expect(prerenderCompletions).to.not.be.empty; - expect(prerenderCompletions?.[0].data.serviceId).to.equal('typescriptaddons'); }); }); From dfcea9912c7fae29a768271c9fc68e6f17ab1a05 Mon Sep 17 00:00:00 2001 From: Princesseuh <3019731+Princesseuh@users.noreply.github.com> Date: Thu, 14 Dec 2023 16:37:53 -0500 Subject: [PATCH 25/25] test: update tests --- packages/language-server/package.json | 12 +- .../test/css/completions.test.ts | 18 +-- .../test/html/completions.test.ts | 15 +- .../language-server/test/html/hover.test.ts | 18 ++- .../language-server/test/misc/format.test.ts | 11 +- packages/language-server/test/server.ts | 20 ++- packages/language-server/test/takedown.ts | 2 +- .../typescript-addons/completions.test.ts | 12 +- .../test/typescript/completions.test.ts | 19 ++- .../test/typescript/diagnostics.test.ts | 21 ++- packages/ts-plugin/package.json | 4 +- packages/vscode/package.json | 4 +- pnpm-lock.yaml | 144 +++++++++--------- 13 files changed, 154 insertions(+), 146 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index dbb14e63..957e6fe5 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -28,11 +28,11 @@ "dependencies": { "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", - "@volar/kit": "2.0.0-alpha.5", - "@volar/language-core": "2.0.0-alpha.5", - "@volar/language-server": "2.0.0-alpha.5", - "@volar/language-service": "2.0.0-alpha.5", - "@volar/typescript": "2.0.0-alpha.5", + "@volar/kit": "2.0.0-alpha.6", + "@volar/language-core": "2.0.0-alpha.6", + "@volar/language-server": "2.0.0-alpha.6", + "@volar/language-service": "2.0.0-alpha.6", + "@volar/typescript": "2.0.0-alpha.6", "fast-glob": "^3.2.12", "volar-service-css": "0.0.21", "volar-service-emmet": "0.0.21", @@ -49,7 +49,7 @@ "@types/chai": "^4.3.5", "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", - "@volar/test-utils": "2.0.0-alpha.5", + "@volar/test-utils": "2.0.0-alpha.6", "astro": "^3.3.0", "chai": "^4.3.7", "mocha": "^10.2.0", diff --git a/packages/language-server/test/css/completions.test.ts b/packages/language-server/test/css/completions.test.ts index 1e813740..0111c82e 100644 --- a/packages/language-server/test/css/completions.test.ts +++ b/packages/language-server/test/css/completions.test.ts @@ -1,20 +1,16 @@ import { Position } from '@volar/language-server'; -import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { describe } from 'mocha'; -import { getLanguageServer } from '../server.js'; +import { LanguageServer, getLanguageServer } from '../server.js'; describe('CSS - Completions', () => { - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can provide completions for CSS properties', async () => { - const document = await serverHandle.openUntitledDocument( - ``, - 'astro' - ); - const completions = await serverHandle.sendCompletionRequest( + const document = await languageServer.openFakeDocument(``, 'astro'); + const completions = await languageServer.handle.sendCompletionRequest( document.uri, Position.create(0, 18) ); @@ -23,11 +19,11 @@ describe('CSS - Completions', () => { }); it('Can provide completions for CSS values', async () => { - const document = await serverHandle.openUntitledDocument( + const document = await languageServer.openFakeDocument( ``, 'astro' ); - const completions = await serverHandle.sendCompletionRequest( + const completions = await languageServer.handle.sendCompletionRequest( document.uri, Position.create(0, 21) ); diff --git a/packages/language-server/test/html/completions.test.ts b/packages/language-server/test/html/completions.test.ts index 9c184178..e6a4b45b 100644 --- a/packages/language-server/test/html/completions.test.ts +++ b/packages/language-server/test/html/completions.test.ts @@ -1,17 +1,16 @@ import { Position } from '@volar/language-server'; -import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { describe } from 'mocha'; -import { getLanguageServer } from '../server.js'; +import { getLanguageServer, type LanguageServer } from '../server.js'; describe('HTML - Completions', () => { - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can provide completions for HTML tags zzz', async () => { - const document = await serverHandle.openUntitledDocument(` { }); it('Can provide completions for HTML attributes', async () => { - const document = await serverHandle.openUntitledDocument(`
{ - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can provide hover for HTML tags', async () => { - const document = await serverHandle.openUntitledDocument(` { - const document = await serverHandle.openUntitledDocument(`
{ - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can format document', async () => { - const document = await serverHandle.openUntitledDocument(`---\n\n\n---`, 'astro'); - const formatEdits = await serverHandle.sendDocumentFormattingRequest(document.uri, { + const document = await languageServer.openFakeDocument(`---\n\n\n---`, 'astro'); + const formatEdits = await languageServer.handle.sendDocumentFormattingRequest(document.uri, { tabSize: 2, insertSpaces: true, }); diff --git a/packages/language-server/test/server.ts b/packages/language-server/test/server.ts index 291473f9..646acf45 100644 --- a/packages/language-server/test/server.ts +++ b/packages/language-server/test/server.ts @@ -1,14 +1,22 @@ /* eslint-disable no-console */ import { LanguageServerHandle, startLanguageServer } from '@volar/test-utils'; +import { createHash } from 'node:crypto'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import * as protocol from 'vscode-languageserver-protocol/node'; +import type { TextDocument } from 'vscode-languageserver-textdocument'; import { URI } from 'vscode-uri'; let serverHandle: LanguageServerHandle | undefined; let initializeResult: protocol.InitializeResult | undefined; -export async function getLanguageServer() { +export type LanguageServer = { + handle: LanguageServerHandle; + initializeResult: protocol.InitializeResult; + openFakeDocument: (content: string, languageId: string) => Promise; +}; + +export async function getLanguageServer(): Promise { if (!serverHandle) { serverHandle = startLanguageServer( path.resolve('./bin/nodeServer.js'), @@ -41,8 +49,14 @@ export async function getLanguageServer() { } return { - serverHandle: serverHandle, + handle: serverHandle, initializeResult: initializeResult, - connection: serverHandle.connection, + openFakeDocument: async (content: string, languageId: string) => { + const hash = createHash('sha256').update(content).digest('base64url'); + const uri = URI.file(`does-not-exists-${hash}-.astro`).toString(); + const textDocument = await serverHandle!.openInMemoryDocument(uri, languageId, content); + + return textDocument; + }, }; } diff --git a/packages/language-server/test/takedown.ts b/packages/language-server/test/takedown.ts index 80dc2b9c..e0722d59 100644 --- a/packages/language-server/test/takedown.ts +++ b/packages/language-server/test/takedown.ts @@ -1,5 +1,5 @@ import { getLanguageServer } from './server.js'; export async function mochaGlobalTeardown() { const languageServer = await getLanguageServer(); - languageServer.connection.dispose(); + languageServer.handle.connection.dispose(); } diff --git a/packages/language-server/test/typescript-addons/completions.test.ts b/packages/language-server/test/typescript-addons/completions.test.ts index e6a19192..a18f3a06 100644 --- a/packages/language-server/test/typescript-addons/completions.test.ts +++ b/packages/language-server/test/typescript-addons/completions.test.ts @@ -1,16 +1,16 @@ import { Position } from '@volar/language-server'; -import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { getLanguageServer } from '../server.js'; +import { getLanguageServer, type LanguageServer } from '../server.js'; describe('TypeScript Addons - Completions', async () => { - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; + + before(async () => (languageServer = await getLanguageServer())); - before(async () => ({ serverHandle } = await getLanguageServer())); it('Can provide neat snippets', async () => { - const document = await serverHandle.openUntitledDocument('---\nprerender\n---', 'astro'); - const completions = await serverHandle.sendCompletionRequest( + const document = await languageServer.openFakeDocument('---\nprerender\n---', 'astro'); + const completions = await languageServer.handle.sendCompletionRequest( document.uri, Position.create(1, 10) ); diff --git a/packages/language-server/test/typescript/completions.test.ts b/packages/language-server/test/typescript/completions.test.ts index 19e0f6f3..b9d2d897 100644 --- a/packages/language-server/test/typescript/completions.test.ts +++ b/packages/language-server/test/typescript/completions.test.ts @@ -1,17 +1,16 @@ import { Position } from '@volar/language-server'; -import type { LanguageServerHandle } from '@volar/test-utils'; import { expect } from 'chai'; import { before, describe, it } from 'mocha'; -import { getLanguageServer } from '../server.js'; +import { getLanguageServer, type LanguageServer } from '../server.js'; describe('TypeScript - Completions', async () => { - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can get completions in the frontmatter', async () => { - const document = await serverHandle.openUntitledDocument('---\nc\n---', 'astro'); - const completions = await serverHandle.sendCompletionRequest( + const document = await languageServer.openFakeDocument('---\nc\n---', 'astro'); + const completions = await languageServer.handle.sendCompletionRequest( document.uri, Position.create(1, 1) ); @@ -20,8 +19,8 @@ describe('TypeScript - Completions', async () => { }); it('Can get completions in the template', async () => { - const document = await serverHandle.openUntitledDocument('{c}', 'astro'); - const completions = await serverHandle.sendCompletionRequest( + const document = await languageServer.openFakeDocument('{c}', 'astro'); + const completions = await languageServer.handle.sendCompletionRequest( document.uri, Position.create(0, 1) ); @@ -30,8 +29,8 @@ describe('TypeScript - Completions', async () => { }); it('sort completions starting with `astro:` higher than other imports', async () => { - const document = await serverHandle.openUntitledDocument(' { - let serverHandle: LanguageServerHandle; + let languageServer: LanguageServer; - before(async () => ({ serverHandle } = await getLanguageServer())); + before(async () => (languageServer = await getLanguageServer())); it('Can get diagnostics in the frontmatter', async () => { - const document = await serverHandle.openUntitledDocument('---\nNotAThing\n---', 'astro'); - const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + const document = await languageServer.openFakeDocument('---\nNotAThing\n---', 'astro'); + const diagnostics = (await languageServer.handle.sendDocumentDiagnosticRequest( document.uri )) as FullDocumentDiagnosticReport; @@ -37,8 +36,8 @@ describe('TypeScript - Diagnostics', async () => { }); it('Can get diagnostics in the template', async () => { - const document = await serverHandle.openUntitledDocument('---\n\n---\n{nope}', 'astro'); - const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + const document = await languageServer.openFakeDocument('---\n\n---\n{nope}', 'astro'); + const diagnostics = (await languageServer.handle.sendDocumentDiagnosticRequest( document.uri )) as FullDocumentDiagnosticReport; expect(diagnostics.items).length(1); @@ -55,11 +54,11 @@ describe('TypeScript - Diagnostics', async () => { }); it('shows enhanced diagnostics', async () => { - const document = await serverHandle.openUntitledDocument( + const document = await languageServer.openFakeDocument( '---\nimport {getEntryBySlug} from "astro:content";getEntryBySlug\n---\n
', 'astro' ); - const diagnostics = (await serverHandle.sendDocumentDiagnosticRequest( + const diagnostics = (await languageServer.handle.sendDocumentDiagnosticRequest( document.uri )) as FullDocumentDiagnosticReport; expect(diagnostics.items).length(2); diff --git a/packages/ts-plugin/package.json b/packages/ts-plugin/package.json index 33cf0c2d..178cacc9 100644 --- a/packages/ts-plugin/package.json +++ b/packages/ts-plugin/package.json @@ -27,8 +27,8 @@ "author": "withastro", "license": "MIT", "dependencies": { - "@volar/language-core": "2.0.0-alpha.5", - "@volar/typescript": "2.0.0-alpha.5", + "@volar/language-core": "2.0.0-alpha.6", + "@volar/typescript": "2.0.0-alpha.6", "@astrojs/compiler": "^2.2.2", "@jridgewell/sourcemap-codec": "^1.4.15", "semver": "^7.3.8", diff --git a/packages/vscode/package.json b/packages/vscode/package.json index ab10eee1..1a8efced 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -224,8 +224,8 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", "@types/vscode": "^1.82.0", - "@volar/language-server": "2.0.0-alpha.5", - "@volar/vscode": "2.0.0-alpha.5", + "@volar/language-server": "2.0.0-alpha.6", + "@volar/vscode": "2.0.0-alpha.6", "@vscode/test-electron": "^2.3.2", "@vscode/vsce": "latest", "esbuild": "^0.17.19", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74dcd192..bf22ac6f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,41 +88,41 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/kit': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5(typescript@5.2.2) + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6(typescript@5.2.2) '@volar/language-core': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@volar/language-server': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@volar/language-service': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@volar/typescript': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 fast-glob: specifier: ^3.2.12 version: 3.2.12 volar-service-css: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6) volar-service-emmet: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6) volar-service-html: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6) volar-service-prettier: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5)(prettier@3.0.0) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6)(prettier@3.0.0) volar-service-typescript: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5)(@volar/typescript@2.0.0-alpha.5) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6)(@volar/typescript@2.0.0-alpha.6) volar-service-typescript-twoslash-queries: specifier: 0.0.21 - version: 0.0.21(@volar/language-service@2.0.0-alpha.5) + version: 0.0.21(@volar/language-service@2.0.0-alpha.6) vscode-html-languageservice: specifier: ^5.1.0 version: 5.1.0 @@ -146,8 +146,8 @@ importers: specifier: ^18.17.8 version: 18.17.8 '@volar/test-utils': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 astro: specifier: ^3.3.0 version: 3.3.0(@types/node@18.17.8)(typescript@5.2.2) @@ -179,11 +179,11 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/language-core': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@volar/typescript': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 semver: specifier: ^7.3.8 version: 7.5.4 @@ -244,17 +244,17 @@ importers: specifier: ^1.82.0 version: 1.83.0 '@volar/language-server': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@volar/vscode': - specifier: 2.0.0-alpha.5 - version: 2.0.0-alpha.5 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@vscode/test-electron': specifier: ^2.3.2 version: 2.3.2 '@vscode/vsce': specifier: latest - version: 2.22.0 + version: 2.21.1 esbuild: specifier: ^0.17.19 version: 0.17.19 @@ -2071,31 +2071,31 @@ packages: optional: true dev: true - /@volar/kit@2.0.0-alpha.5(typescript@5.2.2): - resolution: {integrity: sha512-B77u33bBbyYxxDD8fLizhVJQbSkPwSdopi98UHUayw86fLkK2vRExOcylakbeG2qQv2w0F/LsZ9baJgCAxvO2Q==} + /@volar/kit@2.0.0-alpha.6(typescript@5.2.2): + resolution: {integrity: sha512-aW7k642T4Niw1Kr5i5A0qSSmdoIYmdp/sL58+lOFH2wrvyGDBZv7S9hOhyRJNEeygVioiEKsiAP0+8PTXt7teA==} peerDependencies: typescript: '*' dependencies: - '@volar/language-service': 2.0.0-alpha.5 - '@volar/typescript': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 + '@volar/typescript': 2.0.0-alpha.6 typesafe-path: 0.2.2 typescript: 5.2.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /@volar/language-core@2.0.0-alpha.5: - resolution: {integrity: sha512-aN75cedk7+fkzP1A5+jEV5F1MY9oWE6MD0d/9cYEBqZ1dU85VSn1+KcTiHRh0UP3/y+ByClKopP30WV4z+q92A==} + /@volar/language-core@2.0.0-alpha.6: + resolution: {integrity: sha512-qUaDx05mZAE6kpSleXUw0qIBog6GOE5Umwx59fdYOEeiLrgND7vOt5FNVQ3xpqDwpSdQtzuVOjq7Tm+t72gIww==} dependencies: - '@volar/source-map': 2.0.0-alpha.5 + '@volar/source-map': 2.0.0-alpha.6 - /@volar/language-server@2.0.0-alpha.5: - resolution: {integrity: sha512-jUwt+XMTOq9NaeDJRJiQkCSsjqMQU/m7ZNzt7cAuzpGokdNuTUu0Omox/rS4i+RnOOGe4b3SVe2pDdj9Jc4WbQ==} + /@volar/language-server@2.0.0-alpha.6: + resolution: {integrity: sha512-1l4zirZdWCbUnKz1kAp8e89xCv8MOQAZr5cK0XRjkgt2WlfdFWLeXYa/D2+cz8lofyOWzFpzJuJt7fVLrK56CQ==} dependencies: - '@volar/language-core': 2.0.0-alpha.5 - '@volar/language-service': 2.0.0-alpha.5 - '@volar/snapshot-document': 2.0.0-alpha.5 - '@volar/typescript': 2.0.0-alpha.5 + '@volar/language-core': 2.0.0-alpha.6 + '@volar/language-service': 2.0.0-alpha.6 + '@volar/snapshot-document': 2.0.0-alpha.6 + '@volar/typescript': 2.0.0-alpha.6 '@vscode/l10n': 0.0.16 path-browserify: 1.0.1 request-light: 0.7.0 @@ -2104,43 +2104,43 @@ packages: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/language-service@2.0.0-alpha.5: - resolution: {integrity: sha512-YiaayV1oBKNrMph48wPeZpV67DDQzc87cHRhsWxcrXcFTxsw0KO4M1ldHnQzGAndhDFQi4RLd2o2sXUC+5J52Q==} + /@volar/language-service@2.0.0-alpha.6: + resolution: {integrity: sha512-KHtd+NuYs2ssxUhZkojLgvFmlji4XrG5DzYmSdLuT/pj/TWvchWwAG/HTLk6S4Fk4JZVoKOwsS9zm5xPZWJajQ==} dependencies: - '@volar/language-core': 2.0.0-alpha.5 + '@volar/language-core': 2.0.0-alpha.6 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/snapshot-document@2.0.0-alpha.5: - resolution: {integrity: sha512-BDpNhSbnVJ+rdK5GtgS63nz/UMRvxthUs/McG0B3nbfS5uPRPzsfe9NnmYp71aW0mjvFEfGiMsOBAyi1+YV3zQ==} + /@volar/snapshot-document@2.0.0-alpha.6: + resolution: {integrity: sha512-ogzmtMpIIl8tq5kJIg+0zfS+0JGc6ugTxjLPjJ3LTizNzXkjL0g5HlaewOLfhRL+07ZsZqcT4BiAD9fH4enIsA==} dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - /@volar/source-map@2.0.0-alpha.5: - resolution: {integrity: sha512-ZOUTOVr1T+cjbLdKqzGlTpG3oiCk1v7YHWWnUKsRCAe/V2NaFA6Y6TMJUAwIwo3+l1DEbpqyQlqeg4q/jZ9Qyw==} + /@volar/source-map@2.0.0-alpha.6: + resolution: {integrity: sha512-zPJbtVDiuWDLYDxtiSbwpcIH9tDnhSLpMZimZkmPAaQ8Lqb4VXTiGft4dPxMkaZfQDjwxUuw/SKV8K8EtNJ0WQ==} dependencies: muggle-string: 0.4.0 - /@volar/test-utils@2.0.0-alpha.5: - resolution: {integrity: sha512-IzKOb+cDMTkn/7SaII5cry2JJAw5uvgE7ak51EjtEr0dk/EMMfPljEWEHBd2Gdchds1iW/LzlI1LkSda/WCr4A==} + /@volar/test-utils@2.0.0-alpha.6: + resolution: {integrity: sha512-+DTGstTjDlyg02rkvjAUBzHrqAxB5nm2FfnfH9cM/8q6kq1cm9MJPFD/uB9eNIc/b5j6f6NFSRQMH8KaGbBwhQ==} dependencies: - '@volar/language-server': 2.0.0-alpha.5 + '@volar/language-server': 2.0.0-alpha.6 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: true - /@volar/typescript@2.0.0-alpha.5: - resolution: {integrity: sha512-27nguq6k0Y9wv3lyf2gM20JTbxx/SOXDpUBoQ7Z1tLeOUZ50b3Ru+3rQxKf4XjHIIsVaHetG4FkL9qfXvHxAEg==} + /@volar/typescript@2.0.0-alpha.6: + resolution: {integrity: sha512-NEv8VE7xKAhQH76lv6P3uh5Q8zsse47N6mhC17pI+noB+MsBLPHS62TGTypbpgXPjrIXnnXahKpKEzddVS9X9w==} dependencies: - '@volar/language-core': 2.0.0-alpha.5 + '@volar/language-core': 2.0.0-alpha.6 path-browserify: 1.0.1 - /@volar/vscode@2.0.0-alpha.5: - resolution: {integrity: sha512-qxuYZe+9y0mLvsxTSOFzTbIxpGkDohFLwOd2p2/nSHb31g9mI46+JHt2eVFNyzecFnm33f9cXBb9LPG41xE6IQ==} + /@volar/vscode@2.0.0-alpha.6: + resolution: {integrity: sha512-N/2neN5OtkWsBmtNHXa0IJ9oRVZJMAmJ5qxDQ1madfEoW00VuxOipiKjPrAuPKiT9G9mMlAio4xrAJnZRDfy8w==} dependencies: - '@volar/language-server': 2.0.0-alpha.5 + '@volar/language-server': 2.0.0-alpha.6 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -2171,8 +2171,8 @@ packages: - supports-color dev: true - /@vscode/vsce@2.22.0: - resolution: {integrity: sha512-8df4uJiM3C6GZ2Sx/KilSKVxsetrTBBIUb3c0W4B1EWHcddioVs5mkyDKtMNP0khP/xBILVSzlXxhV+nm2rC9A==} + /@vscode/vsce@2.21.1: + resolution: {integrity: sha512-f45/aT+HTubfCU2oC7IaWnH9NjOWp668ML002QiFObFRVUCoLtcwepp9mmql/ArFUy+HCHp54Xrq4koTcOD6TA==} engines: {node: '>= 14'} hasBin: true dependencies: @@ -7095,7 +7095,7 @@ packages: vite: 4.4.11(@types/node@18.17.8) dev: true - /volar-service-css@0.0.21(@volar/language-service@2.0.0-alpha.5): + /volar-service-css@0.0.21(@volar/language-service@2.0.0-alpha.6): resolution: {integrity: sha512-GSn879I7v+gPqJQntoi0Qdl72w1TYegoa2JFm1GI60YiSpPAoQ745JWFElL6AYX0FL9VqTfa9J6Y9fCUP6ZO6A==} peerDependencies: '@volar/language-service': next @@ -7103,12 +7103,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 vscode-css-languageservice: 6.2.10 vscode-uri: 3.0.8 dev: false - /volar-service-emmet@0.0.21(@volar/language-service@2.0.0-alpha.5): + /volar-service-emmet@0.0.21(@volar/language-service@2.0.0-alpha.6): resolution: {integrity: sha512-JWmyZxAyAMU92RcGmwdsxixmO0UHD/n1N75Io4rxH0VxnUbrnbMh+20CCB5RTXJQhnwkINbIxFcHfe4caHWgDg==} peerDependencies: '@volar/language-service': next @@ -7116,12 +7116,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 '@vscode/emmet-helper': 2.9.2 - volar-service-html: 0.0.21(@volar/language-service@2.0.0-alpha.5) + volar-service-html: 0.0.21(@volar/language-service@2.0.0-alpha.6) dev: false - /volar-service-html@0.0.21(@volar/language-service@2.0.0-alpha.5): + /volar-service-html@0.0.21(@volar/language-service@2.0.0-alpha.6): resolution: {integrity: sha512-bDZoOOwrF+IJw79qxMMeArrBR/FvxP4Lb15aAP9g3hpTcbvoUMatTuGauzMTsBbz+qt+Ae75zM+1xRmOEWfUqw==} peerDependencies: '@volar/language-service': next @@ -7129,12 +7129,12 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 vscode-html-languageservice: 5.1.0 vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.21(@volar/language-service@2.0.0-alpha.5)(prettier@3.0.0): + /volar-service-prettier@0.0.21(@volar/language-service@2.0.0-alpha.6)(prettier@3.0.0): resolution: {integrity: sha512-rKB5HpNpxWA7yv5ZrUInaw5FRBxCaV32OkauP8WB9vZt4L+nrJ/qmicE0I3jgA5984xk3m25moJQ7ovCkx9VKw==} peerDependencies: '@volar/language-service': next @@ -7145,11 +7145,11 @@ packages: prettier: optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 prettier: 3.0.0 dev: false - /volar-service-typescript-twoslash-queries@0.0.21(@volar/language-service@2.0.0-alpha.5): + /volar-service-typescript-twoslash-queries@0.0.21(@volar/language-service@2.0.0-alpha.6): resolution: {integrity: sha512-ZrqkbUkDKSv8euHmqVfGgrchpdXMIX0V3+tj1xzd3d5PSMnZI+tqV+dIseAb7XF3eEjO+JInBGnsccwp6t5+Ow==} peerDependencies: '@volar/language-service': next @@ -7157,10 +7157,10 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 dev: false - /volar-service-typescript@0.0.21(@volar/language-service@2.0.0-alpha.5)(@volar/typescript@2.0.0-alpha.5): + /volar-service-typescript@0.0.21(@volar/language-service@2.0.0-alpha.6)(@volar/typescript@2.0.0-alpha.6): resolution: {integrity: sha512-5IGcQxdXPmqCwwZxpy3nWw7hA3/5pRuKsWGJaWI7KsydZB8oqmJmdozX4rr/uLl5kdu5+ceQOmnUghl0IWM0WQ==} peerDependencies: '@volar/language-service': next @@ -7169,8 +7169,8 @@ packages: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.0.0-alpha.5 - '@volar/typescript': 2.0.0-alpha.5 + '@volar/language-service': 2.0.0-alpha.6 + '@volar/typescript': 2.0.0-alpha.6 path-browserify: 1.0.1 semver: 7.5.4 typescript-auto-import-cache: 0.3.0