Skip to content

Commit 235de4c

Browse files
refactor(language-server): drop typescript.tsdk initialization option (#5409)
1 parent 0baa88c commit 235de4c

File tree

7 files changed

+31
-20
lines changed

7 files changed

+31
-20
lines changed

extensions/vscode/rolldown.config.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,17 @@ const config: RolldownOptions = {
6060
},
6161
},
6262
},
63+
{
64+
name: 'typescript',
65+
resolveId: {
66+
filter: {
67+
id: /^typescript$/,
68+
},
69+
handler() {
70+
return { id: './typescript.js', external: true };
71+
},
72+
},
73+
},
6374
],
6475
};
6576

extensions/vscode/src/languageClient.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import * as lsp from '@volar/vscode';
22
import type { VueInitializationOptions } from '@vue/language-server';
3+
import * as fs from 'node:fs';
4+
import * as path from 'node:path';
35
import {
46
executeCommand,
57
nextTick,
@@ -61,11 +63,20 @@ async function activateLc(
6163
const outputChannel = useOutputChannel('Vue Language Server');
6264
const selectors = config.server.includeLanguages;
6365

66+
// Setup typescript.js in production mode
67+
if (fs.existsSync(path.join(__dirname, 'server.js'))) {
68+
fs.writeFileSync(path.join(__dirname, 'typescript.js'), `module.exports = require("${vscode.env.appRoot.replace(/\\/g, '/')}/extensions/node_modules/typescript/lib/typescript.js");`);
69+
}
70+
6471
client = createLc(
6572
'vue',
6673
'Vue',
6774
selectors,
68-
await getInitializationOptions(context),
75+
{
76+
typescript: {
77+
tsserverRequestCommand: 'typescript.tsserverRequest',
78+
},
79+
} satisfies VueInitializationOptions,
6980
6009,
7081
outputChannel
7182
);
@@ -82,7 +93,6 @@ async function activateLc(
8293
}
8394
await client.stop();
8495
outputChannel.clear();
85-
client.clientOptions.initializationOptions = await getInitializationOptions(context);
8696
await client.start();
8797
});
8898

@@ -101,12 +111,3 @@ async function activateLc(
101111
}
102112
}
103113
}
104-
105-
async function getInitializationOptions(context: vscode.ExtensionContext): Promise<VueInitializationOptions> {
106-
return {
107-
typescript: {
108-
tsdk: (await lsp.getTsdk(context))!.tsdk,
109-
tsserverRequestCommand: 'typescript.tsserverRequest',
110-
},
111-
};
112-
}

packages/language-server/lib/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export type VueInitializationOptions = {
22
typescript: {
3-
tsdk: string;
43
tsserverRequestCommand?: string | [request: string, response: string];
54
};
65
};

packages/language-server/node.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { LanguageServer } from '@volar/language-server';
22
import { createLanguageServiceEnvironment } from '@volar/language-server/lib/project/simpleProject';
3-
import { createConnection, createServer, loadTsdkByPath } from '@volar/language-server/node';
3+
import { createConnection, createServer } from '@volar/language-server/node';
44
import { createLanguage, createParsedCommandLine, createVueLanguagePlugin, getDefaultCompilerOptions } from '@vue/language-core';
55
import { createLanguageService, createUriMap, getHybridModeLanguageServicePlugins, type LanguageService } from '@vue/language-service';
6-
import type * as ts from 'typescript';
6+
import * as ts from 'typescript';
77
import { URI } from 'vscode-uri';
88
import type { VueInitializationOptions } from './lib/types';
99

@@ -15,14 +15,10 @@ connection.listen();
1515
connection.onInitialize(params => {
1616
const options: VueInitializationOptions = params.initializationOptions;
1717

18-
if (!options.typescript?.tsdk) {
19-
throw new Error('typescript.tsdk is required');
20-
}
2118
if (!options.typescript?.tsserverRequestCommand) {
2219
connection.console.warn('typescript.tsserverRequestCommand is required since >= 3.0 for complete TS features');
2320
}
2421

25-
const { typescript: ts } = loadTsdkByPath(options.typescript.tsdk, params.locale);
2622
const tsconfigProjects = createUriMap<LanguageService>();
2723
const file2ProjectInfo = new Map<string, Promise<ts.server.protocol.ProjectInfo | null>>();
2824

@@ -204,4 +200,3 @@ connection.onInitialize(params => {
204200
connection.onInitialized(server.initialized);
205201

206202
connection.onShutdown(server.shutdown);
207-

packages/language-server/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
"vscode-languageserver-protocol": "^3.17.5",
2626
"vscode-uri": "^3.0.8"
2727
},
28+
"peerDependencies": {
29+
"typescript": "*"
30+
},
2831
"devDependencies": {
2932
"@typescript/server-harness": "latest"
3033
}

packages/language-server/tests/server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export async function getLanguageServer(): Promise<{
5757
URI.file(testWorkspacePath).toString(),
5858
{
5959
typescript: {
60-
tsdk: path.dirname(require.resolve('typescript/lib/typescript.js')),
6160
tsserverRequestCommand: 'tsserverRequest',
6261
},
6362
} satisfies VueInitializationOptions,

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)