Skip to content

Commit 8865234

Browse files
committed
fix(component-meta): forceUseTs options not working
1 parent 5bb6803 commit 8865234

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

packages/component-meta/lib/base.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,16 @@ export function baseCreate(
171171
if (checkerOptions.forceUseTs) {
172172
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
173173
languageServiceHost.getScriptKind = fileName => {
174-
if (fileName.endsWith('.vue.js')) {
175-
return ts.ScriptKind.TS;
176-
}
177-
if (fileName.endsWith('.vue.jsx')) {
178-
return ts.ScriptKind.TSX;
174+
const scriptKind = getScriptKind!(fileName);
175+
if (vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext))) {
176+
if (scriptKind === ts.ScriptKind.JS) {
177+
return ts.ScriptKind.TS;
178+
}
179+
if (scriptKind === ts.ScriptKind.JSX) {
180+
return ts.ScriptKind.TSX;
181+
}
179182
}
180-
return getScriptKind!(fileName);
183+
return scriptKind;
181184
};
182185
}
183186

@@ -196,7 +199,11 @@ export function baseCreate(
196199
}
197200

198201
function getMetaFileName(fileName: string) {
199-
return (fileName.endsWith('.vue') ? fileName : fileName.substring(0, fileName.lastIndexOf('.'))) + '.meta.ts';
202+
return (
203+
vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext))
204+
? fileName
205+
: fileName.substring(0, fileName.lastIndexOf('.'))
206+
) + '.meta.ts';
200207
}
201208

202209
function getMetaScriptContent(fileName: string) {

packages/language-service/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export function getVueLanguageServicePlugins(
7979
createVueSfcPlugin(),
8080
createVueTwoslashQueriesPlugin(ts, getTsPluginClient),
8181
createVueDocumentLinksPlugin(),
82-
createVueDocumentDropPlugin(ts, getTsPluginClient),
82+
createVueDocumentDropPlugin(ts, getVueOptions, getTsPluginClient),
8383
createVueAutoDotValuePlugin(ts, getTsPluginClient),
8484
createVueAutoWrapParenthesesPlugin(ts),
8585
createVueAutoAddSpacePlugin(),

packages/language-service/lib/plugins/vue-document-drop.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import { VueVirtualCode, forEachEmbeddedCode } from '@vue/language-core';
1+
import { VueCompilerOptions, VueVirtualCode, forEachEmbeddedCode } from '@vue/language-core';
22
import { camelize, capitalize, hyphenate } from '@vue/shared';
33
import * as path from 'path-browserify';
44
import type * as vscode from 'vscode-languageserver-protocol';
55
import { createAddComponentToOptionEdit, getLastImportNode } from '../plugins/vue-extract-file';
6-
import { LanguageServicePlugin, LanguageServicePluginInstance, ServiceContext, TagNameCasing } from '../types';
6+
import { LanguageServicePlugin, LanguageServicePluginInstance, ServiceContext, ServiceEnvironment, TagNameCasing } from '../types';
77
import { getUserPreferences } from 'volar-service-typescript/lib/configs/getUserPreferences';
88

99
export function create(
1010
ts: typeof import('typescript'),
11+
getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions,
1112
getTsPluginClient?: (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined,
1213
): LanguageServicePlugin {
1314
return {
@@ -17,6 +18,7 @@ export function create(
1718
let casing = TagNameCasing.Pascal as TagNameCasing; // TODO
1819

1920
const tsPluginClient = getTsPluginClient?.(context);
21+
const vueCompilerOptions = getVueOptions(context.env);
2022

2123
return {
2224
async provideDocumentDropEdits(document, _position, dataTransfer) {
@@ -39,7 +41,7 @@ export function create(
3941
importUri = item.value as string;
4042
}
4143
}
42-
if (!importUri?.endsWith('.vue')) {
44+
if (!importUri || !vueCompilerOptions.extensions.some(ext => importUri.endsWith(ext))) {
4345
return;
4446
}
4547

0 commit comments

Comments
 (0)