Skip to content

Commit a94aed1

Browse files
feat: upgrade to Volar 2.3 alpha (#4422)
1 parent d475efc commit a94aed1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+676
-688
lines changed

extensions/vscode/package.json

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,6 @@
244244
"vue"
245245
]
246246
},
247-
"vue.server.maxFileSize": {
248-
"type": "number",
249-
"default": 20971520,
250-
"description": "Maximum file size for Vue Language Server to load. (default: 20MB)"
251-
},
252247
"vue.server.maxOldSpaceSize": {
253248
"type": [
254249
"number",
@@ -342,11 +337,6 @@
342337
"default": "autoKebab",
343338
"description": "Preferred attr name case."
344339
},
345-
"vue.autoInsert.parentheses": {
346-
"type": "boolean",
347-
"default": true,
348-
"description": "Auto-wrap `()` to As Expression in interpolations for fix issue #520."
349-
},
350340
"vue.autoInsert.dotValue": {
351341
"type": "boolean",
352342
"default": false,
@@ -517,7 +507,7 @@
517507
"devDependencies": {
518508
"@types/semver": "^7.5.3",
519509
"@types/vscode": "^1.82.0",
520-
"@volar/vscode": "~2.2.4",
510+
"@volar/vscode": "~2.3.0-alpha.0",
521511
"@vue/language-core": "2.0.19",
522512
"@vue/language-server": "2.0.19",
523513
"@vue/typescript-plugin": "2.0.19",

extensions/vscode/src/common.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang
240240

241241
if (!enabledHybridMode) {
242242
lsp.activateTsConfigStatusItem(selectors, 'vue.tsconfig', client);
243-
lsp.activateTsVersionStatusItem(selectors, 'vue.tsversion', context, client, text => 'TS ' + text);
243+
lsp.activateTsVersionStatusItem(selectors, 'vue.tsversion', context, text => 'TS ' + text);
244244
lsp.activateFindFileReferences('vue.findAllFileReferences', client);
245245
}
246246

@@ -442,7 +442,6 @@ async function getInitializationOptions(
442442
): Promise<VueInitializationOptions> {
443443
return {
444444
typescript: { tsdk: (await lsp.getTsdk(context)).tsdk },
445-
maxFileSize: config.server.maxFileSize,
446445
vue: {
447446
hybridMode,
448447
},

extensions/vscode/src/config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ export const config = {
1919
includeLanguages: string[];
2020
hybridMode: 'auto' | 'typeScriptPluginOnly' | boolean;
2121
maxOldSpaceSize: number;
22-
maxFileSize: number;
2322
}> {
2423
return _config().get('server')!;
2524
},

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"devDependencies": {
2323
"@lerna-lite/cli": "latest",
2424
"@lerna-lite/publish": "latest",
25-
"@volar/language-service": "~2.2.4",
25+
"@volar/language-service": "~2.3.0-alpha.0",
2626
"@volar/tsl-config": "latest",
2727
"tsl": "latest",
2828
"typescript": "latest",

packages/component-meta/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export * from './lib/types';
1010
export const createComponentMetaCheckerByJsonConfig = createCheckerByJson;
1111

1212
/**
13-
* @deprecated Use `createCheckerByJson` instead.
13+
* @deprecated Use `createChecker` instead.
1414
*/
1515
export const createComponentMetaChecker = createChecker;
1616

packages/component-meta/lib/base.ts

Lines changed: 41 additions & 22 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 { createTypeScriptLanguage } from '@volar/typescript';
6+
import { TypeScriptProjectHost, createLanguageServiceHost, resolveFileLanguageId } from '@volar/typescript';
77

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

7373
const scriptSnapshots = new Map<string, ts.IScriptSnapshot>();
74-
const projectHost: vue.TypeScriptProjectHost = {
75-
...ts.sys,
76-
configFileName,
74+
const projectHost: TypeScriptProjectHost = {
7775
getCurrentDirectory: () => rootPath,
7876
getProjectVersion: () => projectVersion.toString(),
7977
getCompilationSettings: () => parsedCommandLine.options,
@@ -88,12 +86,10 @@ function createCheckerWorker(
8886
}
8987
return scriptSnapshots.get(fileName);
9088
},
91-
scriptIdToFileName: id => id,
92-
fileNameToScriptId: id => id,
9389
};
9490

9591
return {
96-
...baseCreate(ts, projectHost, parsedCommandLine.vueOptions, checkerOptions, globalComponentName),
92+
...baseCreate(ts, configFileName, projectHost, parsedCommandLine.vueOptions, checkerOptions, globalComponentName),
9793
updateFile(fileName: string, text: string) {
9894
fileName = fileName.replace(windowsPathReg, '/');
9995
scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text));
@@ -118,16 +114,17 @@ function createCheckerWorker(
118114

119115
export function baseCreate(
120116
ts: typeof import('typescript'),
121-
host: vue.TypeScriptProjectHost,
117+
configFileName: string | undefined,
118+
projectHost: TypeScriptProjectHost,
122119
vueCompilerOptions: vue.VueCompilerOptions,
123120
checkerOptions: MetaCheckerOptions,
124121
globalComponentName: string,
125122
) {
126123
const globalComponentSnapshot = ts.ScriptSnapshot.fromString('<script setup lang="ts"></script>');
127124
const metaSnapshots: Record<string, ts.IScriptSnapshot> = {};
128-
const getScriptFileNames = host.getScriptFileNames;
129-
const getScriptSnapshot = host.getScriptSnapshot;
130-
host.getScriptFileNames = () => {
125+
const getScriptFileNames = projectHost.getScriptFileNames;
126+
const getScriptSnapshot = projectHost.getScriptSnapshot;
127+
projectHost.getScriptFileNames = () => {
131128
const names = getScriptFileNames();
132129
return [
133130
...names,
@@ -136,7 +133,7 @@ export function baseCreate(
136133
getMetaFileName(globalComponentName),
137134
];
138135
};
139-
host.getScriptSnapshot = fileName => {
136+
projectHost.getScriptSnapshot = fileName => {
140137
if (isMetaFileName(fileName)) {
141138
if (!metaSnapshots[fileName]) {
142139
metaSnapshots[fileName] = ts.ScriptSnapshot.fromString(getMetaScriptContent(fileName));
@@ -151,20 +148,42 @@ export function baseCreate(
151148
}
152149
};
153150

154-
const vueLanguagePlugin = vue.createVueLanguagePlugin(
151+
const vueLanguagePlugin = vue.createVueLanguagePlugin<string>(
155152
ts,
156153
id => id,
157154
ts.sys.useCaseSensitiveFileNames,
158-
() => host.getProjectVersion?.() ?? '',
159-
() => host.getScriptFileNames(),
160-
host.getCompilationSettings(),
155+
() => projectHost.getProjectVersion?.() ?? '',
156+
() => projectHost.getScriptFileNames(),
157+
projectHost.getCompilationSettings(),
161158
vueCompilerOptions,
162159
);
163-
const language = createTypeScriptLanguage(
164-
ts,
165-
[vueLanguagePlugin],
166-
host,
160+
const language = vue.createLanguage(
161+
[
162+
vueLanguagePlugin,
163+
{
164+
getLanguageId(fileName) {
165+
return resolveFileLanguageId(fileName);
166+
},
167+
},
168+
],
169+
new vue.FileMap(ts.sys.useCaseSensitiveFileNames),
170+
fileName => {
171+
const snapshot = projectHost.getScriptSnapshot(fileName);
172+
if (snapshot) {
173+
language.scripts.set(fileName, snapshot);
174+
}
175+
else {
176+
language.scripts.delete(fileName);
177+
}
178+
},
167179
);
180+
language.typescript = {
181+
sys: ts.sys,
182+
configFileName,
183+
asFileName: s => s,
184+
asScriptId: s => s,
185+
...createLanguageServiceHost(ts, ts.sys, language, s => s, projectHost),
186+
};
168187
const { languageServiceHost } = language.typescript!;
169188
const tsLs = ts.createLanguageService(languageServiceHost);
170189

@@ -311,7 +330,7 @@ ${vueCompilerOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode}
311330

312331
// fill defaults
313332
const printer = ts.createPrinter(checkerOptions.printer);
314-
const snapshot = host.getScriptSnapshot(componentPath)!;
333+
const snapshot = projectHost.getScriptSnapshot(componentPath)!;
315334

316335
const vueFile = language.scripts.get(componentPath)?.generated?.root;
317336
const vueDefaults = vueFile && exportName === 'default'
@@ -460,7 +479,7 @@ function createSchemaResolvers(
460479
symbolNode: ts.Expression,
461480
{ rawType, schema: options, noDeclarations }: MetaCheckerOptions,
462481
ts: typeof import('typescript'),
463-
language: vue.Language,
482+
language: vue.Language<string>,
464483
) {
465484
const visited = new Set<ts.Type>();
466485

packages/component-meta/lib/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type * as ts from 'typescript';
22

3-
export type ComponentMetaChecker = ReturnType<typeof import('./base')['baseCreate']>;
3+
export type ComponentMetaChecker = ReturnType<typeof import('./base')['createCheckerBase']>;
44

55
export interface Declaration {
66
file: string;

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.2.4",
15+
"@volar/typescript": "~2.3.0-alpha.0",
1616
"@vue/language-core": "2.0.19",
1717
"path-browserify": "^1.0.1",
1818
"vue-component-type-helpers": "2.0.19"

packages/component-meta/tests/index.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as path from 'path';
22
import { describe, expect, test } from 'vitest';
3-
import { createComponentMetaChecker, createComponentMetaCheckerByJsonConfig, MetaCheckerOptions, ComponentMetaChecker, TypeMeta } from '..';
3+
import { createChecker, createCheckerByJson, MetaCheckerOptions, ComponentMetaChecker, TypeMeta } from '..';
44

55
const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describe(`vue-component-meta ${withTsconfig ? 'with tsconfig' : 'without tsconfig'}`, () => {
66

@@ -856,11 +856,11 @@ const checkerOptions: MetaCheckerOptions = {
856856
schema: { ignore: ['MyIgnoredNestedProps'] },
857857
printer: { newLine: 1 },
858858
};
859-
const tsconfigChecker = createComponentMetaChecker(
859+
const tsconfigChecker = createChecker(
860860
path.resolve(__dirname, '../../../test-workspace/component-meta/tsconfig.json'),
861861
checkerOptions,
862862
);
863-
const noTsConfigChecker = createComponentMetaCheckerByJsonConfig(
863+
const noTsConfigChecker = createCheckerByJson(
864864
path.resolve(__dirname, '../../../test-workspace/component-meta'),
865865
{
866866
"extends": "../tsconfig.json",

packages/language-core/lib/languageModule.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,20 @@ function getFileRegistryKey(
5151
return JSON.stringify(values);
5252
}
5353

54-
export interface _Plugin extends LanguagePlugin<VueVirtualCode> {
54+
export interface _Plugin<T> extends LanguagePlugin<T, VueVirtualCode> {
5555
getCanonicalFileName: (fileName: string) => string;
5656
pluginContext: Parameters<VueLanguagePlugin>[0];
5757
}
5858

59-
export function createVueLanguagePlugin(
59+
export function createVueLanguagePlugin<T>(
6060
ts: typeof import('typescript'),
61-
getFileName: (scriptId: string) => string,
61+
asFileName: (scriptId: T) => string,
6262
useCaseSensitiveFileNames: boolean,
6363
getProjectVersion: () => string,
6464
getScriptFileNames: () => string[] | Set<string>,
6565
compilerOptions: ts.CompilerOptions,
6666
vueCompilerOptions: VueCompilerOptions,
67-
): _Plugin {
67+
): _Plugin<T> {
6868
const pluginContext: Parameters<VueLanguagePlugin>[0] = {
6969
modules: {
7070
'@vue/compiler-dom': vueCompilerOptions.target < 3
@@ -94,19 +94,19 @@ export function createVueLanguagePlugin(
9494
getCanonicalFileName,
9595
pluginContext,
9696
getLanguageId(scriptId) {
97-
if (vueCompilerOptions.extensions.some(ext => scriptId.endsWith(ext))) {
97+
if (vueCompilerOptions.extensions.some(ext => asFileName(scriptId).endsWith(ext))) {
9898
return 'vue';
9999
}
100-
if (vueCompilerOptions.vitePressExtensions.some(ext => scriptId.endsWith(ext))) {
100+
if (vueCompilerOptions.vitePressExtensions.some(ext => asFileName(scriptId).endsWith(ext))) {
101101
return 'markdown';
102102
}
103-
if (vueCompilerOptions.petiteVueExtensions.some(ext => scriptId.endsWith(ext))) {
103+
if (vueCompilerOptions.petiteVueExtensions.some(ext => asFileName(scriptId).endsWith(ext))) {
104104
return 'html';
105105
}
106106
},
107107
createVirtualCode(scriptId, languageId, snapshot) {
108108
if (languageId === 'vue' || languageId === 'markdown' || languageId === 'html') {
109-
const fileName = getFileName(scriptId);
109+
const fileName = asFileName(scriptId);
110110
const projectVersion = getProjectVersion();
111111
if (projectVersion !== canonicalRootFileNamesVersion) {
112112
canonicalRootFileNames = new Set([...getScriptFileNames()].map(getCanonicalFileName));
@@ -116,7 +116,7 @@ export function createVueLanguagePlugin(
116116
pluginContext.globalTypesHolder = fileName;
117117
}
118118
const fileRegistry = getFileRegistry(pluginContext.globalTypesHolder === fileName);
119-
const code = fileRegistry.get(scriptId);
119+
const code = fileRegistry.get(fileName);
120120
if (code) {
121121
code.update(snapshot);
122122
return code;
@@ -134,7 +134,7 @@ export function createVueLanguagePlugin(
134134
: [vueSfcPlugin, ...basePlugins],
135135
ts,
136136
);
137-
fileRegistry.set(scriptId, code);
137+
fileRegistry.set(fileName, code);
138138
return code;
139139
}
140140
}

0 commit comments

Comments
 (0)