Skip to content

Commit

Permalink
fix: avoid source.addMissingImports fix for template
Browse files Browse the repository at this point in the history
close #2304
  • Loading branch information
johnsoncodehk committed Feb 3, 2023
1 parent 3ee8512 commit 376352a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 21 deletions.
12 changes: 5 additions & 7 deletions vue-language-tools/vue-language-core/src/generators/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const capabilitiesSet = {
slotName: { hover: true, diagnostic: true, references: true, definition: true, completion: true } satisfies FileRangeCapabilities,
slotNameExport: { hover: true, diagnostic: true, references: true, definition: true, /* referencesCodeLens: true */ } satisfies FileRangeCapabilities,
refAttr: { references: true, definition: true, rename: true } satisfies FileRangeCapabilities,
autoImportOnly: { completion: { additional: true, autoImportOnly: true } } satisfies FileRangeCapabilities,
};
const formatBrackets = {
empty: ['', ''] as [string, string],
Expand Down Expand Up @@ -205,18 +206,14 @@ export function generate(
}
codeGen.push('\n');

codeGen.push('// @ts-ignore\n'); // #2304
codeGen.push(`[`);
for (const tagRange of tagRanges) {
codeGen.push([
varName,
'template',
tagRange,
{
completion: {
additional: true,
autoImportOnly: true,
},
},
capabilitiesSet.autoImportOnly,
]);
codeGen.push(',');
}
Expand Down Expand Up @@ -1756,10 +1753,11 @@ export function generate(
if (!tempVars.length)
return;

codeGen.push('// @ts-ignore\n'); // #2304
codeGen.push('[');
for (const _vars of tempVars) {
for (const v of _vars) {
codeGen.push([v.text, 'template', v.offset, { completion: { additional: true } }]);
codeGen.push([v.text, 'template', v.offset, capabilitiesSet.autoImportOnly]);
codeGen.push(',');
}
}
Expand Down
28 changes: 14 additions & 14 deletions vue-language-tools/vue-language-service/src/languageService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ export function getLanguageServicePlugins(
) {

const baseTsPlugin = config.plugins?.typescript ?? createTsPlugin();
const tsPlugin: embeddedLS.LanguageServicePlugin = (_context, service) => {
const tsPlugin: embeddedLS.LanguageServicePlugin = (context, service) => {

if (!_context.typescript)
if (!context.typescript)
return {};

const ts = _context.typescript.module;
const base = baseTsPlugin(_context, service);
const ts = context.typescript.module;
const base = baseTsPlugin(context, service);
const autoImportPositions = new WeakSet<vscode.Position>();

return {
Expand All @@ -55,8 +55,8 @@ export function getLanguageServicePlugins(
},
complete: {
...base.complete,
async on(document, position, context) {
const result = await base.complete?.on?.(document, position, context);
async on(document, position, completeContext) {
const result = await base.complete?.on?.(document, position, completeContext);
if (result) {

// filter __VLS_
Expand All @@ -66,8 +66,8 @@ export function getLanguageServicePlugins(
);

// handle component auto-import patch
for (const [_, map] of _context.documents.getMapsByVirtualFileUri(document.uri)) {
const virtualFile = _context.documents.getSourceByUri(map.sourceFileDocument.uri)?.root;
for (const [_, map] of context.documents.getMapsByVirtualFileUri(document.uri)) {
const virtualFile = context.documents.getSourceByUri(map.sourceFileDocument.uri)?.root;
if (virtualFile instanceof vue.VueFile) {
if (map.toSourcePosition(position, data => typeof data.completion === 'object' && !!data.completion.autoImportOnly)) {
result.items.forEach(item => {
Expand All @@ -85,7 +85,7 @@ export function getLanguageServicePlugins(
if (
item.textEdit?.newText && /\w*Vue$/.test(item.textEdit.newText)
&& item.additionalTextEdits?.length === 1 && item.additionalTextEdits[0].newText.indexOf('import ' + item.textEdit.newText + ' from ') >= 0
&& (await _context.env.configurationHost?.getConfiguration<boolean>('volar.completion.normalizeComponentImportName') ?? true)
&& (await context.env.configurationHost?.getConfiguration<boolean>('volar.completion.normalizeComponentImportName') ?? true)
) {
let newName = item.textEdit.newText.slice(0, -'Vue'.length);
newName = newName[0].toUpperCase() + newName.substring(1);
Expand Down Expand Up @@ -115,12 +115,12 @@ export function getLanguageServicePlugins(

const data: Data = item.data;
if (item.data?.__isComponentAutoImport && data && item.additionalTextEdits?.length && item.textEdit) {
for (const [_, map] of _context.documents.getMapsByVirtualFileUri(data.uri)) {
const virtualFile = _context.documents.getSourceByUri(map.sourceFileDocument.uri)?.root;
for (const [_, map] of context.documents.getMapsByVirtualFileUri(data.uri)) {
const virtualFile = context.documents.getSourceByUri(map.sourceFileDocument.uri)?.root;
if (virtualFile instanceof vue.VueFile) {
const sfc = virtualFile.sfc;
const componentName = item.textEdit.newText;
const textDoc = _context.documents.getDocumentByFileName(virtualFile.snapshot, virtualFile.fileName);
const textDoc = context.documents.getDocumentByFileName(virtualFile.snapshot, virtualFile.fileName);
if (sfc.scriptAst && sfc.script) {
const _scriptRanges = vue.scriptRanges.parseScriptRanges(ts, sfc.scriptAst, !!sfc.scriptSetup, true);
const exportDefault = _scriptRanges.exportDefault;
Expand Down Expand Up @@ -178,8 +178,8 @@ export function getLanguageServicePlugins(
},
codeAction: {
...base.codeAction,
async on(document, range, context) {
const result = await base.codeAction?.on?.(document, range, context);
async on(document, range, codeActionContext) {
const result = await base.codeAction?.on?.(document, range, codeActionContext);
return result?.filter(codeAction => codeAction.title.indexOf('__VLS_') === -1);
},
}
Expand Down

0 comments on commit 376352a

Please sign in to comment.