Skip to content

Commit 1d005d5

Browse files
committed
refactor(language-service): update tsPluginClient usage to destructured requests in plugins
1 parent 848d21a commit 1d005d5

File tree

12 files changed

+87
-60
lines changed

12 files changed

+87
-60
lines changed

packages/language-service/index.ts

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,56 @@ import { create as createVueTwoslashQueriesPlugin } from './lib/plugins/vue-twos
3131

3232
export function createVueLanguageServicePlugins(
3333
ts: typeof import('typescript'),
34-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
34+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests = {
35+
collectExtractProps: () => undefined,
36+
getImportPathForFile: () => undefined,
37+
getPropertiesAtLocation: () => undefined,
38+
getComponentDirectives: () => undefined,
39+
getComponentEvents: () => undefined,
40+
getComponentNames: () => undefined,
41+
getComponentProps: () => undefined,
42+
getComponentSlots: () => undefined,
43+
getElementAttrs: () => undefined,
44+
getElementNames: () => undefined,
45+
getDocumentHighlights: () => undefined,
46+
getEncodedSemanticClassifications: () => undefined,
47+
getQuickInfoAtPosition: () => undefined,
48+
},
3549
) {
36-
const plugins = [
50+
return [
3751
createCssPlugin(),
3852
createJsonPlugin(),
3953
createPugFormatPlugin(),
40-
createTypeScriptDocCommentTemplatePlugin(ts),
41-
createTypescriptSemanticTokensPlugin(tsPluginClient),
42-
createTypeScriptSyntacticPlugin(ts),
4354
createVueAutoSpacePlugin(),
44-
createVueAutoDotValuePlugin(ts, tsPluginClient),
4555
createVueCompilerDomErrorsPlugin(),
46-
createVueComponentSemanticTokensPlugin(tsPluginClient),
47-
createVueDocumentDropPlugin(ts, tsPluginClient),
48-
createVueDocumentHighlightsPlugin(tsPluginClient),
4956
createVueDirectiveCommentsPlugin(),
50-
createVueExtractFilePlugin(ts, tsPluginClient),
5157
createVueGlobalTypesErrorPlugin(),
52-
createVueInlayHintsPlugin(ts),
53-
createVueMissingPropsHintsPlugin(tsPluginClient),
5458
createVueScopedClassLinksPlugin(),
5559
createVueSfcPlugin(),
5660
createVueSuggestDefineAssignmentPlugin(),
57-
createVueTemplatePlugin('html', tsPluginClient),
58-
createVueTemplatePlugin('jade', tsPluginClient),
5961
createVueTemplateRefLinksPlugin(),
60-
createVueTwoslashQueriesPlugin(tsPluginClient),
6162
createEmmetPlugin({
6263
mappedLanguages: {
6364
'vue-root-tags': 'html',
6465
'postcss': 'scss',
6566
},
6667
}),
68+
69+
// TS related plugins
70+
createTypeScriptDocCommentTemplatePlugin(ts),
71+
createTypeScriptSyntacticPlugin(ts),
72+
createVueInlayHintsPlugin(ts),
73+
74+
// type aware plugins
75+
createTypescriptSemanticTokensPlugin(tsPluginClient),
76+
createVueAutoDotValuePlugin(ts, tsPluginClient),
77+
createVueComponentSemanticTokensPlugin(tsPluginClient),
78+
createVueDocumentDropPlugin(ts, tsPluginClient),
79+
createVueDocumentHighlightsPlugin(tsPluginClient),
80+
createVueExtractFilePlugin(ts, tsPluginClient),
81+
createVueMissingPropsHintsPlugin(tsPluginClient),
82+
createVueTemplatePlugin('html', tsPluginClient),
83+
createVueTemplatePlugin('jade', tsPluginClient),
84+
createVueTwoslashQueriesPlugin(tsPluginClient),
6785
];
68-
return plugins;
6986
}

packages/language-service/lib/plugins/typescript-semantic-tokens.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { convertClassificationsToSemanticTokens } from 'volar-service-typescript
33
import { getEmbeddedInfo } from './utils';
44

55
export function create(
6-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
6+
{ getEncodedSemanticClassifications }: import('@vue/typescript-plugin/lib/requests').Requests,
77
): LanguageServicePlugin {
88
return {
99
name: 'typescript-semantic-tokens',
@@ -50,7 +50,7 @@ export function create(
5050
start: start,
5151
length: end - start,
5252
};
53-
const classifications = await tsPluginClient?.getEncodedSemanticClassifications(
53+
const classifications = await getEncodedSemanticClassifications(
5454
root.fileName,
5555
span,
5656
);

packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { getEmbeddedInfo, sleep } from './utils';
55

66
export function create(
77
ts: typeof import('typescript'),
8-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
8+
{ getPropertiesAtLocation }: import('@vue/typescript-plugin/lib/requests').Requests,
99
): LanguageServicePlugin {
1010
return {
1111
name: 'vue-autoinsert-dotvalue',
@@ -73,7 +73,7 @@ export function create(
7373
}
7474
}
7575

76-
const props = await tsPluginClient?.getPropertiesAtLocation(root.fileName, sourceOffset) ?? [];
76+
const props = await getPropertiesAtLocation(root.fileName, sourceOffset) ?? [];
7777
if (props.some(prop => prop === 'value')) {
7878
return '${1:.value}';
7979
}

packages/language-service/lib/plugins/vue-component-semantic-tokens.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type * as ts from 'typescript';
44
import { getEmbeddedInfo } from './utils';
55

66
export function create(
7-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
7+
{ getComponentNames, getElementNames }: import('@vue/typescript-plugin/lib/requests').Requests,
88
): LanguageServicePlugin {
99
return {
1010
name: 'vue-component-semantic-tokens',
@@ -34,8 +34,8 @@ export function create(
3434
const start = document.offsetAt(range.start);
3535
const end = document.offsetAt(range.end);
3636

37-
const validComponentNames = await tsPluginClient?.getComponentNames(root.fileName) ?? [];
38-
const elements = new Set(await tsPluginClient?.getElementNames(root.fileName) ?? []);
37+
const validComponentNames = await getComponentNames(root.fileName) ?? [];
38+
const elements = new Set(await getElementNames(root.fileName) ?? []);
3939
const components = new Set([
4040
...validComponentNames,
4141
...validComponentNames.map(hyphenateTag),

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { getEmbeddedInfo } from './utils';
1010

1111
export function create(
1212
ts: typeof import('typescript'),
13-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
13+
{ getImportPathForFile }: import('@vue/typescript-plugin/lib/requests').Requests,
1414
): LanguageServicePlugin {
1515
return {
1616
name: 'vue-document-drop',
@@ -56,15 +56,15 @@ export function create(
5656
let importPath: string | undefined;
5757

5858
const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(root);
59-
if (tsPluginClient && serviceScript) {
59+
if (serviceScript) {
6060
const tsDocumentUri = context.encodeEmbeddedDocumentUri(sourceScript.id, serviceScript.code.id);
6161
const tsDocument = context.documents.get(
6262
tsDocumentUri,
6363
serviceScript.code.languageId,
6464
serviceScript.code.snapshot,
6565
);
6666
const preferences = await getUserPreferences(context, tsDocument);
67-
const importPathRequest = await tsPluginClient.getImportPathForFile(
67+
const importPathRequest = await getImportPathForFile(
6868
root.fileName,
6969
incomingFileName,
7070
preferences,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { DocumentHighlightKind, LanguageServicePlugin } from '@volar/langua
22
import { getEmbeddedInfo } from './utils';
33

44
export function create(
5-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
5+
{ getDocumentHighlights }: import('@vue/typescript-plugin/lib/requests').Requests,
66
): LanguageServicePlugin {
77
return {
88
name: 'vue-document-highlights',
@@ -18,7 +18,7 @@ export function create(
1818
}
1919
const { root } = info;
2020

21-
const result = await tsPluginClient?.getDocumentHighlights(root.fileName, document.offsetAt(position));
21+
const result = await getDocumentHighlights(root.fileName, document.offsetAt(position));
2222

2323
return result
2424
?.filter(({ fileName }) => fileName === root.fileName)

packages/language-service/lib/plugins/vue-extract-file.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const unicodeReg = /\\u/g;
1515

1616
export function create(
1717
ts: typeof import('typescript'),
18-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
18+
{ collectExtractProps }: import('@vue/typescript-plugin/lib/requests').Requests,
1919
): LanguageServicePlugin {
2020
return {
2121
name: 'vue-extract-file',
@@ -89,7 +89,7 @@ export function create(
8989
return codeAction;
9090
}
9191

92-
const toExtract = await tsPluginClient?.collectExtractProps(root.fileName, templateCodeRange) ?? [];
92+
const toExtract = await collectExtractProps(root.fileName, templateCodeRange) ?? [];
9393

9494
const templateInitialIndent =
9595
await context.env.getConfiguration!<boolean>('vue.format.template.initialIndent') ?? true;

packages/language-service/lib/plugins/vue-missing-props-hints.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { AttrNameCasing, checkCasing } from '../nameCasing';
1111
import { getEmbeddedInfo } from './utils';
1212

1313
export function create(
14-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
14+
{ getComponentNames, getElementNames, getComponentProps }: import('@vue/typescript-plugin/lib/requests').Requests,
1515
): LanguageServicePlugin {
1616
return {
1717
name: 'vue-missing-props-hints',
@@ -41,11 +41,11 @@ export function create(
4141

4242
const result: InlayHint[] = [];
4343
const casing = await checkCasing(context, sourceScript.id);
44-
const components = await tsPluginClient?.getComponentNames(root.fileName) ?? [];
44+
const components = await getComponentNames(root.fileName) ?? [];
4545
const componentProps: Record<string, string[]> = {};
4646

4747
intrinsicElementNames ??= new Set(
48-
await tsPluginClient?.getElementNames(root.fileName) ?? [],
48+
await getElementNames(root.fileName) ?? [],
4949
);
5050

5151
let token: html.TokenType;
@@ -76,7 +76,7 @@ export function create(
7676
if (cancellationToken.isCancellationRequested) {
7777
break;
7878
}
79-
componentProps[checkTag] = (await tsPluginClient?.getComponentProps(root.fileName, checkTag) ?? [])
79+
componentProps[checkTag] = (await getComponentProps(root.fileName, checkTag) ?? [])
8080
.filter(prop => prop.required)
8181
.map(prop => prop.name);
8282
}

packages/language-service/lib/plugins/vue-template.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,14 @@ let modelData: html.HTMLDataV1;
3737

3838
export function create(
3939
languageId: 'html' | 'jade',
40-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
40+
{
41+
getComponentNames,
42+
getElementAttrs,
43+
getComponentProps,
44+
getComponentEvents,
45+
getComponentDirectives,
46+
getComponentSlots,
47+
}: import('@vue/typescript-plugin/lib/requests').Requests,
4148
): LanguageServicePlugin {
4249
let customData: html.IHTMLDataProvider[] = [];
4350
let extraCustomData: html.IHTMLDataProvider[] = [];
@@ -400,7 +407,7 @@ export function create(
400407
if (!components) {
401408
components = [];
402409
tasks.push((async () => {
403-
components = (await tsPluginClient?.getComponentNames(root.fileName) ?? [])
410+
components = (await getComponentNames(root.fileName) ?? [])
404411
.filter(name =>
405412
name !== 'Transition'
406413
&& name !== 'TransitionGroup'
@@ -455,10 +462,10 @@ export function create(
455462
tagMap.set(tag, tagInfo);
456463
tasks.push((async () => {
457464
tagMap.set(tag, {
458-
attrs: await tsPluginClient?.getElementAttrs(root.fileName, tag) ?? [],
459-
propInfos: await tsPluginClient?.getComponentProps(root.fileName, tag) ?? [],
460-
events: await tsPluginClient?.getComponentEvents(root.fileName, tag) ?? [],
461-
directives: await tsPluginClient?.getComponentDirectives(root.fileName) ?? [],
465+
attrs: await getElementAttrs(root.fileName, tag) ?? [],
466+
propInfos: await getComponentProps(root.fileName, tag) ?? [],
467+
events: await getComponentEvents(root.fileName, tag) ?? [],
468+
directives: await getComponentDirectives(root.fileName) ?? [],
462469
});
463470
version++;
464471
})());
@@ -607,7 +614,7 @@ export function create(
607614
values = [];
608615
tasks.push((async () => {
609616
if (tag === 'slot' && attr === 'name') {
610-
values = await tsPluginClient?.getComponentSlots(root.fileName) ?? [];
617+
values = await getComponentSlots(root.fileName) ?? [];
611618
}
612619
version++;
613620
})());

packages/language-service/lib/plugins/vue-twoslash-queries.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const twoslashTemplateReg = /<!--\s*\^\?\s*-->/g;
55
const twoslashScriptReg = /(?<=^|\n)\s*\/\/\s*\^\?/g;
66

77
export function create(
8-
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
8+
{ getQuickInfoAtPosition }: import('@vue/typescript-plugin/lib/requests').Requests,
99
): LanguageServicePlugin {
1010
return {
1111
name: 'vue-twoslash-queries',
@@ -45,7 +45,7 @@ export function create(
4545
for (const [pointerPosition, hoverOffset] of hoverOffsets) {
4646
const map = context.language.maps.get(virtualCode, sourceScript);
4747
for (const [sourceOffset] of map.toSourceLocation(hoverOffset)) {
48-
const quickInfo = await tsPluginClient?.getQuickInfoAtPosition(
48+
const quickInfo = await getQuickInfoAtPosition(
4949
root.fileName,
5050
sourceDocument.positionAt(sourceOffset),
5151
);

0 commit comments

Comments
 (0)