diff --git a/packages/language-server/src/workspace-scanner.ts b/packages/language-server/src/workspace-scanner.ts index bec56201..fedfe15f 100644 --- a/packages/language-server/src/workspace-scanner.ts +++ b/packages/language-server/src/workspace-scanner.ts @@ -56,6 +56,7 @@ export default class WorkspaceScanner { try { let document: TextDocument | null | undefined = this.#ls.getCachedTextDocument(uri); + if (!document) { const content = await this.#fs.readFile(uri); @@ -63,10 +64,11 @@ export default class WorkspaceScanner { TextDocument.create(uri.toString(), "scss", 1, content), ); if (!document) return; - this.#ls.parseStylesheet(document); } + this.#ls.parseStylesheet(document); const links = await this.#ls.findDocumentLinks(document); + for (const link of links) { if ( !link.target || @@ -77,8 +79,17 @@ export default class WorkspaceScanner { continue; } + let uri = URI.parse(link.target); + let visited: TextDocument | null | undefined = + this.#ls.getCachedTextDocument(uri); + + if (visited) { + // avoid infinite loop if circular references + continue; + } + try { - await this.parse(URI.parse(link.target), depth + 1); + await this.parse(uri, depth + 1); } catch { // do nothing } diff --git a/packages/language-services/src/language-model-cache.ts b/packages/language-services/src/language-model-cache.ts index 23052e5c..587ed201 100644 --- a/packages/language-services/src/language-model-cache.ts +++ b/packages/language-services/src/language-model-cache.ts @@ -128,10 +128,6 @@ export class LanguageModelCache { return Object.values(this.#languageModels).map((cached) => cached.document); } - getCachedTextDocument(uri: string): TextDocument | undefined { - return this.#languageModels[uri]?.document; - } - has(uri: string) { return typeof this.#languageModels[uri] !== "undefined"; } diff --git a/packages/language-services/src/language-services.ts b/packages/language-services/src/language-services.ts index c5731c26..c9c64839 100644 --- a/packages/language-services/src/language-services.ts +++ b/packages/language-services/src/language-services.ts @@ -161,7 +161,7 @@ class LanguageServiceImpl implements LanguageService { } getCachedTextDocument(uri: URI): TextDocument | undefined { - return this.#cache.getCachedTextDocument(uri.toString()); + return this.#cache.getDocument(uri.toString()); } getColorPresentations(document: TextDocument, color: Color, range: Range) { diff --git a/vscode-extension/package.json b/vscode-extension/package.json index 61e40774..9689e340 100644 --- a/vscode-extension/package.json +++ b/vscode-extension/package.json @@ -131,7 +131,7 @@ "build": "webpack --mode development", "start:web": "vscode-test-web --browserType=chromium --extensionDevelopmentPath=.", "lint": "eslint \"**/*.ts\" --cache", - "test:e2e": "node ./test/e2e/runTest.js", + "test:e2e": "node ./test/e2e/runTest.js && node ./test/new-e2e/runTest.js", "pretest:web": "webpack --config ./webpack.test-web.config.js ", "test:web": "node ./test/web/runTest.js" }, @@ -141,4 +141,4 @@ "publisherId": "02638283-c13a-4acf-9f26-24bdcfdfce24", "isPreReleaseVersion": false } -} \ No newline at end of file +}