Skip to content

Commit 38c61be

Browse files
committed
refactor(language-service): simplify tsPluginClient type and its propagation across functions
1 parent 8c7b41f commit 38c61be

File tree

11 files changed

+28
-79
lines changed

11 files changed

+28
-79
lines changed

packages/language-service/index.ts

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ export * from '@volar/language-service';
44
// for @vue/language-server usage
55
export * from '@volar/language-service/lib/utils/featureWorkers';
66

7-
import type * as ts from 'typescript';
8-
97
import { create as createEmmetPlugin } from 'volar-service-emmet';
108
import { create as createJsonPlugin } from 'volar-service-json';
119
import { create as createPugFormatPlugin } from 'volar-service-pug-beautify';
@@ -33,46 +31,39 @@ import { create as createVueTwoslashQueriesPlugin } from './lib/plugins/vue-twos
3331

3432
export function createVueLanguageServicePlugins(
3533
ts: typeof import('typescript'),
36-
tsPluginClient:
37-
| import('@vue/typescript-plugin/lib/requests').Requests & {
38-
getDocumentHighlights: (fileName: string, position: number) => Promise<ts.DocumentHighlights[] | null>;
39-
}
40-
| undefined,
34+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
4135
) {
42-
const getTsPluginClient = () => tsPluginClient;
4336
const plugins = [
4437
createCssPlugin(),
4538
createJsonPlugin(),
4639
createPugFormatPlugin(),
4740
createTypeScriptDocCommentTemplatePlugin(ts),
48-
createTypescriptSemanticTokensPlugin(getTsPluginClient),
41+
createTypescriptSemanticTokensPlugin(tsPluginClient),
4942
createTypeScriptSyntacticPlugin(ts),
5043
createVueAutoSpacePlugin(),
51-
createVueAutoDotValuePlugin(ts, getTsPluginClient),
44+
createVueAutoDotValuePlugin(ts, tsPluginClient),
5245
createVueCompilerDomErrorsPlugin(),
53-
createVueComponentSemanticTokensPlugin(getTsPluginClient),
54-
createVueDocumentDropPlugin(ts, getTsPluginClient),
46+
createVueComponentSemanticTokensPlugin(tsPluginClient),
47+
createVueDocumentDropPlugin(ts, tsPluginClient),
48+
createVueDocumentHighlightsPlugin(tsPluginClient),
5549
createVueDirectiveCommentsPlugin(),
56-
createVueExtractFilePlugin(ts, getTsPluginClient),
50+
createVueExtractFilePlugin(ts, tsPluginClient),
5751
createVueGlobalTypesErrorPlugin(),
5852
createVueInlayHintsPlugin(ts),
59-
createVueMissingPropsHintsPlugin(getTsPluginClient),
53+
createVueMissingPropsHintsPlugin(tsPluginClient),
6054
createVueScopedClassLinksPlugin(),
6155
createVueSfcPlugin(),
6256
createVueSuggestDefineAssignmentPlugin(),
63-
createVueTemplatePlugin('html', getTsPluginClient),
64-
createVueTemplatePlugin('pug', getTsPluginClient),
57+
createVueTemplatePlugin('html', tsPluginClient),
58+
createVueTemplatePlugin('pug', tsPluginClient),
6559
createVueTemplateRefLinksPlugin(),
66-
createVueTwoslashQueriesPlugin(getTsPluginClient),
60+
createVueTwoslashQueriesPlugin(tsPluginClient),
6761
createEmmetPlugin({
6862
mappedLanguages: {
6963
'vue-root-tags': 'html',
7064
'postcss': 'scss',
7165
},
7266
}),
7367
];
74-
if (tsPluginClient) {
75-
plugins.push(createVueDocumentHighlightsPlugin(tsPluginClient.getDocumentHighlights));
76-
}
7768
return plugins;
7869
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import type { LanguageServiceContext, LanguageServicePlugin } from '@volar/language-service';
1+
import type { LanguageServicePlugin } from '@volar/language-service';
22
import { convertClassificationsToSemanticTokens } from 'volar-service-typescript/lib/semanticFeatures/semanticTokens';
33
import { getEmbeddedInfo } from './utils';
44

55
export function create(
6-
getTsPluginClient?: (
7-
context: LanguageServiceContext,
8-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
6+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
97
): LanguageServicePlugin {
108
return {
119
name: 'typescript-semantic-tokens',
@@ -38,8 +36,6 @@ export function create(
3836
},
3937
},
4038
create(context) {
41-
const tsPluginClient = getTsPluginClient?.(context);
42-
4339
return {
4440
async provideDocumentSemanticTokens(document, range, legend) {
4541
const info = getEmbeddedInfo(context, document, 'main');

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
import type { LanguageServiceContext, LanguageServicePlugin, TextDocument } from '@volar/language-service';
1+
import type { LanguageServicePlugin, TextDocument } from '@volar/language-service';
22
import { hyphenateAttr } from '@vue/language-core';
33
import type * as ts from 'typescript';
44
import { getEmbeddedInfo, sleep } from './utils';
55

66
export function create(
77
ts: typeof import('typescript'),
8-
getTsPluginClient?: (
9-
context: LanguageServiceContext,
10-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
8+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
119
): LanguageServicePlugin {
1210
return {
1311
name: 'vue-autoinsert-dotvalue',
@@ -18,7 +16,6 @@ export function create(
1816
},
1917
},
2018
create(context) {
21-
const tsPluginClient = getTsPluginClient?.(context);
2219
let currentReq = 0;
2320

2421
return {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import type { LanguageServiceContext, LanguageServicePlugin, SemanticToken } from '@volar/language-service';
1+
import type { LanguageServicePlugin, SemanticToken } from '@volar/language-service';
22
import { forEachElementNode, hyphenateTag } from '@vue/language-core';
33
import type * as ts from 'typescript';
44
import { getEmbeddedInfo } from './utils';
55

66
export function create(
7-
getTsPluginClient?: (
8-
context: LanguageServiceContext,
9-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
7+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
108
): LanguageServicePlugin {
119
return {
1210
name: 'vue-component-semantic-tokens',
@@ -19,8 +17,6 @@ export function create(
1917
},
2018
},
2119
create(context) {
22-
const tsPluginClient = getTsPluginClient?.(context);
23-
2420
return {
2521
async provideDocumentSemanticTokens(document, range, legend) {
2622
const info = getEmbeddedInfo(context, document, 'template');

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import type {
2-
InsertTextFormat,
3-
LanguageServiceContext,
4-
LanguageServicePlugin,
5-
WorkspaceEdit,
6-
} from '@volar/language-service';
1+
import type { InsertTextFormat, LanguageServicePlugin, WorkspaceEdit } from '@volar/language-service';
72
import { forEachEmbeddedCode } from '@vue/language-core';
83
import { camelize, capitalize, hyphenate } from '@vue/shared';
94
import { posix as path } from 'path-browserify';
@@ -15,18 +10,14 @@ import { getEmbeddedInfo } from './utils';
1510

1611
export function create(
1712
ts: typeof import('typescript'),
18-
getTsPluginClient?: (
19-
context: LanguageServiceContext,
20-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
13+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
2114
): LanguageServicePlugin {
2215
return {
2316
name: 'vue-document-drop',
2417
capabilities: {
2518
documentDropEditsProvider: true,
2619
},
2720
create(context) {
28-
const tsPluginClient = getTsPluginClient?.(context);
29-
3021
return {
3122
async provideDocumentDropEdits(document, _position, dataTransfer) {
3223
const info = getEmbeddedInfo(context, document, 'template', 'html');

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import type { DocumentHighlightKind, LanguageServicePlugin } from '@volar/language-service';
2-
import type * as ts from 'typescript';
32
import { getEmbeddedInfo } from './utils';
43

54
export function create(
6-
getDocumentHighlights: (fileName: string, position: number) => Promise<ts.DocumentHighlights[] | null>,
5+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
76
): LanguageServicePlugin {
87
return {
98
name: 'vue-document-highlights',
@@ -19,7 +18,7 @@ export function create(
1918
}
2019
const { root } = info;
2120

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

2423
return result
2524
?.filter(({ fileName }) => fileName === root.fileName)

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

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import type {
2-
CreateFile,
3-
LanguageServiceContext,
4-
LanguageServicePlugin,
5-
TextDocumentEdit,
6-
TextEdit,
7-
} from '@volar/language-service';
1+
import type { CreateFile, LanguageServicePlugin, TextDocumentEdit, TextEdit } from '@volar/language-service';
82
import type { ExpressionNode, TemplateChildNode } from '@vue/compiler-dom';
93
import { type Sfc, tsCodegen } from '@vue/language-core';
104
import type * as ts from 'typescript';
@@ -21,9 +15,7 @@ const unicodeReg = /\\u/g;
2115

2216
export function create(
2317
ts: typeof import('typescript'),
24-
getTsPluginClient?: (
25-
context: LanguageServiceContext,
26-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
18+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
2719
): LanguageServicePlugin {
2820
return {
2921
name: 'vue-extract-file',
@@ -34,7 +26,6 @@ export function create(
3426
},
3527
},
3628
create(context) {
37-
const tsPluginClient = getTsPluginClient?.(context);
3829
return {
3930
provideCodeActions(document, range, ctx) {
4031
if (ctx.only && !ctx.only.includes('refactor')) {
@@ -99,9 +90,6 @@ export function create(
9990
}
10091

10192
const toExtract = await tsPluginClient?.collectExtractProps(root.fileName, templateCodeRange) ?? [];
102-
if (!toExtract) {
103-
return codeAction;
104-
}
10593

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

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

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

1313
export function create(
14-
getTsPluginClient?: (
15-
context: LanguageServiceContext,
16-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
14+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
1715
): LanguageServicePlugin {
1816
return {
1917
name: 'vue-missing-props-hints',
2018
capabilities: {
2119
inlayHintProvider: {},
2220
},
2321
create(context) {
24-
const tsPluginClient = getTsPluginClient?.(context);
2522
let intrinsicElementNames: Set<string>;
2623

2724
return {

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type {
33
CompletionItemTag,
44
CompletionList,
55
Disposable,
6-
LanguageServiceContext,
76
LanguageServicePlugin,
87
TextDocument,
98
} from '@volar/language-service';
@@ -38,9 +37,7 @@ let modelData: html.HTMLDataV1;
3837

3938
export function create(
4039
mode: 'html' | 'pug',
41-
getTsPluginClient?: (
42-
context: LanguageServiceContext,
43-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
40+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
4441
): LanguageServicePlugin {
4542
let customData: html.IHTMLDataProvider[] = [];
4643
let extraCustomData: html.IHTMLDataProvider[] = [];
@@ -92,7 +89,6 @@ export function create(
9289
hoverProvider: true,
9390
},
9491
create(context) {
95-
const tsPluginClient = getTsPluginClient?.(context);
9692
const baseServiceInstance = baseService.create(context);
9793

9894
builtInData ??= loadTemplateData(context.env.locale ?? 'en');

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
import type { InlayHint, LanguageServiceContext, LanguageServicePlugin, Position } from '@volar/language-service';
1+
import type { InlayHint, LanguageServicePlugin, Position } from '@volar/language-service';
22
import { getEmbeddedInfo } from './utils';
33

44
const twoslashTemplateReg = /<!--\s*\^\?\s*-->/g;
55
const twoslashScriptReg = /(?<=^|\n)\s*\/\/\s*\^\?/g;
66

77
export function create(
8-
getTsPluginClient?: (
9-
context: LanguageServiceContext,
10-
) => import('@vue/typescript-plugin/lib/requests').Requests | undefined,
8+
tsPluginClient: import('@vue/typescript-plugin/lib/requests').Requests | undefined,
119
): LanguageServicePlugin {
1210
return {
1311
name: 'vue-twoslash-queries',
1412
capabilities: {
1513
inlayHintProvider: {},
1614
},
1715
create(context) {
18-
const tsPluginClient = getTsPluginClient?.(context);
1916
return {
2017
async provideInlayHints(document, range) {
2118
const info = getEmbeddedInfo(

0 commit comments

Comments
 (0)