diff --git a/extensions/vscode-vue-language-features/package.json b/extensions/vscode-vue-language-features/package.json index f6b258bc1..3a985145d 100644 --- a/extensions/vscode-vue-language-features/package.json +++ b/extensions/vscode-vue-language-features/package.json @@ -343,6 +343,11 @@ "default": false, "description": "Ignore project references settings of tsconfig in language server for resolve issue #1916." }, + "volar.vueserver.reverseConfigFilePriority": { + "type": "boolean", + "default": false, + "description": "Reverse priority for tsconfig pickup." + }, "volar.vueserver.additionalExtensions": { "type": "array", "items": { diff --git a/extensions/vscode-vue-language-features/src/common.ts b/extensions/vscode-vue-language-features/src/common.ts index ed94e7a9a..d007d12e0 100644 --- a/extensions/vscode-vue-language-features/src/common.ts +++ b/extensions/vscode-vue-language-features/src/common.ts @@ -126,6 +126,7 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang e.affectsConfiguration('volar.vueserver.maxOldSpaceSize') || e.affectsConfiguration('volar.vueserver.diagnosticModel') || e.affectsConfiguration('volar.vueserver.noProjectReferences') + || e.affectsConfiguration('volar.vueserver.reverseConfigFilePriority') || e.affectsConfiguration('volar.vueserver.petiteVue.processHtmlFile') || e.affectsConfiguration('volar.vueserver.vitePress.processMdFile') || e.affectsConfiguration('volar.vueserver.additionalExtensions') @@ -204,6 +205,10 @@ export function noProjectReferences() { return !!vscode.workspace.getConfiguration('volar').get('vueserver.noProjectReferences'); } +export function reverseConfigFilePriority() { + return !!vscode.workspace.getConfiguration('volar').get('vueserver.reverseConfigFilePriority'); +} + export function diagnosticModel() { return vscode.workspace.getConfiguration('volar').get<'push' | 'pull'>('vueserver.diagnosticModel'); } @@ -283,6 +288,7 @@ function getInitializationOptions( customBlockSchemaUrls: vscode.workspace.getConfiguration('volar').get>('vueserver.json.customBlockSchemaUrls') }, noProjectReferences: noProjectReferences(), + reverseConfigFilePriority: reverseConfigFilePriority(), additionalExtensions: additionalExtensions() }; return initializationOptions; diff --git a/packages/language-server/src/types.ts b/packages/language-server/src/types.ts index 4e1770e7e..64134e549 100644 --- a/packages/language-server/src/types.ts +++ b/packages/language-server/src/types.ts @@ -112,6 +112,7 @@ export interface LanguageServerInitializationOptions { */ cancellationPipeName?: string; noProjectReferences?: boolean; + reverseConfigFilePriority?: boolean; /** * Enable this option to make language server setup server capabilities based on client capabilities to support multiple servers. */ diff --git a/packages/language-server/src/utils/workspaceProjects.ts b/packages/language-server/src/utils/workspaceProjects.ts index 9c4766281..815941879 100644 --- a/packages/language-server/src/utils/workspaceProjects.ts +++ b/packages/language-server/src/utils/workspaceProjects.ts @@ -162,7 +162,11 @@ export async function createWorkspaceProjects( const project = await projects.pathGet(rootUri, rootTsConfig); if (project) { - const chains = await getReferencesChains(project.getParsedCommandLine(), rootTsConfig, []); + let chains = await getReferencesChains(project.getParsedCommandLine(), rootTsConfig, []); + + if (serverOptions.reverseConfigFilePriority) { + chains = chains.reverse(); + } for (const chain of chains) { for (let i = chain.length - 1; i >= 0; i--) {