diff --git a/.changeset/kind-pears-behave.md b/.changeset/kind-pears-behave.md index d34012a6991e..3714bd4d60ac 100644 --- a/.changeset/kind-pears-behave.md +++ b/.changeset/kind-pears-behave.md @@ -1,5 +1,6 @@ --- 'astro': major +'@astrojs/language-server': patch --- Removes `Astro.glob()` diff --git a/packages/language-tools/language-server/src/check.ts b/packages/language-tools/language-server/src/check.ts index 0eaa8687b111..5ff6a1c74146 100644 --- a/packages/language-tools/language-server/src/check.ts +++ b/packages/language-tools/language-server/src/check.ts @@ -141,7 +141,7 @@ export class AstroCheck { getSvelteLanguagePlugin(), getVueLanguagePlugin(), ]; - const services = [...createTypeScriptServices(this.ts), createAstroService(this.ts)]; + const services = [...createTypeScriptServices(this.ts), createAstroService()]; if (tsconfigPath) { const includeProjectReference = false; // #920 diff --git a/packages/language-tools/language-server/src/languageServerPlugin.ts b/packages/language-tools/language-server/src/languageServerPlugin.ts index 4b0dff85d9d6..82322afaa00e 100644 --- a/packages/language-tools/language-server/src/languageServerPlugin.ts +++ b/packages/language-tools/language-server/src/languageServerPlugin.ts @@ -48,7 +48,7 @@ export function getLanguageServicePlugins( }), createTypeScriptTwoSlashService(ts), createTypescriptAddonsService(), - createAstroService(ts), + createAstroService(), getPrettierService(), createYAMLService(collectionConfig), ]; diff --git a/packages/language-tools/language-server/src/plugins/astro.ts b/packages/language-tools/language-server/src/plugins/astro.ts index e6e820eda994..2346a092ebbe 100644 --- a/packages/language-tools/language-server/src/plugins/astro.ts +++ b/packages/language-tools/language-server/src/plugins/astro.ts @@ -1,7 +1,5 @@ -import { dirname } from 'node:path'; import type { DiagnosticMessage } from '@astrojs/compiler/types'; import type { - CodeLens, CompletionItem, Diagnostic, LanguageServicePlugin, @@ -14,14 +12,11 @@ import { Range, TextEdit, } from '@volar/language-server'; -import fg from 'fast-glob'; -import type { Provide } from 'volar-service-typescript'; import type { TextDocument } from 'vscode-html-languageservice'; import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../core/index.js'; -import { isJSDocument } from './utils.js'; -export const create = (ts: typeof import('typescript')): LanguageServicePlugin => { +export const create = (): LanguageServicePlugin => { return { capabilities: { completionProvider: { @@ -31,7 +26,6 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin = interFileDependencies: false, workspaceDiagnostics: false, }, - codeLensProvider: {}, }, create(context): LanguageServicePluginInstance { return { @@ -76,67 +70,11 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin = }; } }, - provideCodeLenses(document, token) { - if (token.isCancellationRequested) return; - if (!isJSDocument(document.languageId)) return; - - if (!context.project.typescript) return; - - const { uriConverter } = context.project.typescript; - const languageService = context.inject( - 'typescript/languageService', - ); - if (!languageService) return; - - const tsProgram = languageService.getProgram(); - if (!tsProgram) return; - - const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); - if (!decoded) return; - - const globcodeLens: CodeLens[] = []; - const sourceFile = tsProgram.getSourceFile(decoded[0].fsPath)!; - - function walk() { - return ts.forEachChild(sourceFile, function cb(node): void { - if (ts.isCallExpression(node) && node.expression.getText() === 'Astro.glob') { - const globArgument = node.arguments.at(0); - - if (globArgument && decoded) { - globcodeLens.push( - getGlobResultAsCodeLens( - globArgument.getText().slice(1, -1), - dirname(uriConverter.asFileName(decoded[0])), - document.positionAt(node.arguments.pos), - ), - ); - } - } - return ts.forEachChild(node, cb); - }); - } - - walk(); - - return globcodeLens; - }, }; }, }; }; -function getGlobResultAsCodeLens(globText: string, dir: string, position: Position) { - const globResult = fg.sync(globText, { - cwd: dir, - onlyFiles: true, - }); - - return { - range: Range.create(position, position), - command: { title: `Matches ${globResult.length} files`, command: '' }, - }; -} - function getFrontmatterCompletion( file: AstroVirtualCode, document: TextDocument, diff --git a/packages/language-tools/language-server/test/astro/codelens.test.ts b/packages/language-tools/language-server/test/astro/codelens.test.ts deleted file mode 100644 index d6c82f09c91f..000000000000 --- a/packages/language-tools/language-server/test/astro/codelens.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import assert from 'node:assert'; -import { before, describe, it } from 'node:test'; -import * as _ from '@volar/language-server/node.js'; -import type { LanguageServer } from '../server.ts'; -import { getLanguageServer } from '../server.ts'; - -describe('Astro - Code Lens', () => { - let languageServer: LanguageServer; - - before(async () => (languageServer = await getLanguageServer())); - - it('Can provide a codelens for Astro.glob', async () => { - const document = await languageServer.openFakeDocument('---\nAstro.glob(".");\n---\n', 'astro'); - - const codeLens = await languageServer.handle.connection.sendRequest(_.CodeLensRequest.type, { - textDocument: { uri: document.uri }, - }); - - assert.ok(codeLens); - assert.strictEqual(codeLens.length, 1); - }); -}); diff --git a/packages/language-tools/language-server/test/misc/init.test.ts b/packages/language-tools/language-server/test/misc/init.test.ts index 2d804dc575d0..c423264829a2 100644 --- a/packages/language-tools/language-server/test/misc/init.test.ts +++ b/packages/language-tools/language-server/test/misc/init.test.ts @@ -31,7 +31,6 @@ describe('Initialize', async () => { ], resolveProvider: true, }, - codeLensProvider: {}, colorProvider: true, completionProvider: { resolveProvider: true,