From deb1425e74fe67fae373193ff88d9d2d1537d0c5 Mon Sep 17 00:00:00 2001 From: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com> Date: Tue, 18 Feb 2025 20:16:48 +0800 Subject: [PATCH] feat: move less used codelens into a single "more" codelens (#1315) * feat: move less used codelens into a single "more" codelens * dev: update snapshot --- crates/tinymist-query/src/code_lens.rs | 3 +- editors/vscode/src/extension.ts | 136 ++++++++++++++----------- tests/e2e/main.rs | 4 +- 3 files changed, 80 insertions(+), 63 deletions(-) diff --git a/crates/tinymist-query/src/code_lens.rs b/crates/tinymist-query/src/code_lens.rs index 5179e928..1f2dff2b 100644 --- a/crates/tinymist-query/src/code_lens.rs +++ b/crates/tinymist-query/src/code_lens.rs @@ -33,9 +33,8 @@ impl SemanticRequest for CodeLensRequest { res.push(doc_lens("Profile", vec!["profile".into()])); res.push(doc_lens("Preview", vec!["preview".into()])); - res.push(doc_lens("Preview in ..", vec!["preview-in".into()])); res.push(doc_lens("Export PDF", vec!["export-pdf".into()])); - res.push(doc_lens("Export as ..", vec!["export-as".into()])); + res.push(doc_lens("More ..", vec!["more".into()])); Some(res) } diff --git a/editors/vscode/src/extension.ts b/editors/vscode/src/extension.ts index 964e699c..057ee797 100644 --- a/editors/vscode/src/extension.ts +++ b/editors/vscode/src/extension.ts @@ -529,6 +529,8 @@ async function commandRunCodeLens(...args: string[]): Promise { if (args.length === 0) { return; } + // res.push(doc_lens("Preview in ..", vec!["preview-in".into()])); + // res.push(doc_lens("Export as ..", vec!["export-as".into()])); switch (args[0]) { case "profile": { @@ -539,74 +541,90 @@ async function commandRunCodeLens(...args: string[]): Promise { void vscode.commands.executeCommand(`typst-preview.preview`); return; } - case "preview-in": { - // prompt for enum (doc, slide) with default - const mode = await vscode.window.showQuickPick(["doc", "slide"], { - title: "Preview Mode", - }); - if (mode === undefined) { - return; - } - const target = await vscode.window.showQuickPick(["tab", "browser"], { - title: "Target to preview in", - }); - - if (target === undefined) { - return; - } - - const command = - (target === "tab" ? "preview" : "browser") + (mode === "slide" ? "-slide" : ""); - - void vscode.commands.executeCommand(`typst-preview.${command}`); - return; - } case "export-pdf": { await commandShow("Pdf"); return; } - case "export-as": { - enum FastKind { - PDF = "PDF", - SVG = "SVG (First Page)", - SVGMerged = "SVG (Merged)", - PNG = "PNG (First Page)", - PNGMerged = "PNG (Merged)", - } - - const fmt = await vscode.window.showQuickPick( - [FastKind.PDF, FastKind.SVG, FastKind.SVGMerged, FastKind.PNG, FastKind.PNGMerged], - { - title: "Format to export as", - }, - ); - - switch (fmt) { - case undefined: - return; - case FastKind.PDF: - await commandShow("Pdf"); - return; - case FastKind.SVG: - await commandShow("Svg"); - return; - case FastKind.SVGMerged: - await commandShow("Svg", { page: { merged: { gap: "0pt" } } }); - return; - case FastKind.PNG: - await commandShow("Png"); - return; - case FastKind.PNGMerged: - await commandShow("Png", { page: { merged: { gap: "0pt" } } }); - return; - } - - return; + case "more": { + return codeLensMore(); } default: { console.error("unknown code lens command", args[0]); } } + + async function codeLensMore(): Promise { + const kPreviewIn = "Preview in .." as const; + const kExportAs = "Export as .." as const; + const moreCodeLens = [kPreviewIn, kExportAs] as const; + + const moreAction = (await vscode.window.showQuickPick(moreCodeLens, { + title: "More Actions", + })) as (typeof moreCodeLens)[number] | undefined; + + switch (moreAction) { + case kPreviewIn: { + // prompt for enum (doc, slide) with default + const mode = await vscode.window.showQuickPick(["doc", "slide"], { + title: "Preview Mode", + }); + if (mode === undefined) { + return; + } + const target = await vscode.window.showQuickPick(["tab", "browser"], { + title: "Target to preview in", + }); + + if (target === undefined) { + return; + } + + const command = + (target === "tab" ? "preview" : "browser") + (mode === "slide" ? "-slide" : ""); + + void vscode.commands.executeCommand(`typst-preview.${command}`); + return; + } + case kExportAs: { + enum FastKind { + PDF = "PDF", + SVG = "SVG (First Page)", + SVGMerged = "SVG (Merged)", + PNG = "PNG (First Page)", + PNGMerged = "PNG (Merged)", + } + + const fmt = await vscode.window.showQuickPick( + [FastKind.PDF, FastKind.SVG, FastKind.SVGMerged, FastKind.PNG, FastKind.PNGMerged], + { + title: "Format to export as", + }, + ); + + switch (fmt) { + case undefined: + return; + case FastKind.PDF: + await commandShow("Pdf"); + return; + case FastKind.SVG: + await commandShow("Svg"); + return; + case FastKind.SVGMerged: + await commandShow("Svg", { page: { merged: { gap: "0pt" } } }); + return; + case FastKind.PNG: + await commandShow("Png"); + return; + case FastKind.PNGMerged: + await commandShow("Png", { page: { merged: { gap: "0pt" } } }); + return; + } + + return; + } + } + } } function triggerSuggestAndParameterHints() { diff --git a/tests/e2e/main.rs b/tests/e2e/main.rs index 91a71de6..9e8ea49b 100644 --- a/tests/e2e/main.rs +++ b/tests/e2e/main.rs @@ -374,7 +374,7 @@ fn e2e() { }); let hash = replay_log(&tinymist_binary, &root.join("neovim")); - insta::assert_snapshot!(hash, @"siphash128_13:cd193b47cc7db3edf339eb048f34f4e2"); + insta::assert_snapshot!(hash, @"siphash128_13:10cac959ce095e74fb67e37b7aa16b7"); } { @@ -385,7 +385,7 @@ fn e2e() { }); let hash = replay_log(&tinymist_binary, &root.join("vscode")); - insta::assert_snapshot!(hash, @"siphash128_13:e9f262b45e59ec0c1f282f36103c419"); + insta::assert_snapshot!(hash, @"siphash128_13:2d215826585b3025e2f84937f4e92821"); } }