diff --git a/packages/language-service/index.ts b/packages/language-service/index.ts
index ef4a049fd7..9e8e9ae624 100644
--- a/packages/language-service/index.ts
+++ b/packages/language-service/index.ts
@@ -71,6 +71,7 @@ export function createVueServicePlugins(
languageService: context.inject<(import('volar-service-typescript').Provide), 'typescript/languageService'>('typescript/languageService'),
vueOptions: getVueOptions(context.env),
isTsPlugin: false,
+ getFileId: context.env.typescript!.fileNameToUri,
};
return {
async collectExtractProps(...args) {
diff --git a/packages/typescript-plugin/lib/common.ts b/packages/typescript-plugin/lib/common.ts
index c75ea86354..15567245f8 100644
--- a/packages/typescript-plugin/lib/common.ts
+++ b/packages/typescript-plugin/lib/common.ts
@@ -32,7 +32,7 @@ export function decorateLanguageServiceForVue(
for (const ext of vueOptions.extensions) {
const suffix = capitalize(ext.substring('.'.length)); // .vue -> Vue
if (item.source.endsWith(ext) && item.name.endsWith(suffix)) {
- item.name = item.name.slice(0, -suffix.length);
+ item.name = capitalize(item.name.slice(0, -suffix.length));
if (item.insertText) {
// #2286
item.insertText = item.insertText.replace(`${suffix}$1`, '$1');
diff --git a/packages/typescript-plugin/lib/requests/collectExtractProps.ts b/packages/typescript-plugin/lib/requests/collectExtractProps.ts
index 9ef7b01317..96bf039764 100644
--- a/packages/typescript-plugin/lib/requests/collectExtractProps.ts
+++ b/packages/typescript-plugin/lib/requests/collectExtractProps.ts
@@ -7,13 +7,14 @@ export function collectExtractProps(
languageService: ts.LanguageService;
files: FileRegistry;
isTsPlugin: boolean,
+ getFileId: (fileName: string) => string,
},
fileName: string,
templateCodeRange: [number, number],
) {
- const { typescript: ts, languageService, files, isTsPlugin } = this;
+ const { typescript: ts, languageService, files, isTsPlugin, getFileId } = this;
- const volarFile = files.get(fileName);
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof VueGeneratedCode)) {
return;
}
diff --git a/packages/typescript-plugin/lib/requests/componentInfos.ts b/packages/typescript-plugin/lib/requests/componentInfos.ts
index d69f174326..e7eccff4dc 100644
--- a/packages/typescript-plugin/lib/requests/componentInfos.ts
+++ b/packages/typescript-plugin/lib/requests/componentInfos.ts
@@ -8,13 +8,14 @@ export function getComponentProps(
languageService: ts.LanguageService;
files: vue.FileRegistry;
vueOptions: vue.VueCompilerOptions,
+ getFileId: (fileName: string) => string,
},
fileName: string,
tag: string,
requiredOnly = false,
) {
- const { typescript: ts, files, vueOptions, languageService } = this;
- const volarFile = files.get(fileName);
+ const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
return;
}
@@ -96,12 +97,13 @@ export function getComponentEvents(
languageService: ts.LanguageService;
files: vue.FileRegistry;
vueOptions: vue.VueCompilerOptions,
+ getFileId: (fileName: string) => string,
},
fileName: string,
tag: string,
) {
- const { typescript: ts, files, vueOptions, languageService } = this;
- const volarFile = files.get(fileName);
+ const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
return;
}
@@ -176,11 +178,12 @@ export function getTemplateContextProps(
typescript: typeof import('typescript');
languageService: ts.LanguageService;
files: vue.FileRegistry;
+ getFileId: (fileName: string) => string,
},
fileName: string,
) {
- const { typescript: ts, files, languageService } = this;
- const volarFile = files.get(fileName);
+ const { typescript: ts, files, languageService, getFileId } = this;
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
return;
}
@@ -198,11 +201,12 @@ export function getComponentNames(
languageService: ts.LanguageService;
files: vue.FileRegistry;
vueOptions: vue.VueCompilerOptions,
+ getFileId: (fileName: string) => string,
},
fileName: string,
) {
- const { typescript: ts, files, vueOptions, languageService } = this;
- const volarFile = files.get(fileName);
+ const { typescript: ts, files, vueOptions, languageService, getFileId } = this;
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
return;
}
@@ -237,12 +241,13 @@ export function getElementAttrs(
typescript: typeof import('typescript');
languageService: ts.LanguageService;
files: vue.FileRegistry;
+ getFileId: (fileName: string) => string,
},
fileName: string,
tagName: string,
) {
- const { typescript: ts, files, languageService } = this;
- const volarFile = files.get(fileName);
+ const { typescript: ts, files, languageService, getFileId } = this;
+ const volarFile = files.get(getFileId(fileName));
if (!(volarFile?.generated?.code instanceof vue.VueGeneratedCode)) {
return;
}
diff --git a/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts b/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts
index 43a2eba3c8..a034c71d56 100644
--- a/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts
+++ b/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts
@@ -7,14 +7,15 @@ export function getPropertiesAtLocation(
languageService: ts.LanguageService;
files: FileRegistry;
isTsPlugin: boolean,
+ getFileId: (fileName: string) => string,
},
fileName: string,
position: number,
) {
- const { languageService, files, typescript: ts, isTsPlugin } = this;
+ const { languageService, files, typescript: ts, isTsPlugin, getFileId } = this;
// mapping
- const file = files.get(fileName);
+ const file = files.get(getFileId(fileName));
if (file?.generated) {
const virtualScript = file.generated.languagePlugin.typescript?.getScript(file.generated.code);
if (!virtualScript) {
diff --git a/packages/typescript-plugin/lib/server.ts b/packages/typescript-plugin/lib/server.ts
index 521a84efa3..a5bb025653 100644
--- a/packages/typescript-plugin/lib/server.ts
+++ b/packages/typescript-plugin/lib/server.ts
@@ -50,6 +50,7 @@ export function startNamedPipeServer(
files: project.files,
vueOptions: project.vueOptions,
isTsPlugin: true,
+ getFileId: (fileName: string) => fileName,
};
if (request.type === 'containsFile') {
const result = !!getProject(fileName);
diff --git a/test-workspace/language-service/complete/#2511/input/entry.vue b/test-workspace/language-service/complete/#2511/input/entry.vue
index 3720634d8c..8f093eed73 100644
--- a/test-workspace/language-service/complete/#2511/input/entry.vue
+++ b/test-workspace/language-service/complete/#2511/input/entry.vue
@@ -1,4 +1,4 @@
diff --git a/test-workspace/language-service/complete/#2511/output/entry.vue b/test-workspace/language-service/complete/#2511/output/entry.vue
index f8ba73815f..223cf4517a 100644
--- a/test-workspace/language-service/complete/#2511/output/entry.vue
+++ b/test-workspace/language-service/complete/#2511/output/entry.vue
@@ -1,4 +1,4 @@
diff --git a/test-workspace/language-service/complete/component-auto-import/input/entry.vue b/test-workspace/language-service/complete/component-auto-import/input/entry.vue
index c60258d8c7..dac432aed0 100644
--- a/test-workspace/language-service/complete/component-auto-import/input/entry.vue
+++ b/test-workspace/language-service/complete/component-auto-import/input/entry.vue
@@ -3,5 +3,5 @@
-
+
diff --git a/test-workspace/language-service/complete/component-auto-import/output/entry.vue b/test-workspace/language-service/complete/component-auto-import/output/entry.vue
index 25cf2f4ef7..1072e574b6 100644
--- a/test-workspace/language-service/complete/component-auto-import/output/entry.vue
+++ b/test-workspace/language-service/complete/component-auto-import/output/entry.vue
@@ -5,5 +5,5 @@ import ComponentForAutoImport from './component-for-auto-import.vue';
-
+