Skip to content

Commit 1b9946c

Browse files
committed
feat: upgrade to volar 2.2 alpha
1 parent 5e6da11 commit 1b9946c

34 files changed

+407
-393
lines changed

extensions/vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@
487487
"devDependencies": {
488488
"@types/semver": "^7.5.3",
489489
"@types/vscode": "^1.82.0",
490-
"@volar/vscode": "~2.1.5",
490+
"@volar/vscode": "~2.2.0-alpha.0",
491491
"@vue/language-core": "2.0.7",
492492
"@vue/language-server": "2.0.7",
493493
"@vue/typescript-plugin": "2.0.7",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"devDependencies": {
2222
"@lerna-lite/cli": "latest",
2323
"@lerna-lite/publish": "latest",
24-
"@volar/language-service": "~2.1.5",
24+
"@volar/language-service": "~2.2.0-alpha.0",
2525
"@volar/tsl-config": "latest",
2626
"tsl": "latest",
2727
"typescript": "latest",

packages/component-meta/lib/base.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type * as ts from 'typescript';
33
import * as path from 'path-browserify';
44
import { code as typeHelpersCode } from 'vue-component-type-helpers';
55
import { code as vue2TypeHelpersCode } from 'vue-component-type-helpers/vue2';
6-
import { createLanguage } from '@volar/typescript';
6+
import { createTypeScriptLanguage } from '@volar/typescript';
77

88
import type {
99
MetaCheckerOptions,
@@ -71,7 +71,9 @@ function createCheckerWorker(
7171
let projectVersion = 0;
7272

7373
const scriptSnapshots = new Map<string, ts.IScriptSnapshot>();
74-
const _host: vue.TypeScriptProjectHost = {
74+
const projectHost: vue.TypeScriptProjectHost = {
75+
...ts.sys,
76+
configFileName,
7577
getCurrentDirectory: () => rootPath,
7678
getProjectVersion: () => projectVersion.toString(),
7779
getCompilationSettings: () => parsedCommandLine.options,
@@ -92,10 +94,12 @@ function createCheckerWorker(
9294
}
9395
return vue.resolveCommonLanguageId(fileName);
9496
},
97+
scriptIdToFileName: id => id,
98+
fileNameToScriptId: id => id,
9599
};
96100

97101
return {
98-
...baseCreate(ts, configFileName, _host, parsedCommandLine.vueOptions, checkerOptions, globalComponentName),
102+
...baseCreate(ts, projectHost, parsedCommandLine.vueOptions, checkerOptions, globalComponentName),
99103
updateFile(fileName: string, text: string) {
100104
fileName = fileName.replace(windowsPathReg, '/');
101105
scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text));
@@ -120,7 +124,6 @@ function createCheckerWorker(
120124

121125
export function baseCreate(
122126
ts: typeof import('typescript'),
123-
configFileName: string | undefined,
124127
host: vue.TypeScriptProjectHost,
125128
vueCompilerOptions: vue.VueCompilerOptions,
126129
checkerOptions: MetaCheckerOptions,
@@ -174,16 +177,10 @@ export function baseCreate(
174177
host.getCompilationSettings(),
175178
vueCompilerOptions,
176179
);
177-
const language = createLanguage(
180+
const language = createTypeScriptLanguage(
178181
ts,
179-
ts.sys,
180182
[vueLanguagePlugin],
181-
configFileName,
182183
host,
183-
{
184-
fileIdToFileName: id => id,
185-
fileNameToFileId: id => id,
186-
},
187184
);
188185
const { languageServiceHost } = language.typescript!;
189186
const tsLs = ts.createLanguageService(languageServiceHost);
@@ -326,7 +323,7 @@ ${vueCompilerOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode}
326323
const printer = ts.createPrinter(checkerOptions.printer);
327324
const snapshot = host.getScriptSnapshot(componentPath)!;
328325

329-
const vueFile = language.files.get(componentPath)?.generated?.code;
326+
const vueFile = language.scripts.get(componentPath)?.generated?.root;
330327
const vueDefaults = vueFile && exportName === 'default'
331328
? (vueFile instanceof vue.VueGeneratedCode ? readVueComponentDefaultProps(vueFile, printer, ts, vueCompilerOptions) : {})
332329
: {};
@@ -473,7 +470,7 @@ function createSchemaResolvers(
473470
symbolNode: ts.Expression,
474471
{ rawType, schema: options, noDeclarations }: MetaCheckerOptions,
475472
ts: typeof import('typescript'),
476-
context: vue.LanguageContext,
473+
language: vue.Language,
477474
) {
478475
const visited = new Set<ts.Type>();
479476

@@ -665,12 +662,11 @@ function createSchemaResolvers(
665662
}
666663
function getDeclaration(declaration: ts.Declaration): Declaration | undefined {
667664
const fileName = declaration.getSourceFile().fileName;
668-
const sourceFile = context.files.get(fileName);
665+
const sourceFile = language.scripts.get(fileName);
669666
if (sourceFile?.generated) {
670-
const script = sourceFile.generated.languagePlugin.typescript?.getScript(sourceFile.generated.code);
667+
const script = sourceFile.generated.languagePlugin.typescript?.getServiceScript(sourceFile.generated.root);
671668
if (script) {
672-
const maps = context.files.getMaps(script.code);
673-
for (const [source, [_, map]] of maps) {
669+
for (const [source, [_, map]] of language.maps.forEach(script.code)) {
674670
const start = map.getSourceOffset(declaration.getStart());
675671
const end = map.getSourceOffset(declaration.getEnd());
676672
if (start && end) {

packages/component-meta/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"directory": "packages/component-meta"
1313
},
1414
"dependencies": {
15-
"@volar/typescript": "~2.1.5",
15+
"@volar/typescript": "~2.2.0-alpha.0",
1616
"@vue/language-core": "2.0.7",
1717
"path-browserify": "^1.0.1",
1818
"vue-component-type-helpers": "2.0.7"

packages/language-core/lib/languageModule.ts

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -113,37 +113,38 @@ export function createVueLanguagePlugin(
113113
code.update(snapshot);
114114
return code;
115115
},
116-
disposeVirtualCode(fileId, code, files) {
117-
const isGlobalTypesHolder = code.fileName === pluginContext.globalTypesHolder;
118-
const fileRegistry = getFileRegistry(isGlobalTypesHolder);
119-
fileRegistry.delete(fileId);
120-
if (isGlobalTypesHolder) {
121-
pluginContext.globalTypesHolder = undefined;
122-
const fileRegistry2 = getFileRegistry(false);
123-
for (const [fileId, code] of fileRegistry2) {
124-
if (isValidGlobalTypesHolder(code.fileName)) {
125-
pluginContext.globalTypesHolder = code.fileName;
126-
fileRegistry2.delete(fileId);
127-
// force dirty
128-
files?.delete(fileId);
129-
files?.set(
130-
fileId,
131-
code.languageId,
132-
code.snapshot,
133-
);
134-
break;
135-
}
136-
}
137-
}
138-
},
116+
// TODO: when global types holder deleted, move global types to another file
117+
// disposeVirtualCode(fileId, code) {
118+
// const isGlobalTypesHolder = code.fileName === pluginContext.globalTypesHolder;
119+
// const fileRegistry = getFileRegistry(isGlobalTypesHolder);
120+
// fileRegistry.delete(fileId);
121+
// if (isGlobalTypesHolder) {
122+
// pluginContext.globalTypesHolder = undefined;
123+
// const fileRegistry2 = getFileRegistry(false);
124+
// for (const [fileId, code] of fileRegistry2) {
125+
// if (isValidGlobalTypesHolder(code.fileName)) {
126+
// pluginContext.globalTypesHolder = code.fileName;
127+
// fileRegistry2.delete(fileId);
128+
// // force dirty
129+
// files?.delete(fileId);
130+
// files?.set(
131+
// fileId,
132+
// code.languageId,
133+
// code.snapshot,
134+
// );
135+
// break;
136+
// }
137+
// }
138+
// }
139+
// },
139140
typescript: {
140141
extraFileExtensions: vueCompilerOptions.extensions.map<ts.FileExtensionInfo>(ext => ({
141142
extension: ext.slice(1),
142143
isMixedContent: true,
143144
scriptKind: 7 satisfies ts.ScriptKind.Deferred,
144145
})),
145-
getScript(rootVirtualCode) {
146-
for (const code of forEachEmbeddedCode(rootVirtualCode)) {
146+
getServiceScript(root) {
147+
for (const code of forEachEmbeddedCode(root)) {
147148
if (code.id.startsWith('script_')) {
148149
const lang = code.id.substring('script_'.length);
149150
return {

packages/language-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"directory": "packages/language-core"
1313
},
1414
"dependencies": {
15-
"@volar/language-core": "~2.1.5",
15+
"@volar/language-core": "~2.2.0-alpha.0",
1616
"@vue/compiler-dom": "^3.4.0",
1717
"@vue/shared": "^3.4.0",
1818
"computeds": "^0.0.1",

packages/language-plugin-pug/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@vue/language-core": "2.0.7"
1717
},
1818
"dependencies": {
19-
"@volar/source-map": "~2.1.5",
20-
"volar-service-pug": "0.0.34"
19+
"@volar/source-map": "~2.2.0-alpha.0",
20+
"volar-service-pug": "0.0.35"
2121
}
2222
}

packages/language-server/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"directory": "packages/language-server"
1616
},
1717
"dependencies": {
18-
"@volar/language-core": "~2.1.5",
19-
"@volar/language-server": "~2.1.5",
18+
"@volar/language-core": "~2.2.0-alpha.0",
19+
"@volar/language-server": "~2.2.0-alpha.0",
2020
"@vue/language-core": "2.0.7",
2121
"@vue/language-service": "2.0.7",
2222
"@vue/typescript-plugin": "2.0.7",

packages/language-service/index.ts

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,29 @@ export * from '@vue/language-core';
33
export * from './lib/ideFeatures/nameCasing';
44
export * from './lib/types';
55

6-
import type { ServiceContext, ServiceEnvironment, ServicePlugin } from '@volar/language-service';
6+
import type { ServiceContext, ServiceEnvironment, LanguageServicePlugin } from '@volar/language-service';
77
import type { VueCompilerOptions } from './lib/types';
88

9-
import { create as createEmmetServicePlugin } from 'volar-service-emmet';
10-
import { create as createJsonServicePlugin } from 'volar-service-json';
11-
import { create as createPugFormatServicePlugin } from 'volar-service-pug-beautify';
12-
import { create as createTypeScriptServicePlugins } from 'volar-service-typescript';
13-
import { create as createTypeScriptTwoslashQueriesServicePlugin } from 'volar-service-typescript-twoslash-queries';
14-
import { create as createTypeScriptDocCommentTemplateServicePlugin } from 'volar-service-typescript/lib/plugins/docCommentTemplate';
15-
import { create as createTypeScriptSyntacticServicePlugin } from 'volar-service-typescript/lib/plugins/syntactic';
16-
import { create as createCssServicePlugin } from './lib/plugins/css';
17-
import { create as createVueAutoDotValueServicePlugin } from './lib/plugins/vue-autoinsert-dotvalue';
18-
import { create as createVueAutoWrapParenthesesServicePlugin } from './lib/plugins/vue-autoinsert-parentheses';
19-
import { create as createVueAutoAddSpaceServicePlugin } from './lib/plugins/vue-autoinsert-space';
20-
import { create as createVueReferencesCodeLensServicePlugin } from './lib/plugins/vue-codelens-references';
21-
import { create as createVueDirectiveCommentsServicePlugin } from './lib/plugins/vue-directive-comments';
22-
import { create as createVueDocumentDropServicePlugin } from './lib/plugins/vue-document-drop';
23-
import { create as createVueExtractFileServicePlugin } from './lib/plugins/vue-extract-file';
24-
import { create as createVueSfcServicePlugin } from './lib/plugins/vue-sfc';
25-
import { create as createVueTemplateServicePlugin } from './lib/plugins/vue-template';
26-
import { create as createVueToggleVBindServicePlugin } from './lib/plugins/vue-toggle-v-bind-codeaction';
27-
import { create as createVueTwoslashQueriesServicePlugin } from './lib/plugins/vue-twoslash-queries';
28-
import { create as createVueVisualizeHiddenCallbackParamServicePlugin } from './lib/plugins/vue-visualize-hidden-callback-param';
9+
import { create as createEmmetPlugin } from 'volar-service-emmet';
10+
import { create as createJsonPlugin } from 'volar-service-json';
11+
import { create as createPugFormatPlugin } from 'volar-service-pug-beautify';
12+
import { create as createTypeScriptPlugins } from 'volar-service-typescript';
13+
import { create as createTypeScriptTwoslashQueriesPlugin } from 'volar-service-typescript-twoslash-queries';
14+
import { create as createTypeScriptDocCommentTemplatePlugin } from 'volar-service-typescript/lib/plugins/docCommentTemplate';
15+
import { create as createTypeScriptSyntacticPlugin } from 'volar-service-typescript/lib/plugins/syntactic';
16+
import { create as createCssPlugin } from './lib/plugins/css';
17+
import { create as createVueAutoDotValuePlugin } from './lib/plugins/vue-autoinsert-dotvalue';
18+
import { create as createVueAutoWrapParenthesesPlugin } from './lib/plugins/vue-autoinsert-parentheses';
19+
import { create as createVueAutoAddSpacePlugin } from './lib/plugins/vue-autoinsert-space';
20+
import { create as createVueReferencesCodeLensPlugin } from './lib/plugins/vue-codelens-references';
21+
import { create as createVueDirectiveCommentsPlugin } from './lib/plugins/vue-directive-comments';
22+
import { create as createVueDocumentDropPlugin } from './lib/plugins/vue-document-drop';
23+
import { create as createVueExtractFilePlugin } from './lib/plugins/vue-extract-file';
24+
import { create as createVueSfcPlugin } from './lib/plugins/vue-sfc';
25+
import { create as createVueTemplatePlugin } from './lib/plugins/vue-template';
26+
import { create as createVueToggleVBindPlugin } from './lib/plugins/vue-toggle-v-bind-codeaction';
27+
import { create as createVueTwoslashQueriesPlugin } from './lib/plugins/vue-twoslash-queries';
28+
import { create as createVueVisualizeHiddenCallbackParamPlugin } from './lib/plugins/vue-visualize-hidden-callback-param';
2929

3030
import { decorateLanguageServiceForVue } from '@vue/typescript-plugin/lib/common';
3131
import { collectExtractProps } from '@vue/typescript-plugin/lib/requests/collectExtractProps';
@@ -38,10 +38,10 @@ export function createVueServicePlugins(
3838
getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions,
3939
getTsPluginClient = createDefaultGetTsPluginClient(ts, getVueOptions),
4040
hybridMode = false,
41-
): ServicePlugin[] {
42-
const plugins: ServicePlugin[] = [];
41+
): LanguageServicePlugin[] {
42+
const plugins: LanguageServicePlugin[] = [];
4343
if (!hybridMode) {
44-
plugins.push(...createTypeScriptServicePlugins(ts));
44+
plugins.push(...createTypeScriptPlugins(ts));
4545
for (let i = 0; i < plugins.length; i++) {
4646
const plugin = plugins[i];
4747
if (plugin.name === 'typescript-semantic') {
@@ -54,7 +54,7 @@ export function createVueServicePlugins(
5454
}
5555
const languageService = (created.provide as import('volar-service-typescript').Provide)['typescript/languageService']();
5656
const vueOptions = getVueOptions(context.env);
57-
decorateLanguageServiceForVue(context.language.files, languageService, vueOptions, ts, false);
57+
decorateLanguageServiceForVue(context.language, languageService, vueOptions, ts, false);
5858
return created;
5959
},
6060
};
@@ -64,29 +64,29 @@ export function createVueServicePlugins(
6464
}
6565
else {
6666
plugins.push(
67-
createTypeScriptSyntacticServicePlugin(ts),
68-
createTypeScriptDocCommentTemplateServicePlugin(ts),
67+
createTypeScriptSyntacticPlugin(ts),
68+
createTypeScriptDocCommentTemplatePlugin(ts),
6969
);
7070
}
7171
plugins.push(
72-
createTypeScriptTwoslashQueriesServicePlugin(ts),
73-
createCssServicePlugin(),
74-
createPugFormatServicePlugin(),
75-
createJsonServicePlugin(),
76-
createVueTemplateServicePlugin('html', ts, getVueOptions, getTsPluginClient),
77-
createVueTemplateServicePlugin('pug', ts, getVueOptions, getTsPluginClient),
78-
createVueSfcServicePlugin(),
79-
createVueTwoslashQueriesServicePlugin(ts, getTsPluginClient),
80-
createVueReferencesCodeLensServicePlugin(),
81-
createVueDocumentDropServicePlugin(ts),
82-
createVueAutoDotValueServicePlugin(ts, getTsPluginClient),
83-
createVueAutoWrapParenthesesServicePlugin(ts),
84-
createVueAutoAddSpaceServicePlugin(),
85-
createVueVisualizeHiddenCallbackParamServicePlugin(),
86-
createVueDirectiveCommentsServicePlugin(),
87-
createVueExtractFileServicePlugin(ts, getTsPluginClient),
88-
createVueToggleVBindServicePlugin(ts),
89-
createEmmetServicePlugin(),
72+
createTypeScriptTwoslashQueriesPlugin(ts),
73+
createCssPlugin(),
74+
createPugFormatPlugin(),
75+
createJsonPlugin(),
76+
createVueTemplatePlugin('html', ts, getVueOptions, getTsPluginClient),
77+
createVueTemplatePlugin('pug', ts, getVueOptions, getTsPluginClient),
78+
createVueSfcPlugin(),
79+
createVueTwoslashQueriesPlugin(ts, getTsPluginClient),
80+
createVueReferencesCodeLensPlugin(),
81+
createVueDocumentDropPlugin(ts),
82+
createVueAutoDotValuePlugin(ts, getTsPluginClient),
83+
createVueAutoWrapParenthesesPlugin(ts),
84+
createVueAutoAddSpacePlugin(),
85+
createVueVisualizeHiddenCallbackParamPlugin(),
86+
createVueDirectiveCommentsPlugin(),
87+
createVueExtractFilePlugin(ts, getTsPluginClient),
88+
createVueToggleVBindPlugin(ts),
89+
createEmmetPlugin(),
9090
);
9191
return plugins;
9292
}
@@ -101,7 +101,7 @@ export function createDefaultGetTsPluginClient(
101101
}
102102
const requestContext = {
103103
typescript: ts,
104-
files: context.language.files,
104+
language: context.language,
105105
languageService: context.inject<(import('volar-service-typescript').Provide), 'typescript/languageService'>('typescript/languageService'),
106106
vueOptions: getVueOptions(context.env),
107107
isTsPlugin: false,

packages/language-service/lib/ideFeatures/nameCasing.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ export async function convertTagName(
1313
tsPluginClient: typeof import('@vue/typescript-plugin/lib/client') | undefined,
1414
) {
1515

16-
const sourceFile = context.language.files.get(uri);
16+
const sourceFile = context.language.scripts.get(uri);
1717
if (!sourceFile) {
1818
return;
1919
}
2020

21-
const rootCode = sourceFile?.generated?.code;
21+
const rootCode = sourceFile?.generated?.root;
2222
if (!(rootCode instanceof VueGeneratedCode)) {
2323
return;
2424
}
@@ -61,12 +61,12 @@ export async function convertAttrName(
6161
tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client'),
6262
) {
6363

64-
const sourceFile = context.language.files.get(uri);
64+
const sourceFile = context.language.scripts.get(uri);
6565
if (!sourceFile) {
6666
return;
6767
}
6868

69-
const rootCode = sourceFile?.generated?.code;
69+
const rootCode = sourceFile?.generated?.root;
7070
if (!(rootCode instanceof VueGeneratedCode)) {
7171
return;
7272
}
@@ -137,7 +137,7 @@ export async function detect(
137137
attr: AttrNameCasing[],
138138
}> {
139139

140-
const rootFile = context.language.files.get(uri)?.generated?.code;
140+
const rootFile = context.language.scripts.get(uri)?.generated?.root;
141141
if (!(rootFile instanceof VueGeneratedCode)) {
142142
return {
143143
tag: [],

0 commit comments

Comments
 (0)