From d2a747372f1a62ee254e54cd8dd397d812c1f7b8 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:46:20 +0800 Subject: [PATCH] feat: add install vscode command (#2135) --- package.json | 4 ++- scripts/build.mjs | 60 ++++++++++++++++---------------------------- scripts/builders.mjs | 29 ++++++++++++++++----- 3 files changed, 47 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 7ad58ece..69953222 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "fmt": "cargo fmt --all && npx prettier --write tools/**/*.{js,mjs,cjs,ts,mts,cts} editors/vscode/**/*.{js,mjs,cjs,ts,mts,cts}", "fmt:check": "cargo fmt --check --all && prettier --check tools/**/*.{js,mjs,cjs,ts,mts,cts} editors/vscode/**/*.{js,mjs,cjs,ts,mts,cts}", "prelaunch:vscode": "node scripts/build.mjs prelaunch:vscode", + "prelaunch:vscode-release": "node scripts/build.mjs prelaunch:vscode-release", + "install:vscode": "node scripts/build.mjs install:vscode", "build:lsp:debug": "node scripts/build.mjs build:lsp:debug", "build:editor-tools": "node scripts/build.mjs build:editor-tools", "build:preview": "node scripts/build.mjs build:preview", @@ -64,4 +66,4 @@ "vite-plugin-wasm": "^3.2.2", "vitest": "^3.0.5" } -} \ No newline at end of file +} diff --git a/scripts/build.mjs b/scripts/build.mjs index 61e98f86..e2548b47 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -1,43 +1,25 @@ import * as build from "./builders.mjs"; -if (process.argv.includes("build:l10n")) { - await build.buildL10n(); -} +const kind = process.argv[2]; +const vector = { + "build:l10n": build.buildL10n, + "build:syntax": build.buildSyntax, + "build:preview": build.buildPreview, + "build:editor-tools": build.buildEditorTools, + "build:vscode:web": build.buildTinymistVscodeWeb, + "build:vscode:system": build.buildTinymistVscodeSystem, + "build:lsp:debug": () => build.buildLspBinary("debug"), + "prelaunch:vscode": () => build.prelaunchVscode("debug"), + "prelaunch:vscode-release": () => build.prelaunchVscode("release"), + "install:vscode": () => build.installVscode("release"), + "build:web:base": build.buildWebLspBinaryBase, + "build:web": build.buildTinymistVscodeWeb, +}; -if (process.argv.includes("build:syntax")) { - await build.buildSyntax(); +const fn = vector[kind]; +if (fn) { + await fn(); +} else { + console.error(`Unknown command: ${kind}`); + process.exit(1); } - -if (process.argv.includes("build:preview")) { - await build.buildPreview(); -} - -if (process.argv.includes("build:editor-tools")) { - await build.buildEditorTools(); -} - -if (process.argv.includes("build:vscode:web")) { - await build.buildTinymistVscodeWeb(); -} - -if (process.argv.includes("build:vscode:system")) { - await build.buildTinymistVscodeSystem(); -} - -if (process.argv.includes("build:lsp:debug")) { - await build.buildDebugLspBinary(); -} - -if (process.argv.includes("prelaunch:vscode")) { - await build.prelaunchVscode(); -} - -if (process.argv.includes("build:web:base")) { - await build.buildWebLspBinaryBase(); -} - -if (process.argv.includes("build:web")) { - await build.buildTinymistVscodeWeb(); -} - -// build:editor-tools diff --git a/scripts/builders.mjs b/scripts/builders.mjs index f0fff2be..f9e9bf5f 100644 --- a/scripts/builders.mjs +++ b/scripts/builders.mjs @@ -127,6 +127,8 @@ export async function checkVersion() { `Version mismatch: ${cargoVersion} (in Cargo.toml) !== ${pkgVersion} (in package.json)`, ); } + + return { cargoVersion, pkgVersion }; } export async function buildTinymistVscodeWebBase() { @@ -157,8 +159,8 @@ export async function buildTinymistVscodeSystem() { ]); } -export async function buildDebugLspBinary() { - await spawnAsync("lsp:debug", "cargo build -p tinymist-cli --color=always", { +export async function buildLspBinary(kind) { + await spawnAsync(`lsp:${kind}`, `cargo build -p tinymist-cli --color=always --profile=${kind}`, { env: { ...process.env, FORCE_COLOR: "1", @@ -169,10 +171,10 @@ export async function buildDebugLspBinary() { await Promise.all([ fs.copyFile( - path.resolve(cwd, `target/debug/${binName}`), + path.resolve(cwd, `target/${kind}/${binName}`), path.resolve(vscodeDir, `out/${binName}`), ), - process.platform === "win32" + process.platform === "win32" && kind === "debug" ? [ fs.copyFile( path.resolve(cwd, `target/debug/tinymist.pdb`), @@ -183,8 +185,23 @@ export async function buildDebugLspBinary() { ]); } -export async function prelaunchVscode() { - await Promise.all([buildTinymistVscodeSystem(), buildDebugLspBinary()]); +export async function prelaunchVscode(kind) { + await Promise.all([buildTinymistVscodeSystem(), buildLspBinary(kind)]); +} + +export async function installVscode(kind) { + const [{ pkgVersion }, ..._rest] = await Promise.all([ + checkVersion(), + buildTinymistVscodeSystem(), + buildLspBinary(kind), + ]); + await spawnAsync("package:vscode", "cd editors/vscode && yarn package"); + + // install code + await spawnAsync( + "install:vscode", + `cd editors/vscode && code --install-extension tinymist-${pkgVersion}.vsix`, + ); } export async function buildWebLspBinaryBase() {