From 19b2d38ca1064df7c9592ae4d4ce40dfedd9bdc3 Mon Sep 17 00:00:00 2001 From: changfeng Date: Mon, 25 Jul 2022 01:12:59 +0800 Subject: [PATCH 1/2] wip: support use latest ts version --- .../src/features/tsVersion.ts | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/extensions/vscode-vue-language-features/src/features/tsVersion.ts b/extensions/vscode-vue-language-features/src/features/tsVersion.ts index 0c5541253..9a7d6e7ed 100644 --- a/extensions/vscode-vue-language-features/src/features/tsVersion.ts +++ b/extensions/vscode-vue-language-features/src/features/tsVersion.ts @@ -1,3 +1,4 @@ +import * as path from 'path'; import * as vscode from 'vscode'; import { BaseLanguageClient } from 'vscode-languageclient'; import * as shared from '@volar/shared'; @@ -21,6 +22,8 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl const tsdk = getTsdk(); const defaultTsServer = shared.getWorkspaceTypescriptPath(defaultTsdk, (vscode.workspace.workspaceFolders ?? []).map(folder => folder.uri.fsPath)); const defaultTsVersion = defaultTsServer ? shared.getTypeScriptVersion(defaultTsServer) : undefined; + const latestTsPaths = getLatestTsPaths(); + const latestTsVersion = latestTsPaths ? shared.getTypeScriptVersion(latestTsPaths.serverPath) : undefined; const options: Record = {}; options[0] = { @@ -41,8 +44,15 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl detail: defaultTsdk, }; } - if (takeOverModeEnabled()) { + if (latestTsVersion) { options[3] = { + label: 'Use Latest Version', + description: latestTsVersion, + detail: latestTsPaths!.serverPath + }; + } + if (takeOverModeEnabled()) { + options[4] = { label: 'What is Takeover Mode?', }; } @@ -51,7 +61,7 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl if (select === undefined) return; // cancel - if (select === '3') { + if (select === '4') { vscode.env.openExternal(vscode.Uri.parse('https://vuejs.org/guide/typescript/overview.html#takeover-mode')); return; } @@ -163,3 +173,22 @@ function getTsdk() { function isUseWorkspaceTsdk(context: vscode.ExtensionContext) { return context.workspaceState.get('typescript.useWorkspaceTsdk', false); } + +function getLatestTsPaths() { + try { + const extension = vscode.extensions.getExtension('ms-vscode.vscode-typescript-next'); + if (extension) { + const tsLibPath = path.join(extension.extensionPath, 'node_modules/typescript/lib'); + const serverPath = shared.findTypescriptModulePathInLib(tsLibPath); + if (serverPath) { + return { + serverPath, + localizedPath: shared.findTypescriptLocalizedPathInLib(tsLibPath, vscode.env.language) + }; + } + } + } catch { + // noop + } + return undefined; +} From 71eee36d80d6e92f5490839d7b06e3b2aaaacfba Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Mon, 25 Jul 2022 08:50:09 +0800 Subject: [PATCH 2/2] feat: sync ts version pickup logic with vscode --- .../src/features/tsVersion.ts | 43 ++++++------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/extensions/vscode-vue-language-features/src/features/tsVersion.ts b/extensions/vscode-vue-language-features/src/features/tsVersion.ts index 9a7d6e7ed..608b3e904 100644 --- a/extensions/vscode-vue-language-features/src/features/tsVersion.ts +++ b/extensions/vscode-vue-language-features/src/features/tsVersion.ts @@ -22,8 +22,6 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl const tsdk = getTsdk(); const defaultTsServer = shared.getWorkspaceTypescriptPath(defaultTsdk, (vscode.workspace.workspaceFolders ?? []).map(folder => folder.uri.fsPath)); const defaultTsVersion = defaultTsServer ? shared.getTypeScriptVersion(defaultTsServer) : undefined; - const latestTsPaths = getLatestTsPaths(); - const latestTsVersion = latestTsPaths ? shared.getTypeScriptVersion(latestTsPaths.serverPath) : undefined; const options: Record = {}; options[0] = { @@ -44,15 +42,8 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl detail: defaultTsdk, }; } - if (latestTsVersion) { - options[3] = { - label: 'Use Latest Version', - description: latestTsVersion, - detail: latestTsPaths!.serverPath - }; - } if (takeOverModeEnabled()) { - options[4] = { + options[3] = { label: 'What is Takeover Mode?', }; } @@ -61,7 +52,7 @@ export async function register(cmd: string, context: vscode.ExtensionContext, cl if (select === undefined) return; // cancel - if (select === '4') { + if (select === '3') { vscode.env.openExternal(vscode.Uri.parse('https://vuejs.org/guide/typescript/overview.html#takeover-mode')); return; } @@ -158,6 +149,17 @@ function getWorkspaceTsPaths(useDefault = false) { } function getVscodeTsPaths() { + const nightly = vscode.extensions.getExtension('ms-vscode.vscode-typescript-next'); + if (nightly) { + const tsLibPath = path.join(nightly.extensionPath, 'node_modules/typescript/lib'); + const serverPath = shared.findTypescriptModulePathInLib(tsLibPath); + if (serverPath) { + return { + serverPath, + localizedPath: shared.findTypescriptLocalizedPathInLib(tsLibPath, vscode.env.language) + }; + } + } return { serverPath: shared.getVscodeTypescriptPath(vscode.env.appRoot), localizedPath: shared.getVscodeTypescriptLocalizedPath(vscode.env.appRoot, vscode.env.language), @@ -173,22 +175,3 @@ function getTsdk() { function isUseWorkspaceTsdk(context: vscode.ExtensionContext) { return context.workspaceState.get('typescript.useWorkspaceTsdk', false); } - -function getLatestTsPaths() { - try { - const extension = vscode.extensions.getExtension('ms-vscode.vscode-typescript-next'); - if (extension) { - const tsLibPath = path.join(extension.extensionPath, 'node_modules/typescript/lib'); - const serverPath = shared.findTypescriptModulePathInLib(tsLibPath); - if (serverPath) { - return { - serverPath, - localizedPath: shared.findTypescriptLocalizedPathInLib(tsLibPath, vscode.env.language) - }; - } - } - } catch { - // noop - } - return undefined; -}