From ac71b7008e59fe5f81fff42b2c12a456fe2221c1 Mon Sep 17 00:00:00 2001 From: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com> Date: Tue, 3 Nov 2026 20:25:38 +0800 Subject: [PATCH] feat(plugins): Graphviz, Regex Tester, License Header and Harbor Night official plugins - Graphviz: `.dot` / `.gv` files open beside a live preview (a web view rendering with Graphviz compiled to WebAssembly) in any layout engine, with zoom, pan, Fit and SVG / PNG export through the save dialog. What Graphviz reports goes from the page to the plugin's code, which publishes it as problems on the named line. A DOT language, file icons and a New Graphviz Graph template. - Regex Tester: a tool window whose html view sends pattern, flags, text and replacement as you type; the plugin matches with Rust's regex (linear time) and answers with matches, groups and the replacement in UTF-16 offsets. Use Selection and Test Selection take the editor's selection. - License Header: files without a copyright / SPDX header are reported when they open and on save; a quick fix and a command add one in the file's comment syntax (after a shebang or encoding line); a project scan in a background task reports the rest. Holder and license are settings. - Harbor Night becomes an official plugin and the one source of the theme files: `openidea-plugin new --template theme`, the theme docs and tests start from it. - Tool windows' renders and events carry the window's active editor, as commands do, so a view's buttons can act on what the user is editing. - knip leaves plugins' web pages (projects of their own) alone. --- .../src/bin/openidea-plugin/templates.rs | 6 +- crates/ide-host/src/plugins/remote_host.rs | 2 + crates/ide-host/src/plugins/views.rs | 51 +- crates/ide-host/tests/plugins.rs | 184 ++++- docs/plugins/themes.md | 6 +- knip.ts | 2 + plugins/README.md | 19 +- .../excalidraw/web-src/vite.config.ts | 4 +- plugins/official/graphviz/.gitignore | 4 + plugins/official/graphviz/Cargo.lock | 334 +++++++++ plugins/official/graphviz/Cargo.toml | 22 + plugins/official/graphviz/NOTICE.md | 28 + plugins/official/graphviz/dist/plugin.wasm | Bin 0 -> 124849 bytes .../graphviz/dist/plugin.wasm.sources | 1 + plugins/official/graphviz/icons/graphviz.svg | 6 + .../official/graphviz/icons/graphviz_dark.svg | 6 + plugins/official/graphviz/languages/dot.toml | 8 + plugins/official/graphviz/plugin.toml | 38 + plugins/official/graphviz/src/lib.rs | 141 ++++ plugins/official/graphviz/templates/graph.dot | 11 + plugins/official/graphviz/web-src/index.html | 25 + .../official/graphviz/web-src/package.json | 19 + .../official/graphviz/web-src/pnpm-lock.yaml | 651 ++++++++++++++++++ plugins/official/graphviz/web-src/src/main.ts | 213 ++++++ .../graphviz/web-src/src/openidea.d.ts | 40 ++ .../graphviz/web-src/src/render.test.ts | 45 ++ .../official/graphviz/web-src/src/render.ts | 68 ++ .../official/graphviz/web-src/src/style.css | 89 +++ .../official/graphviz/web-src/tsconfig.json | 16 + .../official/graphviz/web-src/vite.config.ts | 18 + .../official/harbor-night}/README.md | 20 +- .../official/harbor-night}/plugin.toml | 13 +- .../themes/harbor-night.scheme.json | 0 .../themes/harbor-night.theme.json | 0 plugins/official/license-header/Cargo.lock | 333 +++++++++ plugins/official/license-header/Cargo.toml | 21 + .../official/license-header/dist/plugin.wasm | Bin 0 -> 143721 bytes .../license-header/dist/plugin.wasm.sources | 1 + plugins/official/license-header/plugin.toml | 35 + .../license-header/settings.schema.json | 21 + plugins/official/license-header/src/lib.rs | 395 +++++++++++ plugins/official/regex-tester/Cargo.lock | 373 ++++++++++ plugins/official/regex-tester/Cargo.toml | 23 + .../official/regex-tester/dist/plugin.wasm | Bin 0 -> 930798 bytes .../regex-tester/dist/plugin.wasm.sources | 1 + plugins/official/regex-tester/plugin.toml | 32 + .../regex-tester/settings.schema.json | 14 + plugins/official/regex-tester/src/lib.rs | 280 ++++++++ plugins/official/regex-tester/src/page.html | 377 ++++++++++ scripts/theme/theme.test.ts | 5 +- src-tauri/src/commands/plugin.rs | 11 +- src/features/plugins/backend.ts | 9 +- src/features/plugins/editorContext.ts | 23 + src/features/plugins/store.ts | 21 +- 54 files changed, 3966 insertions(+), 99 deletions(-) create mode 100644 plugins/official/graphviz/.gitignore create mode 100644 plugins/official/graphviz/Cargo.lock create mode 100644 plugins/official/graphviz/Cargo.toml create mode 100644 plugins/official/graphviz/NOTICE.md create mode 100644 plugins/official/graphviz/dist/plugin.wasm create mode 100644 plugins/official/graphviz/dist/plugin.wasm.sources create mode 100644 plugins/official/graphviz/icons/graphviz.svg create mode 100644 plugins/official/graphviz/icons/graphviz_dark.svg create mode 100644 plugins/official/graphviz/languages/dot.toml create mode 100644 plugins/official/graphviz/plugin.toml create mode 100644 plugins/official/graphviz/src/lib.rs create mode 100644 plugins/official/graphviz/templates/graph.dot create mode 100644 plugins/official/graphviz/web-src/index.html create mode 100644 plugins/official/graphviz/web-src/package.json create mode 100644 plugins/official/graphviz/web-src/pnpm-lock.yaml create mode 100644 plugins/official/graphviz/web-src/src/main.ts create mode 100644 plugins/official/graphviz/web-src/src/openidea.d.ts create mode 100644 plugins/official/graphviz/web-src/src/render.test.ts create mode 100644 plugins/official/graphviz/web-src/src/render.ts create mode 100644 plugins/official/graphviz/web-src/src/style.css create mode 100644 plugins/official/graphviz/web-src/tsconfig.json create mode 100644 plugins/official/graphviz/web-src/vite.config.ts rename {templates/theme-plugin => plugins/official/harbor-night}/README.md (74%) rename {templates/theme-plugin => plugins/official/harbor-night}/plugin.toml (50%) rename {templates/theme-plugin => plugins/official/harbor-night}/themes/harbor-night.scheme.json (100%) rename {templates/theme-plugin => plugins/official/harbor-night}/themes/harbor-night.theme.json (100%) create mode 100644 plugins/official/license-header/Cargo.lock create mode 100644 plugins/official/license-header/Cargo.toml create mode 100644 plugins/official/license-header/dist/plugin.wasm create mode 100644 plugins/official/license-header/dist/plugin.wasm.sources create mode 100644 plugins/official/license-header/plugin.toml create mode 100644 plugins/official/license-header/settings.schema.json create mode 100644 plugins/official/license-header/src/lib.rs create mode 100644 plugins/official/regex-tester/Cargo.lock create mode 100644 plugins/official/regex-tester/Cargo.toml create mode 100644 plugins/official/regex-tester/dist/plugin.wasm create mode 100644 plugins/official/regex-tester/dist/plugin.wasm.sources create mode 100644 plugins/official/regex-tester/plugin.toml create mode 100644 plugins/official/regex-tester/settings.schema.json create mode 100644 plugins/official/regex-tester/src/lib.rs create mode 100644 plugins/official/regex-tester/src/page.html create mode 100644 src/features/plugins/editorContext.ts diff --git a/crates/ide-host/src/bin/openidea-plugin/templates.rs b/crates/ide-host/src/bin/openidea-plugin/templates.rs index 2f9b504fe..fc23cdd05 100644 --- a/crates/ide-host/src/bin/openidea-plugin/templates.rs +++ b/crates/ide-host/src/bin/openidea-plugin/templates.rs @@ -45,7 +45,7 @@ pub fn render(template: Template, vars: &Vars) -> Vec<(String, String)> { .replace("__NAME__", vars.name) .replace("__CRATE__", &crate_name) .replace("__SDK__", vars.sdk.unwrap_or("")) - // The theme files come from templates/theme-plugin. + // The theme files come from the Harbor Night plugin. .replace("harbor-night", &slug) .replace("Harbor Night", vars.name) }; @@ -210,8 +210,8 @@ path = "themes/__SLUG__.theme.json" editor-scheme = "themes/__SLUG__.scheme.json" "#; -const THEME_UI: &str = include_str!("../../../../../templates/theme-plugin/themes/harbor-night.theme.json"); -const THEME_SCHEME: &str = include_str!("../../../../../templates/theme-plugin/themes/harbor-night.scheme.json"); +const THEME_UI: &str = include_str!("../../../../../plugins/official/harbor-night/themes/harbor-night.theme.json"); +const THEME_SCHEME: &str = include_str!("../../../../../plugins/official/harbor-night/themes/harbor-night.scheme.json"); const ICON_MANIFEST: &str = r#"id = "__ID__" name = "__NAME__" diff --git a/crates/ide-host/src/plugins/remote_host.rs b/crates/ide-host/src/plugins/remote_host.rs index 2514ee809..71be9116d 100644 --- a/crates/ide-host/src/plugins/remote_host.rs +++ b/crates/ide-host/src/plugins/remote_host.rs @@ -421,6 +421,7 @@ impl RemotePlugins { c.arg("view")?, c.arg("viewport")?, c.arg("doc")?, + c.arg("editor")?, ) .await } @@ -438,6 +439,7 @@ impl RemotePlugins { c.arg("view")?, c.arg("event")?, c.arg("doc")?, + c.arg("editor")?, ) .await } diff --git a/crates/ide-host/src/plugins/views.rs b/crates/ide-host/src/plugins/views.rs index fd4ed77cf..a62484ea0 100644 --- a/crates/ide-host/src/plugins/views.rs +++ b/crates/ide-host/src/plugins/views.rs @@ -2,16 +2,23 @@ //! window commands `plugin_view_render` / `plugin_view_event` serve them — //! the desktop for local projects, `openidea-server` for remote ones. -use super::PluginHost; +use super::{PluginEditor, PluginHost}; use ide_core::{DocId, IdeError, IdeResult}; use ide_plugin::{EditorContext, Invocation, View, ViewEvent, Viewport}; use std::sync::Arc; -/// The window's project, plus the document a custom editor shows. -pub fn view_invocation(host: &crate::Host, window: &str, doc: Option) -> IdeResult { +/// The window's project, plus the editor the call is about: the document a +/// custom editor shows, else (a tool window) the window's active editor, as +/// a command gets it, so a view's buttons can act on what the user is editing. +pub fn view_invocation( + host: &crate::Host, + window: &str, + doc: Option, + editor: Option, +) -> IdeResult { let project = host.project(window).ok(); let editor = match doc { - None => None, + None => editor.map(PluginEditor::context), Some(doc) => { let project = project.as_ref().ok_or_else(|| IdeError::not_found("no project is open in this window"))?; let info = project.documents.snapshot(doc)?; @@ -34,11 +41,13 @@ pub async fn render( view: String, viewport: Option, doc: Option, + editor: Option, ) -> IdeResult { - let invocation = view_invocation(host, window, doc)?; + let invocation = view_invocation(host, window, doc, editor)?; blocking(move || plugins.render_view(&plugin_id, &view, viewport, invocation)).await } +#[allow(clippy::too_many_arguments)] pub async fn event( host: &crate::Host, plugins: Arc, @@ -47,7 +56,37 @@ pub async fn event( view: String, event: ViewEvent, doc: Option, + editor: Option, ) -> IdeResult<()> { - let invocation = view_invocation(host, window, doc)?; + let invocation = view_invocation(host, window, doc, editor)?; blocking(move || plugins.view_event(&plugin_id, &view, event, invocation)).await } + +#[cfg(test)] +mod tests { + use super::*; + use crate::{Host, HostConfig}; + + #[tokio::test] + async fn a_tool_window_call_carries_the_active_editor() { + let tmp = tempfile::tempdir().unwrap(); + let host = Host::new(HostConfig { + config_dir: tmp.path().join("config"), + data_dir: tmp.path().join("data"), + local_data_dir: tmp.path().join("data"), + languages: Arc::new(ide_language::LanguageRegistry::load(None).unwrap()), + syntax: Arc::default(), + sink_for: Box::new(|_| Arc::new(ide_core::NullSink)), + owner: |w| w, + runtime: tokio::runtime::Handle::current(), + project_environment: false, + }); + let range = ide_core::Range::new(ide_core::Pos::new(1, 0), ide_core::Pos::new(1, 4)); + let active = PluginEditor { path: "/p/a.rs".into(), language: "rust".into(), selections: vec![range] }; + let inv = view_invocation(&host, "main", None, Some(active)).unwrap(); + let editor = inv.editor.expect("the active editor"); + assert_eq!((editor.path.to_string_lossy().as_ref(), editor.selections.as_slice()), ("/p/a.rs", &[range][..])); + assert_eq!(inv.client.as_deref(), Some("main")); + assert!(view_invocation(&host, "main", None, None).unwrap().editor.is_none()); + } +} diff --git a/crates/ide-host/tests/plugins.rs b/crates/ide-host/tests/plugins.rs index 7419fc65d..ae2c09ef6 100644 --- a/crates/ide-host/tests/plugins.rs +++ b/crates/ide-host/tests/plugins.rs @@ -116,7 +116,7 @@ fn sample(name: &str) -> PathBuf { } fn theme_template() -> PathBuf { - repo().join("templates/theme-plugin") + repo().join("plugins/official/harbor-night") } fn misbehave_pkg() -> PathBuf { @@ -640,7 +640,7 @@ fn contribution_only_plugins() { let theme = f.install(&theme_template()); assert_eq!(theme.status, PluginStatus::Static); assert!(!theme.has_code); - assert_eq!(f.theme_kinds("theme-harbor-night")[0].0, "harbor-night"); + assert_eq!(f.theme_kinds("openidea.harbor-night")[0].0, "harbor-night"); let lang = f.install(&sample("language-toy")); assert_eq!(lang.status, PluginStatus::Static); assert_eq!(f.host.languages()[0].id.as_str(), "toy"); @@ -648,14 +648,14 @@ fn contribution_only_plugins() { assert!(f.run("language-toy", "x", None).unwrap_err().contains("no code")); f.take_events(); - let active = f.host.set_theme(Some(("theme-harbor-night", "harbor-night"))).unwrap().unwrap(); + let active = f.host.set_theme(Some(("openidea.harbor-night", "harbor-night"))).unwrap().unwrap(); assert_eq!(active.theme.tokens["--bg-app"], "#14171c"); assert_eq!(active.theme.tokens["--syn-string"], "#9ccc7a"); assert!(f.take_events().iter().any(|(_, e)| matches!(e, PluginEvent::ThemeChanged { theme: Some(_) }))); assert_eq!(f.host.list(None).active_theme, Some(active)); // Disabling the plugin withdraws its theme and language. - f.host.set_enabled("theme-harbor-night", false).unwrap(); + f.host.set_enabled("openidea.harbor-night", false).unwrap(); assert!(f.host.active_theme().is_none()); assert!(f.take_events().iter().any(|(_, e)| *e == PluginEvent::ThemeChanged { theme: None })); f.host.set_enabled("language-toy", false).unwrap(); @@ -668,10 +668,10 @@ fn theme_template_installs_with_its_editor_scheme() { let f = fixture(Limits::default()); let info = f.install(&theme_template()); assert_eq!(info.status, PluginStatus::Static); - assert_eq!(f.theme_kinds("theme-harbor-night"), [("harbor-night".to_owned(), ThemeKind::Dark)]); + assert_eq!(f.theme_kinds("openidea.harbor-night"), [("harbor-night".to_owned(), ThemeKind::Dark)]); // The scheme file is copied with the package and merged over the UI tokens. - assert!(f.installed("theme-harbor-night").join("themes/harbor-night.scheme.json").is_file()); - let active = f.host.set_theme(Some(("theme-harbor-night", "harbor-night"))).unwrap().unwrap(); + assert!(f.installed("openidea.harbor-night").join("themes/harbor-night.scheme.json").is_file()); + let active = f.host.set_theme(Some(("openidea.harbor-night", "harbor-night"))).unwrap().unwrap(); let tokens = &active.theme.tokens; assert!( tokens.contains_key("--bg-app") && tokens.contains_key("--syn-keyword") && tokens.contains_key("--ansi-red") @@ -751,7 +751,7 @@ fn state_persists_across_restarts() { f.install(&sample("hello")); f.install(&theme_template()); f.host.set_enabled("hello", false).unwrap(); - f.host.set_theme(Some(("theme-harbor-night", "harbor-night"))).unwrap(); + f.host.set_theme(Some(("openidea.harbor-night", "harbor-night"))).unwrap(); f.host.set_theme_frame(Some("#1f252e")).unwrap(); let again = PluginHost::new(f.plugins_dir.clone(), Arc::new(|_: Option<&str>, _| {}), Limits::default()).unwrap(); @@ -1395,17 +1395,17 @@ fn catalog_lists_sample_packages() { let catalog = f.host.catalog(&[ repo().join("crates/ide-plugin/tests/fixtures"), - repo().join("templates"), + repo().join("plugins/official"), tmp.path().to_path_buf(), ]); let ids: Vec<&str> = catalog.iter().map(|c| c.id.as_str()).collect(); - for id in ["hello", "theme-harbor-night", "language-toy", "x"] { + for id in ["hello", "openidea.harbor-night", "language-toy", "x"] { assert!(ids.contains(&id), "{id} missing from {ids:?}"); } let hello = catalog.iter().find(|c| c.id == "hello").unwrap(); assert!(hello.has_code && hello.problem.is_none() && hello.change_notes.is_some()); assert_eq!(hello.contributions.iter().find(|c| c.point == "commands").unwrap().count, 2); - let theme = catalog.iter().find(|c| c.id == "theme-harbor-night").unwrap(); + let theme = catalog.iter().find(|c| c.id == "openidea.harbor-night").unwrap(); assert!(!theme.has_code); assert_eq!(theme.contributions[0].count, 1); let x = catalog.iter().find(|c| c.id == "x").unwrap(); @@ -1737,6 +1737,52 @@ fn official_checkstyle_checks_on_save() { assert_eq!(info.stats.crashes, 0); } +/// License Header: reported when a file opens, fixed through the provider, +/// and a project scan in a task reports the rest. +#[test] +fn official_license_header_reports_fixes_and_scans() { + let f = fixture(Limits::default()); + let info = f.install(&official("license-header")); + assert_eq!(info.status, PluginStatus::Inactive, "{:?}", info.error); + let a = f.project.join("src/a.rs"); + let b = f.project.join("src/b.py"); + std::fs::write(&a, "fn a() {}\n").unwrap(); + std::fs::write(&b, "#!/usr/bin/env python3\nprint()\n").unwrap(); + let diagnostics = |path: &Path| { + f.workspace.diagnostics.lock().get(&("openidea.license-header".into(), path.to_path_buf())).cloned() + }; + + f.host.post_events(Some("main"), vec![WorkbenchEvent::FileOpened(a.to_string_lossy().into_owned())]); + f.host.flush_events_at(Instant::now() + Duration::from_secs(3)); + assert!(f.host.wait_events(Duration::from_secs(20))); + let d = diagnostics(&a).expect("published on open"); + assert_eq!((d.len(), d[0].code.as_deref()), (1, Some("missing-license-header"))); + assert!(diagnostics(&b).is_none(), "only the opened file"); + + let doc = ide_plugin::ProviderDocument { + path: b.clone(), + language: "python".into(), + version: 1, + text: std::fs::read_to_string(&b).unwrap(), + }; + let actions = f.host.provide_code_actions(&doc, ide_core::Range::default()); + assert_eq!(actions.len(), 1, "{actions:?}"); + let edit = &actions[0].1.edits[0].1[0]; + assert_eq!(edit.range.start.line, 1, "after the shebang"); + assert!( + edit.new_text.starts_with("# Copyright (c) 20") + && edit.new_text.contains("# SPDX-License-Identifier: Apache-2.0") + ); + + f.host.run_command("openidea.license-header", "scan", None, f.inv()).unwrap(); + assert_eq!(diagnostics(&b).map(|d| d.len()), Some(1), "found by the scan"); + std::fs::write(&a, "// Copyright (c) 2026 X\nfn a() {}\n").unwrap(); + f.host.post_events(Some("main"), vec![WorkbenchEvent::FileSaved(a.to_string_lossy().into_owned())]); + f.host.flush_events_at(Instant::now() + Duration::from_secs(3)); + assert!(f.host.wait_events(Duration::from_secs(20))); + assert_eq!(diagnostics(&a).map(|d| d.len()), Some(0), "cleared once the header is there"); +} + /// MyBatis Navigator: interface ↔ XML through the providers, on a /// real project tree (`find-files`), within the edit-path budget. #[test] @@ -1868,6 +1914,34 @@ fn sample_plugin_tool_window_with_a_tree() { } } +/// Regex Tester: an `html` body its script talks to; the plugin answers in +/// view messages, in UTF-16 offsets. +#[test] +fn official_regex_tester_answers_its_page() { + let f = fixture(Limits::default()); + let info = f.install(&official("regex-tester")); + assert_eq!(info.status, PluginStatus::Inactive, "{:?}", info.error); + let view = f.host.render_view("openidea.regex-tester", "regex", None, f.inv()).unwrap(); + let ide_plugin::ViewBody::Html(page) = &view.body else { panic!("{view:?}") }; + assert!(page.contains("openidea.postMessage") && page.contains(r#"{"flags":"m"}"#)); + + f.take_events(); + let run = serde_json::json!({ "op": "run", "seq": 3, "pattern": r"(\d+)", "flags": "", "text": "é 12 345" }); + let event = ide_plugin::ViewEvent::Message { text: run.to_string() }; + f.host.view_event("openidea.regex-tester", "regex", event, f.inv()).unwrap(); + let reply = f + .take_events() + .into_iter() + .find_map(|(_, e)| match e { + PluginEvent::ViewMessage { view, message, .. } if view == "regex" => Some(message), + _ => None, + }) + .expect("a reply"); + let reply: serde_json::Value = serde_json::from_str(&reply).unwrap(); + assert_eq!((reply["seq"].clone(), reply["count"].clone()), (serde_json::json!(3), serde_json::json!(2))); + assert_eq!(reply["matches"][0]["groups"][0], serde_json::json!([2, 4])); +} + /// A tree filled from a pinned program's output, and a terminal for the /// activated entry in the invoking window, titled and sized by the plugin's /// settings (the `jobs` fixture). @@ -2075,34 +2149,8 @@ fn listing_while_projects_change_does_not_deadlock() { /// file icon, template and language — no code. #[test] fn official_excalidraw_installs_and_serves_its_page() { - // Its page is built by plugins/build.sh, not checked in: the package's own - // files, with a stand-in for the build (what build.sh checks it produces). let tmp = tempfile::tempdir().unwrap(); - let pkg = tmp.path().join("excalidraw"); - let src = official("excalidraw"); - for entry in std::fs::read_dir(&src).unwrap().flatten() { - let name = entry.file_name(); - if ["web", "web-src", "web.sources"].iter().any(|n| name == *n) { - continue; - } - let to = pkg.join(&name); - if entry.path().is_dir() { - copy_dir(&entry.path(), &to); - } else { - std::fs::create_dir_all(&pkg).unwrap(); - std::fs::copy(entry.path(), to).unwrap(); - } - } - std::fs::create_dir_all(pkg.join("web/assets")).unwrap(); - std::fs::create_dir_all(pkg.join("web/fonts/Virgil")).unwrap(); - std::fs::write( - pkg.join("web/index.html"), - r#""#, - ) - .unwrap(); - std::fs::write(pkg.join("web/assets/index.js"), "export {};").unwrap(); - std::fs::write(pkg.join("web/fonts/Virgil/Virgil-Regular.woff2"), b"wOF2").unwrap(); - + let pkg = with_stand_in_page(&official("excalidraw"), tmp.path()); let f = fixture(Limits::default()); let info = f.install(&pkg); assert_eq!(info.status, PluginStatus::Static, "{:?}", info.error); @@ -2122,6 +2170,66 @@ fn official_excalidraw_installs_and_serves_its_page() { assert_eq!(f.host.assets("openidea.excalidraw", "fileIcon/excalidraw/").unwrap().len(), 2); } +/// A copy of the official plugin at `src` in `dir`, with a stand-in for its +/// built page (`web/` is built by plugins/build.sh, not checked in; build.sh +/// checks what the build produces): an entry loading a script and a font by +/// relative URL. +fn with_stand_in_page(src: &Path, dir: &Path) -> PathBuf { + let pkg = dir.join(src.file_name().unwrap()); + std::fs::create_dir_all(&pkg).unwrap(); + for entry in std::fs::read_dir(src).unwrap().flatten() { + let name = entry.file_name(); + if ["web", "web-src", "web.sources", "target"].iter().any(|n| name == *n) { + continue; + } + let to = pkg.join(&name); + if entry.path().is_dir() { + copy_dir(&entry.path(), &to) + } else { + std::fs::copy(entry.path(), to).map(|_| ()).unwrap() + } + } + std::fs::create_dir_all(pkg.join("web/assets")).unwrap(); + std::fs::create_dir_all(pkg.join("web/fonts/Virgil")).unwrap(); + std::fs::write( + pkg.join("web/index.html"), + r#""#, + ) + .unwrap(); + std::fs::write(pkg.join("web/assets/index.js"), "export {};").unwrap(); + std::fs::write(pkg.join("web/fonts/Virgil/Virgil-Regular.woff2"), b"wOF2").unwrap(); + pkg +} + +/// Graphviz: a web view with code. What the page reports about the graph +/// becomes the previewed file's problems. +#[test] +fn official_graphviz_turns_its_pages_reports_into_problems() { + let tmp = tempfile::tempdir().unwrap(); + let f = fixture(Limits::default()); + let info = f.install(&with_stand_in_page(&official("graphviz"), tmp.path())); + assert_eq!(info.status, PluginStatus::Inactive, "{:?}", info.error); + assert_eq!(f.host.ui_items("customEditors")[0].decl["layout"], "split"); + assert!(f.host.languages().iter().any(|l| l.id.as_str() == "dot")); + assert!(f.host.web_page("openidea.graphviz", "preview").is_ok()); + + std::fs::write(f.project.join("flow.dot"), "digraph {\n a -> \n}\n").unwrap(); + let editor = f.workspace.open("flow.dot", &[]); + let inv = Invocation { editor: Some(editor), ..f.inv() }; + let report = + r#"{"op":"problems","items":[{"line":3,"message":"syntax error in line 3 near '}'","level":"error"}]}"#; + let event = ide_plugin::ViewEvent::Message { text: report.into() }; + f.host.view_event("openidea.graphviz", "preview", event, inv.clone()).unwrap(); + let path = f.project.join("flow.dot"); + let problems = + |f: &Fixture| f.workspace.diagnostics.lock().get(&("openidea.graphviz".into(), path.clone())).cloned(); + let d = problems(&f).expect("published"); + assert_eq!((d.len(), d[0].range.start.line), (1, 2)); + let cleared = ide_plugin::ViewEvent::Message { text: r#"{"op":"problems","items":[]}"#.into() }; + f.host.view_event("openidea.graphviz", "preview", cleared, inv).unwrap(); + assert_eq!(problems(&f).map(|d| d.len()), Some(0)); +} + /// Zips `dir` as an archiver does: the folder itself at the top, plus macOS metadata. fn zip_folder(dir: &Path, out: &Path) { use std::io::Write; diff --git a/docs/plugins/themes.md b/docs/plugins/themes.md index 090ab4af6..b11082a35 100644 --- a/docs/plugins/themes.md +++ b/docs/plugins/themes.md @@ -17,7 +17,8 @@ my-theme/ └─ my-theme.scheme.json # editor colours, optional (IntelliJ: .icls) ``` -The quickest way to start is to copy [`templates/theme-plugin`](../../templates/theme-plugin). +The quickest way to start is `openidea-plugin new --template theme`, or a copy of +[`plugins/official/harbor-night`](../../plugins/official/harbor-night). It contains *Harbor Night*, a complete example dark theme that sets every themeable token. The rest of this page covers the file format, the token reference, porting themes from IntelliJ IDEA and VS Code, and testing. @@ -106,7 +107,8 @@ built-in theme returns. There is no build step. The package *is* the folder. -1. Copy `templates/theme-plugin` and rename `id`, `name` and the theme files. +1. Run `openidea-plugin new --template theme` (or copy + `plugins/official/harbor-night`) and rename `id`, `name` and the theme files. 2. Edit the colours. Keep `kind` truthful (`light` for light backgrounds). 3. **Install:** *Settings › Plugins › ⚙ › Install Plugin from Disk…* (or the *Install Plugin from Disk…* action) and pick the package folder, or diff --git a/knip.ts b/knip.ts index cce08398d..600d52246 100644 --- a/knip.ts +++ b/knip.ts @@ -10,6 +10,8 @@ const config: KnipConfig = { "perf/**/*.ts", "e2e/**/*.ts", ], + // Plugins' web pages are projects of their own (own package.json, checked by plugins/build.sh and CI). + ignore: ["plugins/**/web-src/**"], ignoreExportsUsedInFile: true, // lint-staged formats Rust files with the toolchain's rustfmt. ignoreBinaries: ["rustfmt"], diff --git a/plugins/README.md b/plugins/README.md index 8823380f4..494e5bbd2 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -14,6 +14,7 @@ menus, settings) need no code at all. ``` plugins/ └─ official/ + ├─ harbor-night/ # data only: a colour theme (UI and editor scheme) ├─ material-icons/ # data only: a file icon theme ├─ solidity/ # language + syntax provider + run configurations ├─ string-tools/ # 26 text commands, versioned multi-cursor edits @@ -23,7 +24,10 @@ plugins/ ├─ ai-completion/ # inline completion over the network, secrets ├─ mybatis/ # navigation, gutter markers, completion across files ├─ csv-editor/ # custom editor sharing the text document - └─ excalidraw/ # web view custom editor, file icons, a template + ├─ excalidraw/ # web view custom editor, file icons, a template + ├─ graphviz/ # web view with code: live preview, problems from the page, a language + ├─ regex-tester/ # html view talking to its code, settings, the editor's selection + └─ license-header/ # file-opened events, quick fix, project scan in a task sdk/rust/openidea-plugin/ # the Rust SDK (host API, Plugin trait, mock host) crates/ide-plugin/tests/fixtures/ # test plugins: hello, jobs, language-toy, misbehave ``` @@ -384,7 +388,10 @@ plugin's editor, or through _Open With_ for `option`. For a custom editor `ctx.editor()` is its document: read it with `document()` and change it with `apply_edits(version, …)` — the text editor of the same file follows, Undo / Redo are one history with it, and Save, the dirty mark and the close -prompts are the document's. _Open as Text_ opens the text editor. +prompts are the document's. _Open as Text_ opens the text editor. For a +tool window `ctx.editor()` is the window's active text editor, as for a +command, so a view's buttons can act on what the user is editing (a click in +the tool window doesn't change which editor that is). `layout` puts a custom editor beside the text editor instead of in a tab of its own: with `"split"` or `"preview"` the file opens in the text editor, @@ -454,7 +461,9 @@ IDE shortcuts the page doesn't handle itself (Save, Close, Find Action…) still work while it has focus; editing keys (⌘C, ⌘V, ⌘Z…) stay with the page. With the `clipboard` capability the page may use `navigator.clipboard`. `plugins/official/excalidraw` is a complete example: a Vite + React page in -`web-src/`, built into `web/` by `plugins/build.sh`. The built page is not +`web-src/`, built into `web/` by `plugins/build.sh`. `plugins/official/graphviz` +pairs a page with code: the page renders (Graphviz compiled to WebAssembly) and +sends what Graphviz reports to the plugin, which publishes it as problems. The built page is not checked in (it is tens of MB): run `plugins/build.sh official/excalidraw` before installing the plugin from the repository. @@ -537,8 +546,8 @@ values (no `url()`, `;`, braces); `//` and `/* */` comments are allowed. A manifest theme entry may add `editor-scheme = "themes/x.scheme.json"` (editor colours, merged over the theme). Pick a theme in Settings › Plugins › _Apply_. -Start with `openidea-plugin new --template theme` (or -[`templates/theme-plugin`](../templates/theme-plugin)); the full guide, token +Start with `openidea-plugin new --template theme` (or a copy of +[`official/harbor-night`](official/harbor-night)); the full guide, token reference and IntelliJ / VS Code porting tables are in [`docs/plugins/themes.md`](../docs/plugins/themes.md). diff --git a/plugins/official/excalidraw/web-src/vite.config.ts b/plugins/official/excalidraw/web-src/vite.config.ts index c4249d400..fd731090e 100644 --- a/plugins/official/excalidraw/web-src/vite.config.ts +++ b/plugins/official/excalidraw/web-src/vite.config.ts @@ -1,6 +1,6 @@ /** - * Builds the page into ../web (checked in, like the official plugins' - * dist/plugin.wasm). Relative URLs throughout: the IDE serves the page from + * Builds the page into ../web (not checked in: plugins/build.sh builds it). + * Relative URLs throughout: the IDE serves the page from * the plugin package under its own URL scheme. Excalidraw's fonts are copied * next to it; the page points Excalidraw at them (src/assets.ts). */ diff --git a/plugins/official/graphviz/.gitignore b/plugins/official/graphviz/.gitignore new file mode 100644 index 000000000..2aa0170af --- /dev/null +++ b/plugins/official/graphviz/.gitignore @@ -0,0 +1,4 @@ +web-src/node_modules/ +# Built by plugins/build.sh, not checked in. +web/ +web.sources diff --git a/plugins/official/graphviz/Cargo.lock b/plugins/official/graphviz/Cargo.lock new file mode 100644 index 000000000..f7341f4a9 --- /dev/null +++ b/plugins/official/graphviz/Cargo.lock @@ -0,0 +1,334 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown", + "serde", + "serde_core", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "log" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" + +[[package]] +name = "macro-string" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b3a5bbb2f63aaa223a671ea1bd0e7bc16bd30ce387324cf63995deaddbbd2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "openidea-plugin" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "openidea-plugin-openidea-graphviz" +version = "0.1.0" +dependencies = [ + "openidea-plugin", + "serde_json", +] + +[[package]] +name = "prettyplease" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "wasm-encoder" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4495a6f85dd94c411c749303efcbc5defade0b0cbdbc0541495241ab917a9b5a" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86ff6668190d9fb70372b306b4f9fe8930f0e2f57ce72e4922bf2f117900949" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "974d643b125b272607e2fff8012ea14a8328acd7621e4bafa7afb32500052b1b" +dependencies = [ + "bitflags", + "hashbrown", + "indexmap", + "semver", +] + +[[package]] +name = "wit-bindgen" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85a987ab61d365382d25c7d47e26edd48941b3bf6e3fbf76eff918bc71dab06" +dependencies = [ + "bitflags", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e122e390603abfacd548027016cd0113a6e2bf2f8ce6bdd3658b013456ea8" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e26e13b9d972026778d2ffb7985736de116026fdc8d9464f966e12df2eb240" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a008a0d6b4840677326beb4edbeb210a2f1b7d0183fb7cc33f466b90fd7fb6" +dependencies = [ + "anyhow", + "macro-string", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078def49fdb49cab405c3006e05793b3fdaf7069126ba6b9c97d01ec8c98fe4c" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f0dc051466ffe46787721fca3d088536f158ae400be044f1b1c386ba9397ad" +dependencies = [ + "anyhow", + "hashbrown", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-ident", + "wasmparser", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/plugins/official/graphviz/Cargo.toml b/plugins/official/graphviz/Cargo.toml new file mode 100644 index 000000000..69c6235c7 --- /dev/null +++ b/plugins/official/graphviz/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "openidea-plugin-openidea-graphviz" +version = "0.1.0" +edition = "2024" +publish = false + +# A plugin builds on its own (target wasm32-wasip2), outside any IDE workspace. +[workspace] + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +openidea-plugin = { path = "../../../sdk/rust/openidea-plugin" } +serde_json = "1" + +[profile.release] +opt-level = "s" +lto = true +strip = true +codegen-units = 1 +panic = "abort" diff --git a/plugins/official/graphviz/NOTICE.md b/plugins/official/graphviz/NOTICE.md new file mode 100644 index 000000000..cf8b42986 --- /dev/null +++ b/plugins/official/graphviz/NOTICE.md @@ -0,0 +1,28 @@ +# Third-party software + +The page in `web/` is built from `web-src/` and bundles: + +- **Viz.js** (`@viz-js/viz` 3.31.0), MIT License, Copyright (c) Michael Daines — + https://github.com/mdaines/viz-js +- **Graphviz** 16.1.0, compiled to WebAssembly inside Viz.js, Eclipse Public License 1.0 — + https://graphviz.org, https://gitlab.com/graphviz/graphviz + +The MIT License: + +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software +> and associated documentation files (the "Software"), to deal in the Software without +> restriction, including without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +> Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or +> substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +> BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +> DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +The Eclipse Public License 1.0 is at https://www.eclipse.org/legal/epl-v10.html. Graphviz's +source code is available from the links above. diff --git a/plugins/official/graphviz/dist/plugin.wasm b/plugins/official/graphviz/dist/plugin.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fa2c8114e3846abbe9244214d6b59a223f906514 GIT binary patch literal 124849 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 + + + + + diff --git a/plugins/official/graphviz/icons/graphviz_dark.svg b/plugins/official/graphviz/icons/graphviz_dark.svg new file mode 100644 index 000000000..545c3b970 --- /dev/null +++ b/plugins/official/graphviz/icons/graphviz_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/plugins/official/graphviz/languages/dot.toml b/plugins/official/graphviz/languages/dot.toml new file mode 100644 index 000000000..fa0f70c9f --- /dev/null +++ b/plugins/official/graphviz/languages/dot.toml @@ -0,0 +1,8 @@ +id = "dot" +name = "DOT" +extensions = ["dot", "gv"] +line-comment = "//" +block-comment = ["/*", "*/"] +indent = { tab-size = 4, insert-spaces = true } +# No DOT mode in CodeMirror: C's highlights the strings, comments, numbers and braces. +ui-mode = "C" diff --git a/plugins/official/graphviz/plugin.toml b/plugins/official/graphviz/plugin.toml new file mode 100644 index 000000000..04f87a2e9 --- /dev/null +++ b/plugins/official/graphviz/plugin.toml @@ -0,0 +1,38 @@ +id = "openidea.graphviz" +name = "Graphviz" +version = "0.1.0" +description = "Graphviz DOT files (.dot, .gv) with a live preview beside the text: rendered as you type with any layout engine, syntax errors in the editor and the Problems view, export to SVG and PNG." +authors = ["OpenIDEA contributors"] +license = "Apache-2.0" +change-notes = "0.1.0 — first release: live preview (Graphviz compiled to WebAssembly), layout engines, zoom, errors as problems, SVG and PNG export." +engines.openidea = "^1.0" +wasm = "dist/plugin.wasm" +activation = ["on-view:preview"] + +[capabilities] +# Problems: published for the project's file (project.read), on the lines +# Graphviz names (editor.read: the previewed text). +required = ["editor.read", "project.read"] + +[[contributes.customEditors]] +id = "preview" +title = "Preview" +patterns = ["*.dot", "*.gv"] +priority = "default" +layout = "split" +web = "web/index.html" + +[[contributes.languages]] +path = "languages/dot.toml" + +[[contributes.fileIcons]] +id = "graphviz" +patterns = ["*.dot", "*.gv"] +icon = "icons/graphviz.svg" +iconDark = "icons/graphviz_dark.svg" + +[[contributes.fileTemplates]] +id = "graph" +name = "Graphviz Graph" +extension = "dot" +path = "templates/graph.dot" diff --git a/plugins/official/graphviz/src/lib.rs b/plugins/official/graphviz/src/lib.rs new file mode 100644 index 000000000..cd76c6519 --- /dev/null +++ b/plugins/official/graphviz/src/lib.rs @@ -0,0 +1,141 @@ +//! Graphviz for OpenIDEA: `.dot` / `.gv` files open in the text editor with a +//! live preview beside them. The preview is a web page (`web-src/`: viz.js, +//! Graphviz compiled to WebAssembly) that renders the document as it changes; +//! what Graphviz reports it sends here, and the plugin publishes it as the +//! file's problems, on the line Graphviz names. + +use openidea_plugin::views::{View, ViewEvent, Viewport, Views}; +use openidea_plugin::{Diagnostic, Error, Invocation, Plugin, Position, Range, Severity, host, register_plugin}; +use serde_json::Value; + +pub const VIEW: &str = "preview"; +/// Problems published for one file at most. +const MAX_PROBLEMS: usize = 100; + +/// One message from Graphviz, as the page reports it. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Report { + /// 1-based, when Graphviz names one. + pub line: Option, + pub message: String, + pub error: bool, +} + +/// The page's `{"op": "problems", "items": [{"line", "message", "level"}]}`. +pub fn parse_reports(message: &str) -> Option> { + let v: Value = serde_json::from_str(message).ok()?; + if v.get("op").and_then(Value::as_str) != Some("problems") { + return None; + } + let items = v.get("items")?.as_array()?; + Some( + items + .iter() + .take(MAX_PROBLEMS) + .filter_map(|i| { + Some(Report { + line: i.get("line").and_then(Value::as_u64).and_then(|l| u32::try_from(l).ok()), + message: i.get("message")?.as_str()?.trim().to_owned(), + error: i.get("level").and_then(Value::as_str) != Some("warning"), + }) + }) + .collect(), + ) +} + +/// `reports` as diagnostics of `text`: on the named line (clamped to the +/// document), the whole of it; without a line, on the first. +pub fn diagnostics(text: &str, reports: &[Report]) -> Vec { + let lines: Vec<&str> = text.lines().collect(); + reports + .iter() + .map(|r| { + let line = r.line.map_or(0, |l| l.saturating_sub(1)).min(lines.len().saturating_sub(1) as u32); + let len = lines.get(line as usize).map_or(0, |l| l.encode_utf16().count() as u32); + Diagnostic { + range: Range::new(Position::new(line, 0), Position::new(line, len)), + severity: if r.error { Severity::Error } else { Severity::Warning }, + message: r.message.clone(), + code: Some("graphviz".into()), + } + }) + .collect() +} + +#[derive(Default)] +pub struct Graphviz; + +impl Plugin for Graphviz { + fn run_command(&mut self, id: &str, _ctx: &Invocation, _arg: Option<&str>) -> Result, Error> { + Err(Error::NotFound(format!("command {id}"))) + } +} + +impl Views for Graphviz { + fn render(&mut self, view: &str, _viewport: Option, _ctx: &Invocation) -> Result { + if view != VIEW { + return Err(Error::NotFound(view.into())); + } + // The preview is the plugin's web page; nothing is rendered here. + Ok(View::message("The preview is shown by the plugin's page.")) + } + + fn handle(&mut self, view: &str, event: ViewEvent, ctx: &Invocation) -> Result<(), Error> { + if view != VIEW { + return Err(Error::NotFound(view.into())); + } + let ViewEvent::Message(message) = event else { return Ok(()) }; + let Some(reports) = parse_reports(&message) else { return Ok(()) }; + let editor = ctx.editor().ok_or_else(|| Error::Invalid("the preview needs its document".into()))?; + let text = editor.document()?.text; + // A file outside the open projects has no problems to publish to; its + // preview shows what went wrong anyway. + match host::publish_diagnostics(&editor.path(), &diagnostics(&text, &reports)) { + Err(Error::Invalid(_)) => Ok(()), + other => other, + } + } +} + +register_plugin!(Graphviz, views); + +#[cfg(test)] +mod tests { + use super::*; + use openidea_plugin::mock::MockHost; + + #[test] + fn reports_become_problems_on_their_line() { + let msg = r#"{"op":"problems","items":[ + {"line":2,"message":"syntax error in line 2 near '}'","level":"error"}, + {"line":null,"message":"Warning: no such engine","level":"warning"}, + {"line":99,"message":"past the end"}, + {"nope":1} + ]}"#; + let reports = parse_reports(msg).unwrap(); + assert_eq!(reports.len(), 3); + let d = diagnostics("digraph {\n a -> }\n", &reports); + assert_eq!( + (d[0].range, d[0].severity), + (Range::new(Position::new(1, 0), Position::new(1, 8)), Severity::Error) + ); + assert_eq!((d[1].range.start.line, d[1].severity), (0, Severity::Warning)); + assert_eq!(d[2].range.start.line, 1, "clamped to the last line"); + assert!(parse_reports(r#"{"op":"other"}"#).is_none()); + assert!(parse_reports("garbage").is_none()); + assert!(diagnostics("", &reports).iter().all(|d| d.range.start.line == 0)); + } + + #[test] + fn publishes_for_the_previewed_file_and_clears() { + let host = MockHost::install().with_capabilities(&["editor.read", "project.read"]); + host.open_editor("/project/a.dot", "dot", "digraph {\n a -> \n}\n", &[(0, 0, 0, 0)]); + let mut p = Graphviz; + let msg = + r#"{"op":"problems","items":[{"line":3,"message":"syntax error in line 3 near '}'","level":"error"}]}"#; + p.handle(VIEW, ViewEvent::Message(msg.into()), &host.invocation()).unwrap(); + assert_eq!(host.diagnostics()["/project/a.dot"][0].range.start.line, 2); + p.handle(VIEW, ViewEvent::Message(r#"{"op":"problems","items":[]}"#.into()), &host.invocation()).unwrap(); + assert!(host.diagnostics().get("/project/a.dot").is_none_or(Vec::is_empty)); + } +} diff --git a/plugins/official/graphviz/templates/graph.dot b/plugins/official/graphviz/templates/graph.dot new file mode 100644 index 000000000..450238b67 --- /dev/null +++ b/plugins/official/graphviz/templates/graph.dot @@ -0,0 +1,11 @@ +digraph G { + rankdir=LR; + node [shape=box, style=rounded]; + + start [label="Start"]; + work [label="Do the work"]; + done [label="Done", shape=doublecircle]; + + start -> work -> done; + work -> work [label="again"]; +} diff --git a/plugins/official/graphviz/web-src/index.html b/plugins/official/graphviz/web-src/index.html new file mode 100644 index 000000000..adf0f73cd --- /dev/null +++ b/plugins/official/graphviz/web-src/index.html @@ -0,0 +1,25 @@ + + + + + + Graphviz + + + + +
+ + + + diff --git a/plugins/official/graphviz/web-src/package.json b/plugins/official/graphviz/web-src/package.json new file mode 100644 index 000000000..a99189283 --- /dev/null +++ b/plugins/official/graphviz/web-src/package.json @@ -0,0 +1,19 @@ +{ + "name": "openidea-plugin-graphviz-web", + "private": true, + "version": "0.1.0", + "type": "module", + "description": "The Graphviz plugin's preview page; `pnpm build` writes it to ../web.", + "scripts": { + "build": "tsc --noEmit && vite build", + "test": "vitest run" + }, + "dependencies": { + "@viz-js/viz": "3.31.0" + }, + "devDependencies": { + "typescript": "~6.0.3", + "vite": "^8.0.16", + "vitest": "^5.0.5" + } +} diff --git a/plugins/official/graphviz/web-src/pnpm-lock.yaml b/plugins/official/graphviz/web-src/pnpm-lock.yaml new file mode 100644 index 000000000..be3d7de15 --- /dev/null +++ b/plugins/official/graphviz/web-src/pnpm-lock.yaml @@ -0,0 +1,651 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@viz-js/viz': + specifier: 3.31.0 + version: 3.31.0 + devDependencies: + typescript: + specifier: ~6.0.3 + version: 6.0.3 + vite: + specifier: ^8.0.16 + version: 8.3.5 + vitest: + specifier: ^5.0.5 + version: 5.0.5(vite@8.3.5) + +packages: + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@oxc-project/types@0.156.0': + resolution: {integrity: sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw==} + + '@rolldown/binding-android-arm-eabi@1.2.16': + resolution: {integrity: sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.16': + resolution: {integrity: sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.2.16': + resolution: {integrity: sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.2.16': + resolution: {integrity: sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.2.16': + resolution: {integrity: sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + resolution: {integrity: sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.2.16': + resolution: {integrity: sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.2.16': + resolution: {integrity: sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + resolution: {integrity: sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.2.16': + resolution: {integrity: sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.2.16': + resolution: {integrity: sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.2.16': + resolution: {integrity: sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.2.16': + resolution: {integrity: sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-win32-arm64-msvc@1.2.16': + resolution: {integrity: sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.2.16': + resolution: {integrity: sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.10': + resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} + + '@vitest/mocker@5.0.5': + resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==} + peerDependencies: + msw: ^2.4.9 || ^3.0.0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/spy@5.0.5': + resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==} + + '@viz-js/viz@3.31.0': + resolution: {integrity: sha512-r7zlQdRvcwvIpjHGgs+KNWHeE/P5/Dq7k8ZAKaMCbZqomxCBJV78gVuQYaHzFVca+kB0mX0fMW9UFevCOBG50A==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + chai@6.3.0: + resolution: {integrity: sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==} + engines: {node: '>=18'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + + magic-string@1.4.5: + resolution: {integrity: sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w==} + + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + postcss@8.5.32: + resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==} + engines: {node: ^10 || ^12 || >=14} + + rolldown@1.2.16: + resolution: {integrity: sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} + engines: {node: '>=0.10.0'} + + std-env@4.3.0: + resolution: {integrity: sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==} + + tinybench@6.2.3: + resolution: {integrity: sha512-Al01C2JIBnO2CXCAPbpAl6sUiOZHeThGtHYNTa51JRw9PyWOCdr+9Ong05R4qg/Sk3+H645E8ov1h2c58ityNw==} + engines: {node: '>=20.0.0'} + + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@5.0.5: + resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.5 + '@vitest/browser-preview': 5.0.5 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.5 + '@vitest/coverage-v8': 5.0.5 + '@vitest/ui': 5.0.5 + happy-dom: '*' + jsdom: '*' + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@3.2.1: + resolution: {integrity: sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==} + engines: {node: '>=20.11'} + hasBin: true + +snapshots: + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@oxc-project/types@0.156.0': {} + + '@rolldown/binding-android-arm-eabi@1.2.16': + optional: true + + '@rolldown/binding-android-arm64@1.2.16': + optional: true + + '@rolldown/binding-darwin-arm64@1.2.16': + optional: true + + '@rolldown/binding-darwin-x64@1.2.16': + optional: true + + '@rolldown/binding-freebsd-x64@1.2.16': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.2.16': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.2.16': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.2.16': + optional: true + + '@rolldown/binding-linux-x64-musl@1.2.16': + optional: true + + '@rolldown/binding-openharmony-arm64@1.2.16': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.2.16': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.2.16': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.10': {} + + '@vitest/mocker@5.0.5(vite@8.3.5)': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.5 + estree-walker: 3.0.3 + magic-string: 1.4.5 + optionalDependencies: + vite: 8.3.5 + + '@vitest/spy@5.0.5': {} + + '@viz-js/viz@3.31.0': {} + + assertion-error@2.0.1: {} + + chai@6.3.0: {} + + detect-libc@2.1.2: {} + + es-module-lexer@2.3.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.10 + + expect-type@1.4.0: {} + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + fsevents@2.3.3: + optional: true + + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + + magic-string@1.4.5: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + nanoid@3.3.20: {} + + obug@3.0.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.7: {} + + postcss@8.5.32: + dependencies: + nanoid: 3.3.20 + picocolors: 1.1.1 + source-map-js: 1.2.2 + + rolldown@1.2.16: + dependencies: + '@oxc-project/types': 0.156.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm-eabi': 1.2.16 + '@rolldown/binding-android-arm64': 1.2.16 + '@rolldown/binding-darwin-arm64': 1.2.16 + '@rolldown/binding-darwin-x64': 1.2.16 + '@rolldown/binding-freebsd-x64': 1.2.16 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.16 + '@rolldown/binding-linux-arm64-gnu': 1.2.16 + '@rolldown/binding-linux-arm64-musl': 1.2.16 + '@rolldown/binding-linux-ppc64-gnu': 1.2.16 + '@rolldown/binding-linux-s390x-gnu': 1.2.16 + '@rolldown/binding-linux-x64-gnu': 1.2.16 + '@rolldown/binding-linux-x64-musl': 1.2.16 + '@rolldown/binding-openharmony-arm64': 1.2.16 + '@rolldown/binding-win32-arm64-msvc': 1.2.16 + '@rolldown/binding-win32-x64-msvc': 1.2.16 + + source-map-js@1.2.2: {} + + std-env@4.3.0: {} + + tinybench@6.2.3: {} + + tinyexec@1.3.1: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + typescript@6.0.3: {} + + vite@8.3.5: + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.32 + rolldown: 1.2.16 + tinyglobby: 0.2.17 + optionalDependencies: + fsevents: 2.3.3 + + vitest@5.0.5(vite@8.3.5): + dependencies: + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.5(vite@8.3.5) + chai: 6.3.0 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.4.5 + obug: 3.0.0 + picomatch: 4.0.7 + std-env: 4.3.0 + tinybench: 6.2.3 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + vite: 8.3.5 + why-is-node-running: 3.2.1 + transitivePeerDependencies: + - msw + + why-is-node-running@3.2.1: {} diff --git a/plugins/official/graphviz/web-src/src/main.ts b/plugins/official/graphviz/web-src/src/main.ts new file mode 100644 index 000000000..04f8d5d8b --- /dev/null +++ b/plugins/official/graphviz/web-src/src/main.ts @@ -0,0 +1,213 @@ +/** + * The Graphviz plugin's preview: renders the `.dot` file it is opened beside + * (read only: the text editor next to it is where it changes) with viz.js, + * follows the IDE theme, zooms and pans, exports SVG and PNG through the + * IDE's save dialog, and sends what Graphviz reports to the plugin's code, + * which turns it into the file's problems. + */ +import { instance, type Viz } from "@viz-js/viz"; +import { ENGINES, type Engine, exportName, problemsOf, renderOptions } from "./render"; + +const RENDER_DELAY_MS = 150; +const MIN_ZOOM = 0.1; +const MAX_ZOOM = 8; +/** The most Fit enlarges a small graph to (opening a file never enlarges it). */ +const MAX_FIT = 4; + +const $ = (id: string) => document.getElementById(id) as T; + +function start(bridge: OpenideaBridge) { + const stage = $("stage"); + const canvas = $("canvas"); + const banner = $("banner"); + const engineSelect = $("engine"); + const zoomLabel = $("zoom-label"); + + for (const e of ENGINES) engineSelect.add(new Option(e, e)); + + let viz: Viz | null = null; + let text = ""; + let name = "graph.dot"; + let engine: Engine = "dot"; + let zoom = 1; + let fitted = true; + // How far fitting may enlarge: 1 until the user asks for Fit. + let fitCap = 1; + let timer = 0; + let lastProblems = ""; + + const foreground = () => bridge.theme?.vars["--openidea-fg"] ?? null; + + function setZoom(z: number, keepFit = false) { + zoom = Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, z)); + fitted = keepFit; + // `zoom`, not a transform: the scroll area follows the scaled size. + canvas.style.zoom = String(zoom); + zoomLabel.textContent = `${Math.round(zoom * 100)}%`; + } + + function fit() { + const svg = canvas.querySelector("svg"); + if (!svg) return; + // Graphviz sizes its SVG in points; these are CSS pixels at 100%. + const w = svg.width.baseVal.value; + const h = svg.height.baseVal.value; + if (!w || !h) return; + // The canvas's padding (16px a side) scales with it; a pixel spare for rounding. + const pad = 32; + const z = Math.min((stage.clientWidth - 1) / (w + pad), (stage.clientHeight - 1) / (h + pad), fitCap); + setZoom(z > 0 && Number.isFinite(z) ? z : 1, true); + } + + /** What Graphviz said, to the plugin (only when it changed: each one republishes the problems). */ + function report(problems: ReturnType) { + const key = JSON.stringify(problems); + if (key === lastProblems) return; + lastProblems = key; + bridge.postMessage(JSON.stringify({ op: "problems", items: problems })); + } + + function render() { + if (!viz) return; + const result = viz.render(text, renderOptions(engine, foreground())); + const problems = problemsOf(result); + report(problems); + if (result.status === "success") { + canvas.innerHTML = result.output; + canvas.classList.remove("stale"); + banner.hidden = true; + if (fitted) fit(); + } else { + // The last good graph stays, dimmed, under what went wrong. + canvas.classList.add("stale"); + banner.hidden = false; + banner.textContent = problems.map((p) => (p.line ? `Line ${p.line}: ${p.message}` : p.message)).join("\n"); + } + } + + const schedule = (delay = RENDER_DELAY_MS) => { + clearTimeout(timer); + timer = window.setTimeout(render, delay); + }; + + /** The graph as Graphviz draws it, without the theme's defaults. */ + function exportSvg(): string | null { + if (!viz) return null; + const result = viz.render(text, renderOptions(engine, null)); + return result.status === "success" ? result.output : null; + } + + /** Runs an export; a failure (no dialog, the image not drawn) shows in the banner. */ + async function exporting(run: () => Promise) { + try { + await run(); + } catch (e) { + banner.hidden = false; + banner.textContent = `Export failed: ${e instanceof Error ? e.message : String(e)}`; + } + } + + async function saveSvg() { + const svg = exportSvg(); + if (!svg) return; + await bridge.saveFile({ + name: exportName(name, "svg"), + data: svg, + filters: [{ name: "SVG image", extensions: ["svg"] }], + }); + } + + async function savePng() { + const svg = exportSvg(); + if (!svg) return; + const url = URL.createObjectURL(new Blob([svg], { type: "image/svg+xml" })); + try { + const img = new Image(); + await new Promise((resolve, reject) => { + img.onload = () => resolve(); + img.onerror = () => reject(new Error("the graph could not be drawn as an image")); + img.src = url; + }); + const scale = 2; + const c = document.createElement("canvas"); + c.width = Math.ceil(img.naturalWidth * scale); + c.height = Math.ceil(img.naturalHeight * scale); + const ctx = c.getContext("2d")!; + ctx.scale(scale, scale); + ctx.drawImage(img, 0, 0); + const png = await new Promise((resolve) => c.toBlob(resolve, "image/png")); + if (!png) throw new Error("the image could not be encoded"); + await bridge.saveFile({ + name: exportName(name, "png"), + data: png, + filters: [{ name: "PNG image", extensions: ["png"] }], + }); + } finally { + URL.revokeObjectURL(url); + } + } + + engineSelect.addEventListener("change", () => { + engine = engineSelect.value as Engine; + fitted = true; + schedule(0); + }); + $("zoom-in").addEventListener("click", () => setZoom(zoom * 1.25)); + $("zoom-out").addEventListener("click", () => setZoom(zoom / 1.25)); + $("zoom-fit").addEventListener("click", () => { + fitCap = MAX_FIT; + fit(); + }); + $("zoom-reset").addEventListener("click", () => setZoom(1)); + $("export-svg").addEventListener("click", () => void exporting(saveSvg)); + $("export-png").addEventListener("click", () => void exporting(savePng)); + // ⌘/Ctrl + wheel (and pinch) zooms; the wheel alone scrolls. + stage.addEventListener( + "wheel", + (e) => { + if (!e.ctrlKey && !e.metaKey) return; + e.preventDefault(); + setZoom(zoom * Math.exp(-e.deltaY / 300)); + }, + { passive: false }, + ); + // Dragging pans. + stage.addEventListener("pointerdown", (e) => { + if (e.button !== 0) return; + const [x, y, left, top] = [e.clientX, e.clientY, stage.scrollLeft, stage.scrollTop]; + stage.setPointerCapture(e.pointerId); + stage.classList.add("panning"); + const move = (m: PointerEvent) => { + stage.scrollLeft = left - (m.clientX - x); + stage.scrollTop = top - (m.clientY - y); + }; + const up = () => { + stage.classList.remove("panning"); + stage.removeEventListener("pointermove", move); + stage.removeEventListener("pointerup", up); + }; + stage.addEventListener("pointermove", move); + stage.addEventListener("pointerup", up); + }); + new ResizeObserver(() => fitted && fit()).observe(stage); + bridge.onThemeChange(() => schedule(0)); + bridge.document.onChange((s) => { + text = s.text; + schedule(); + }); + + void (async () => { + const [doc, v] = await Promise.all([bridge.document.get(), instance()]); + viz = v; + text = doc.text; + name = doc.name || name; + render(); + })().catch((e: unknown) => { + banner.hidden = false; + banner.textContent = `The preview could not start: ${e instanceof Error ? e.message : String(e)}`; + }); +} + +const bridge = window.openidea; +if (bridge) start(bridge); +else document.body.textContent = "This page runs inside OpenIDEA."; diff --git a/plugins/official/graphviz/web-src/src/openidea.d.ts b/plugins/official/graphviz/web-src/src/openidea.d.ts new file mode 100644 index 000000000..3b370f104 --- /dev/null +++ b/plugins/official/graphviz/web-src/src/openidea.d.ts @@ -0,0 +1,40 @@ +/** The IDE's frame bridge (`window.openidea`), injected before the page's scripts. */ +interface OpenideaDocumentState { + version: number; + text: string; +} + +interface OpenideaTextEdit { + from: number; + to: number; + insert: string; +} + +interface OpenideaFileFilter { + name: string; + extensions: string[]; +} + +interface OpenideaBridge { + postMessage(text: string): void; + onMessage(fn: (text: string) => void): void; + readonly theme: { dark: boolean; vars: Readonly> } | null; + onThemeChange(fn: (theme: { dark: boolean; vars: Readonly> }) => void): void; + document: { + /** `name`: the file's name, without its directory. */ + get(): Promise; + onChange(fn: (state: OpenideaDocumentState) => void): void; + edit(version: number, edits: OpenideaTextEdit[]): Promise<{ version: number }>; + replace(version: number, text: string): Promise<{ version: number }>; + }; + saveFile(options: { + name: string; + data: string | Uint8Array | ArrayBuffer | Blob; + filters?: OpenideaFileFilter[]; + }): Promise; + openFile(options?: { filters?: OpenideaFileFilter[] }): Promise<{ name: string; data: Uint8Array } | null>; +} + +interface Window { + openidea?: OpenideaBridge; +} diff --git a/plugins/official/graphviz/web-src/src/render.test.ts b/plugins/official/graphviz/web-src/src/render.test.ts new file mode 100644 index 000000000..fe204b450 --- /dev/null +++ b/plugins/official/graphviz/web-src/src/render.test.ts @@ -0,0 +1,45 @@ +import { instance } from "@viz-js/viz"; +import { describe, expect, it } from "vitest"; +import { ENGINES, exportName, graphvizColor, problemsOf, renderOptions } from "./render"; + +describe("the preview's rendering", () => { + it("renders with the theme's colour as a default the graph can override", async () => { + const viz = await instance(); + const themed = viz.render('digraph { a -> b; c [color="red"] }', renderOptions("dot", "rgb(200, 200, 200)")); + expect(themed.status).toBe("success"); + const svg = themed.status === "success" ? themed.output : ""; + expect(svg).toContain('stroke="#c8c8c8"'); + expect(svg).toContain('stroke="red"'); + const plain = viz.render("digraph { a -> b }", renderOptions("dot", null)); + expect(plain.status === "success" && plain.output).not.toContain("#c8c8c8"); + }); + + it("names the line of a syntax error", async () => { + const viz = await instance(); + const result = viz.render("digraph {\n a -> b\n c -> }\n", renderOptions("dot", null)); + expect(result.status).toBe("failure"); + const [p] = problemsOf(result); + expect(p).toMatchObject({ line: 3, level: "error" }); + expect(p!.message).toMatch(/syntax error/); + }); + + it("offers only engines this Graphviz has", async () => { + const viz = await instance(); + for (const e of ENGINES) expect(viz.engines).toContain(e); + }); + + it("turns the theme's colours into Graphviz's", () => { + expect(graphvizColor("rgb(200, 200, 200)")).toBe("#c8c8c8"); + expect(graphvizColor("rgba(0, 128, 255, 0.5)")).toBe("#0080ff80"); + expect(graphvizColor("rgb(1 2 3 / 50%)")).toBe("#01020380"); + expect(graphvizColor("#ABCDEF")).toBe("#abcdef"); + expect(graphvizColor("var(--x)")).toBeNull(); + expect(renderOptions("dot", "nonsense").nodeAttributes).toBeUndefined(); + }); + + it("names exports after the file", () => { + expect(exportName("flow.dot", "svg")).toBe("flow.svg"); + expect(exportName("Flow.GV", "png")).toBe("Flow.png"); + expect(exportName("", "svg")).toBe("graph.svg"); + }); +}); diff --git a/plugins/official/graphviz/web-src/src/render.ts b/plugins/official/graphviz/web-src/src/render.ts new file mode 100644 index 000000000..a0507acc4 --- /dev/null +++ b/plugins/official/graphviz/web-src/src/render.ts @@ -0,0 +1,68 @@ +/** + * The preview's logic apart from the page: rendering options, Graphviz's + * messages as problems, export names. Kept free of the DOM so it is tested + * against the real Graphviz in Node. + */ +import type { RenderOptions, RenderResult } from "@viz-js/viz"; + +/** Layout engines offered, the default first. */ +export const ENGINES = ["dot", "neato", "fdp", "sfdp", "circo", "twopi", "osage", "patchwork"] as const; +export type Engine = (typeof ENGINES)[number]; + +export interface Problem { + /** 1-based, when Graphviz names one. */ + line: number | null; + message: string; + level: "error" | "warning"; +} + +/** + * Defaults a graph can still override: transparent background and the IDE's + * text colour, so an unstyled graph reads in a dark theme too. Exports use + * none of them (`null`): they look as Graphviz draws them. + */ +export function renderOptions(engine: Engine, foreground: string | null): RenderOptions { + const options: RenderOptions = { format: "svg", engine }; + const color = foreground && graphvizColor(foreground); + if (color) { + options.graphAttributes = { bgcolor: "transparent", color, fontcolor: color }; + options.nodeAttributes = { color, fontcolor: color }; + options.edgeAttributes = { color, fontcolor: color }; + } + return options; +} + +/** + * A CSS colour as Graphviz reads it (`#rrggbb[aa]`): the theme's variables + * are `rgb()` / `rgba()`, which it doesn't know. `null` when not one. + */ +export function graphvizColor(css: string): string | null { + const hex = (n: number) => + Math.round(Math.min(255, Math.max(0, n))) + .toString(16) + .padStart(2, "0"); + const value = css.trim(); + if (/^#([0-9a-f]{6}|[0-9a-f]{8})$/i.test(value)) return value.toLowerCase(); + const m = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:\s*[,/]\s*([\d.]+)(%?))?\s*\)$/i.exec(value); + if (!m) return null; + const alpha = m[4] === undefined ? 1 : Number(m[4]) / (m[5] ? 100 : 1); + return `#${hex(+m[1]!)}${hex(+m[2]!)}${hex(+m[3]!)}${alpha < 1 ? hex(alpha * 255) : ""}`; +} + +/** What Graphviz reported, as problems (on the line it names, if any). */ +export function problemsOf(result: RenderResult): Problem[] { + return result.errors.map((e) => { + const line = /\bline (\d+)\b/.exec(e.message); + return { + line: line ? Number(line[1]) : null, + message: e.message.replace(/^(Error|Warning):\s*/i, "").trim(), + level: e.level === "warning" ? "warning" : "error", + }; + }); +} + +/** The name an export starts with: the file's, without `.dot` / `.gv`. */ +export function exportName(file: string, extension: string): string { + const base = file.replace(/\.(dot|gv)$/i, "") || "graph"; + return `${base}.${extension}`; +} diff --git a/plugins/official/graphviz/web-src/src/style.css b/plugins/official/graphviz/web-src/src/style.css new file mode 100644 index 000000000..013d14e2a --- /dev/null +++ b/plugins/official/graphviz/web-src/src/style.css @@ -0,0 +1,89 @@ +html, +body { + margin: 0; + width: 100%; + height: 100%; + overflow: hidden; + font: var(--openidea-font-size, 13px) var(--openidea-font-ui, system-ui, sans-serif); + color: var(--openidea-fg); + background: var(--openidea-bg, transparent); +} +.toolbar { + position: absolute; + top: 8px; + right: 8px; + z-index: 1; + display: flex; + align-items: center; + gap: 2px; + padding: 2px; + border: 1px solid var(--openidea-border); + border-radius: 6px; + background: var(--openidea-bg-elevated, var(--openidea-bg)); +} +.toolbar button, +.toolbar select { + height: 24px; + min-width: 24px; + padding: 0 6px; + font: inherit; + font-size: 12px; + color: var(--openidea-fg); + background: transparent; + border: 1px solid transparent; + border-radius: 4px; + cursor: pointer; +} +.toolbar select { + border-color: var(--openidea-border); + background: var(--openidea-bg-input, transparent); +} +.toolbar button:hover { + background: var(--openidea-bg-hover); +} +.toolbar .sep { + width: 1px; + height: 16px; + margin: 0 2px; + background: var(--openidea-border); +} +#zoom-label { + display: inline-block; + min-width: 36px; + font-variant-numeric: tabular-nums; +} +.stage { + position: absolute; + inset: 0; + overflow: auto; + cursor: grab; +} +.stage.panning { + cursor: grabbing; +} +.canvas { + display: inline-block; + padding: 16px; + user-select: none; +} +.canvas svg { + display: block; +} +.canvas.stale { + opacity: 0.35; +} +.banner { + position: absolute; + left: 8px; + right: 8px; + bottom: 8px; + z-index: 1; + padding: 6px 8px; + white-space: pre-wrap; + font-family: var(--openidea-font-mono, ui-monospace, monospace); + font-size: 12px; + color: var(--openidea-danger); + border: 1px solid color-mix(in srgb, var(--openidea-danger) 40%, transparent); + border-radius: 6px; + background: var(--openidea-bg-elevated, var(--openidea-bg)); +} diff --git a/plugins/official/graphviz/web-src/tsconfig.json b/plugins/official/graphviz/web-src/tsconfig.json new file mode 100644 index 000000000..c29abbe40 --- /dev/null +++ b/plugins/official/graphviz/web-src/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "isolatedModules": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "types": ["vite/client"] + }, + "include": ["src", "vite.config.ts"] +} diff --git a/plugins/official/graphviz/web-src/vite.config.ts b/plugins/official/graphviz/web-src/vite.config.ts new file mode 100644 index 000000000..17c7581da --- /dev/null +++ b/plugins/official/graphviz/web-src/vite.config.ts @@ -0,0 +1,18 @@ +/** + * Builds the page into ../web (not checked in: plugins/build.sh builds it). + * Relative URLs throughout: the IDE serves the page from the plugin package + * under its own URL scheme. + */ +import path from "node:path"; +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + base: "./", + build: { + outDir: path.resolve(import.meta.dirname, "../web"), + emptyOutDir: true, + target: "es2022", + sourcemap: false, + chunkSizeWarningLimit: 4096, + }, +}); diff --git a/templates/theme-plugin/README.md b/plugins/official/harbor-night/README.md similarity index 74% rename from templates/theme-plugin/README.md rename to plugins/official/harbor-night/README.md index 63f9a27a2..34eaa5e86 100644 --- a/templates/theme-plugin/README.md +++ b/plugins/official/harbor-night/README.md @@ -1,12 +1,13 @@ -# Theme plugin template +# Harbor Night -A complete OpenIDEA theme plugin with one worked example, **Harbor Night**: a -dark theme with slate surfaces, a teal accent and a warm syntax palette. Copy -this folder to start your own theme. Full documentation, the token reference -and porting guides are in [`docs/plugins/themes.md`](../../docs/plugins/themes.md). +An OpenIDEA theme plugin, **Harbor Night**: a dark theme with slate surfaces, a +teal accent and a warm syntax palette. It is also where new themes start: +`openidea-plugin new --template theme` copies its theme files, or copy this +folder. Full documentation, the token reference and porting guides are in +[`docs/plugins/themes.md`](../../../docs/plugins/themes.md). ``` -theme-plugin/ +harbor-night/ ├─ plugin.toml # manifest: id, name, version, the theme files └─ themes/ ├─ harbor-night.theme.json # UI colours, every themeable token, grouped like tokens.css @@ -17,8 +18,9 @@ A theme plugin is data only: no code, no WebAssembly, no build step. ## Make your own -1. Copy the folder, for example to `~/openidea-themes/theme-my-theme`. -2. In `plugin.toml`, change `id` (lowercase, `a-z 0-9 - _`), `name`, +1. Run `openidea-plugin new --template theme`, or copy the folder, for + example to `~/openidea-themes/my-theme`. +2. In `plugin.toml`, change `id` (lowercase, `a-z 0-9 - _ .`), `name`, `description`, `authors` and the two paths. 3. Rename the theme files. In the theme file, set `id`, `name` and `kind` (`"dark"` or `"light"`, the built-in base for anything you leave out). @@ -49,5 +51,5 @@ JSON or values are reported in Settings › Plugins with the file and line. ## Licence -The template and Harbor Night are part of OpenIDEA (Apache-2.0). When you port +Harbor Night is part of OpenIDEA (Apache-2.0). When you port someone else's theme, keep its licence and credit its authors. diff --git a/templates/theme-plugin/plugin.toml b/plugins/official/harbor-night/plugin.toml similarity index 50% rename from templates/theme-plugin/plugin.toml rename to plugins/official/harbor-night/plugin.toml index d44e7701d..495ed17a3 100644 --- a/templates/theme-plugin/plugin.toml +++ b/plugins/official/harbor-night/plugin.toml @@ -1,12 +1,13 @@ -# A theme plugin is data only: no `wasm`, no permissions, nothing to compile. -# Rename the id, name and files when you start your own theme from this template. -id = "theme-harbor-night" -name = "Harbor Night Theme" +# A theme plugin is data only: no `wasm`, no capabilities, nothing to compile. +# `openidea-plugin new --template theme` starts a new theme from this one. +id = "openidea.harbor-night" +name = "Harbor Night" version = "1.0.0" -description = "Example dark theme: slate surfaces, a teal accent and a warm syntax palette." +description = "A dark theme: slate surfaces, a teal accent and a warm syntax palette." authors = ["OpenIDEA contributors"] +license = "Apache-2.0" change-notes = "1.0.0 — first release." -openidea-api = "0.1" +engines.openidea = "^1.0" # One entry per theme. `editor-scheme` is optional: its tokens are merged over # the theme's (IntelliJ's .theme.json + .icls pair). diff --git a/templates/theme-plugin/themes/harbor-night.scheme.json b/plugins/official/harbor-night/themes/harbor-night.scheme.json similarity index 100% rename from templates/theme-plugin/themes/harbor-night.scheme.json rename to plugins/official/harbor-night/themes/harbor-night.scheme.json diff --git a/templates/theme-plugin/themes/harbor-night.theme.json b/plugins/official/harbor-night/themes/harbor-night.theme.json similarity index 100% rename from templates/theme-plugin/themes/harbor-night.theme.json rename to plugins/official/harbor-night/themes/harbor-night.theme.json diff --git a/plugins/official/license-header/Cargo.lock b/plugins/official/license-header/Cargo.lock new file mode 100644 index 000000000..736eea2b5 --- /dev/null +++ b/plugins/official/license-header/Cargo.lock @@ -0,0 +1,333 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown", + "serde", + "serde_core", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "log" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" + +[[package]] +name = "macro-string" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b3a5bbb2f63aaa223a671ea1bd0e7bc16bd30ce387324cf63995deaddbbd2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "openidea-plugin" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "openidea-plugin-openidea-license-header" +version = "0.1.0" +dependencies = [ + "openidea-plugin", +] + +[[package]] +name = "prettyplease" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "wasm-encoder" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4495a6f85dd94c411c749303efcbc5defade0b0cbdbc0541495241ab917a9b5a" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86ff6668190d9fb70372b306b4f9fe8930f0e2f57ce72e4922bf2f117900949" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "974d643b125b272607e2fff8012ea14a8328acd7621e4bafa7afb32500052b1b" +dependencies = [ + "bitflags", + "hashbrown", + "indexmap", + "semver", +] + +[[package]] +name = "wit-bindgen" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85a987ab61d365382d25c7d47e26edd48941b3bf6e3fbf76eff918bc71dab06" +dependencies = [ + "bitflags", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e122e390603abfacd548027016cd0113a6e2bf2f8ce6bdd3658b013456ea8" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e26e13b9d972026778d2ffb7985736de116026fdc8d9464f966e12df2eb240" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a008a0d6b4840677326beb4edbeb210a2f1b7d0183fb7cc33f466b90fd7fb6" +dependencies = [ + "anyhow", + "macro-string", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078def49fdb49cab405c3006e05793b3fdaf7069126ba6b9c97d01ec8c98fe4c" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f0dc051466ffe46787721fca3d088536f158ae400be044f1b1c386ba9397ad" +dependencies = [ + "anyhow", + "hashbrown", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-ident", + "wasmparser", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/plugins/official/license-header/Cargo.toml b/plugins/official/license-header/Cargo.toml new file mode 100644 index 000000000..efac88b07 --- /dev/null +++ b/plugins/official/license-header/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "openidea-plugin-openidea-license-header" +version = "0.1.0" +edition = "2024" +publish = false + +# A plugin builds on its own (target wasm32-wasip2), outside any IDE workspace. +[workspace] + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +openidea-plugin = { path = "../../../sdk/rust/openidea-plugin" } + +[profile.release] +opt-level = "s" +lto = true +strip = true +codegen-units = 1 +panic = "abort" diff --git a/plugins/official/license-header/dist/plugin.wasm b/plugins/official/license-header/dist/plugin.wasm new file mode 100644 index 0000000000000000000000000000000000000000..6cd6d293da9996636da9bac7c9c13b7c43cd0c6f GIT binary patch literal 143721 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

peZhV{o0Pq}4z|gIeGxU+E;EQV_ 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 literal 0 HcmV?d00001 diff --git a/plugins/official/license-header/dist/plugin.wasm.sources b/plugins/official/license-header/dist/plugin.wasm.sources new file mode 100644 index 000000000..01859b4b1 --- /dev/null +++ b/plugins/official/license-header/dist/plugin.wasm.sources @@ -0,0 +1 @@ +6a4210a3978f058b3526427eb41ef398924e8c011cc4dc53c19f5419d31501f3 diff --git a/plugins/official/license-header/plugin.toml b/plugins/official/license-header/plugin.toml new file mode 100644 index 000000000..af970e2e7 --- /dev/null +++ b/plugins/official/license-header/plugin.toml @@ -0,0 +1,35 @@ +id = "openidea.license-header" +name = "License Header" +version = "0.1.0" +description = "Keeps a copyright and SPDX license header at the top of source files: files without one are reported when they open, a quick fix adds it, and a project scan lists every file that still needs one." +authors = ["OpenIDEA contributors"] +license = "Apache-2.0" +change-notes = "0.1.0 — first release: missing headers reported on open and save, Add License Header quick fix and command, project scan in the background." +engines.openidea = "^1.0" +wasm = "dist/plugin.wasm" +activation = ["on-event:file-opened", "on-event:file-saved", "on-command:*"] + +[capabilities] +required = ["events", "project.read", "editor.read", "editor.write"] + +[[contributes.providers]] +kinds = ["code-actions"] +languages = ["*"] + +[[contributes.commands]] +id = "add" +title = "License Header: Add to Current File" +category = "License Header" + +[[contributes.commands]] +id = "scan" +title = "License Header: Find Files Without a Header" +category = "License Header" + +[[contributes.menus]] +menu = "tools" +command = "scan" + +[contributes.settings] +title = "License Header" +schema = "settings.schema.json" diff --git a/plugins/official/license-header/settings.schema.json b/plugins/official/license-header/settings.schema.json new file mode 100644 index 000000000..83600dfb7 --- /dev/null +++ b/plugins/official/license-header/settings.schema.json @@ -0,0 +1,21 @@ +{ + "properties": { + "owner": { + "type": "string", + "title": "Copyright holder", + "description": "Written after the year, e.g. \"ACME Inc.\"; empty for none.", + "default": "" + }, + "license": { + "type": "string", + "title": "License (SPDX identifier)", + "description": "e.g. Apache-2.0, MIT, GPL-3.0-or-later; empty for no SPDX line.", + "default": "Apache-2.0" + }, + "reportOnOpen": { + "type": "boolean", + "title": "Report files without a header when they open", + "default": true + } + } +} diff --git a/plugins/official/license-header/src/lib.rs b/plugins/official/license-header/src/lib.rs new file mode 100644 index 000000000..7fd5d7896 --- /dev/null +++ b/plugins/official/license-header/src/lib.rs @@ -0,0 +1,395 @@ +//! License Header for OpenIDEA: a copyright and SPDX license header at the top +//! of source files, in the file's own comment syntax. +//! +//! - A file without one is reported (an info diagnostic on its first line) +//! when it opens, and again when it is saved, so adding the header clears it. +//! - The quick fix and *License Header: Add to Current File* insert it (after a +//! `#!` line or a Python encoding line, which must stay first). +//! - *Find Files Without a Header* scans the project in a background task and +//! reports every source file that needs one in the Problems view. + +use openidea_plugin::host; +use openidea_plugin::providers::{CodeAction, Document, Providers}; +use openidea_plugin::{ + Diagnostic, Error, Event, Invocation, NotificationLevel, Plugin, Position, Project, Range, Severity, TextEdit, + register_plugin, +}; + +/// Lines looked at for an existing header. +const HEADER_LINES: usize = 15; +/// Files a scan reads at most. +const MAX_SCAN: u32 = 5000; +/// Files larger than this are skipped by a scan. +const MAX_FILE: usize = 1 << 20; +const CODE: &str = "missing-license-header"; + +/// How a file writes a header: line comments, or one block comment. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Comment { + Line(&'static str), + Block(&'static str, &'static str), +} + +/// The comment syntax for `path`, `None` for files that don't get a header. +pub fn comment_for(path: &str) -> Option { + let name = path.rsplit(['/', '\\']).next().unwrap_or(path); + let lower = name.to_ascii_lowercase(); + if matches!(lower.as_str(), "dockerfile" | "makefile" | "justfile") { + return Some(Comment::Line("#")); + } + let ext = lower.rsplit_once('.').map(|(_, e)| e)?; + Some(match ext { + "rs" | "java" | "kt" | "kts" | "scala" | "groovy" | "gradle" | "go" | "js" | "jsx" | "mjs" | "cjs" | "ts" + | "tsx" | "mts" | "cts" | "c" | "h" | "cc" | "cpp" | "cxx" | "hpp" | "hh" | "m" | "mm" | "cs" | "swift" + | "dart" | "proto" | "sol" | "zig" | "v" => Comment::Line("//"), + "css" | "scss" | "less" => Comment::Block("/*", " */"), + "py" | "sh" | "bash" | "zsh" | "fish" | "rb" | "pl" | "r" | "ps1" | "yaml" | "yml" | "toml" | "cmake" + | "tf" | "nix" | "ex" | "exs" | "jl" => Comment::Line("#"), + "sql" | "lua" | "hs" | "elm" => Comment::Line("--"), + _ => return None, + }) +} + +/// Whether `text` already starts with a header (copyright or license notice). +pub fn has_header(text: &str) -> bool { + text.lines().take(HEADER_LINES).any(|l| { + let l = l.to_ascii_lowercase(); + l.contains("copyright") || l.contains("spdx-license-identifier") || l.contains("licensed under") + }) +} + +/// The header's lines, without comment markers. +pub fn header_lines(year: i64, owner: &str, license: &str) -> Vec { + let owner = owner.trim(); + let mut lines = + vec![if owner.is_empty() { format!("Copyright (c) {year}") } else { format!("Copyright (c) {year} {owner}") }]; + if !license.trim().is_empty() { + lines.push(format!("SPDX-License-Identifier: {}", license.trim())); + } + lines +} + +/// The header as `comment` writes it, with a blank line after it. +pub fn render(comment: Comment, lines: &[String]) -> String { + let mut out = String::new(); + match comment { + Comment::Line(prefix) => { + for l in lines { + out.push_str(&format!("{prefix} {l}\n")); + } + } + Comment::Block(open, close) => { + out.push_str(open); + out.push('\n'); + for l in lines { + out.push_str(&format!(" * {l}\n")); + } + out.push_str(close); + out.push('\n'); + } + } + out.push('\n'); + out +} + +/// The line the header goes on: after a `#!` line and a Python encoding line. +pub fn insert_line(text: &str) -> u32 { + let mut line = 0; + let mut lines = text.lines(); + if lines.next().is_some_and(|l| l.starts_with("#!")) { + line = 1; + if lines.next().is_some_and(is_encoding_line) { + line = 2; + } + } else if text.lines().next().is_some_and(is_encoding_line) { + line = 1; + } + line +} + +fn is_encoding_line(l: &str) -> bool { + l.starts_with('#') && (l.contains("coding:") || l.contains("coding=")) +} + +/// The edit that adds the header to `path`'s `text`, `None` when it has one or takes none. +pub fn header_edit(path: &str, text: &str, year: i64, owner: &str, license: &str) -> Option { + let comment = comment_for(path)?; + if has_header(text) { + return None; + } + let at = Position::new(insert_line(text), 0); + let mut insert = render(comment, &header_lines(year, owner, license)); + // After a first line without a newline (a lone shebang). + if at.line > 0 && text.lines().count() == at.line as usize && !text.ends_with('\n') { + insert.insert(0, '\n'); + } + Some(TextEdit { range: Range::new(at, at), text: insert }) +} + +fn missing(text: &str) -> Diagnostic { + let line = insert_line(text); + let len = text.lines().nth(line as usize).map_or(0, |l| l.encode_utf16().count() as u32); + Diagnostic { + range: Range::new(Position::new(line, 0), Position::new(line, len)), + severity: Severity::Info, + message: "No license header".into(), + code: Some(CODE.into()), + } +} + +/// Reports `path` when it takes a header and has none, clears it otherwise. +pub fn report(path: &str, text: &str) -> Result { + let lacking = comment_for(path).is_some() && !has_header(text); + host::publish_diagnostics(path, &if lacking { vec![missing(text)] } else { Vec::new() })?; + Ok(lacking) +} + +/// The current year (WASI wall clock), from days since the epoch. +fn this_year() -> i64 { + let secs = + std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).map(|d| d.as_secs() as i64).unwrap_or(0); + year_of_day(secs.div_euclid(86_400)) +} + +/// The proleptic Gregorian year of `day` days since 1970-01-01. +pub fn year_of_day(day: i64) -> i64 { + let z = day + 719_468; + let era = z.div_euclid(146_097); + let doe = z - era * 146_097; + let yoe = (doe - doe / 1460 + doe / 36_524 - doe / 146_096) / 365; + let doy = doe - (365 * yoe + yoe / 4 - yoe / 100); + let mp = (5 * doy + 2) / 153; + let month = if mp < 10 { mp + 3 } else { mp - 9 }; + yoe + era * 400 + i64::from(month <= 2) +} + +fn settings() -> (String, String) { + ( + host::setting_string("owner").unwrap_or_default(), + host::setting_string("license").unwrap_or_else(|| "Apache-2.0".into()), + ) +} + +fn project_of(path: &str) -> Option { + host::projects() + .ok()? + .into_iter() + .filter(|p| p.root().is_ok_and(|r| path.starts_with(&r))) + .max_by_key(|p| p.root().map(|r| r.len()).unwrap_or(0)) +} + +#[derive(Default)] +pub struct LicenseHeader; + +impl LicenseHeader { + fn add_to_editor(&self, ctx: &Invocation) -> Result, Error> { + let editor = ctx.editor().ok_or_else(|| Error::Invalid("focus an editor first".into()))?; + let (path, doc) = (editor.path(), editor.document()?); + if comment_for(&path).is_none() { + return Err(Error::Invalid("this kind of file takes no license header".into())); + } + let (owner, license) = settings(); + let Some(edit) = header_edit(&path, &doc.text, this_year(), &owner, &license) else { + return Ok(Some("The file already has a license header.".into())); + }; + editor.apply_edits(doc.version, &[edit])?; + Ok(None) + } + + /// Reports every source file of the project without a header; returns (checked, lacking). + fn scan(&self, project: &Project) -> Result<(u32, u32), Error> { + let files: Vec = project + .find_files("**/*", MAX_SCAN * 4)? + .into_iter() + .filter(|f| comment_for(f).is_some()) + .take(MAX_SCAN as usize) + .collect(); + let total = files.len() as u32; + let task = host::begin_task("License Header: checking files", true); + let (mut checked, mut lacking) = (0, 0); + for (i, path) in files.iter().enumerate() { + if task.is_cancelled() { + break; + } + if i % 20 == 0 { + let name = path.rsplit('/').next().unwrap_or(path); + task.report(i as u32, Some(total), Some(name)); + } + let Ok(text) = project.read_file(path) else { continue }; + if text.len() > MAX_FILE { + continue; + } + checked += 1; + if report(path, &text)? { + lacking += 1; + } + } + Ok((checked, lacking)) + } +} + +impl Plugin for LicenseHeader { + fn run_command(&mut self, id: &str, ctx: &Invocation, _arg: Option<&str>) -> Result, Error> { + match id { + "add" => self.add_to_editor(ctx), + "scan" => { + let project = ctx.project().ok_or_else(|| Error::Invalid("open a project first".into()))?; + let (checked, lacking) = self.scan(&project)?; + let body = match lacking { + 0 => format!("All {checked} source files have one."), + 1 => format!("1 of {checked} source files has none; see the Problems view."), + n => format!("{n} of {checked} source files have none; see the Problems view."), + }; + host::notify(NotificationLevel::Info, "License headers", &body); + Ok(None) + } + _ => Err(Error::NotFound(format!("command {id}"))), + } + } + + fn handle_events(&mut self, events: &[Event], _ctx: &Invocation) { + for e in events { + let (path, opened) = match e { + Event::FileOpened(p) => (p, true), + Event::FileSaved(p) => (p, false), + _ => continue, + }; + if comment_for(path).is_none() || (opened && !host::setting_bool("reportOnOpen").unwrap_or(true)) { + continue; + } + let Some(project) = project_of(path) else { continue }; + if let Ok(text) = project.read_file(path) { + let _ = report(path, &text); + } + } + } +} + +impl Providers for LicenseHeader { + fn code_actions(&mut self, doc: &Document, _selection: Range) -> Vec { + let (owner, license) = settings(); + let Some(edit) = header_edit(&doc.path, &doc.text, this_year(), &owner, &license) else { return Vec::new() }; + vec![CodeAction { + title: "Add license header".into(), + kind: Some("quickfix".into()), + preferred: true, + edits: vec![(doc.path.clone(), vec![edit])], + }] + } +} + +register_plugin!(LicenseHeader, providers); + +#[cfg(test)] +mod tests { + use super::*; + use openidea_plugin::mock::MockHost; + + fn doc(path: &str, text: &str) -> Document { + Document { path: path.into(), language: String::new(), version: 1, text: text.into() } + } + + #[test] + fn writes_the_header_in_each_files_comment_syntax() { + let lines = header_lines(2026, "ACME Inc.", "MIT"); + assert_eq!( + render(comment_for("a/b.rs").unwrap(), &lines), + "// Copyright (c) 2026 ACME Inc.\n// SPDX-License-Identifier: MIT\n\n" + ); + assert_eq!(render(comment_for("x.py").unwrap(), &lines[..1]), "# Copyright (c) 2026 ACME Inc.\n\n"); + assert_eq!( + render(comment_for("s.css").unwrap(), &lines), + "/*\n * Copyright (c) 2026 ACME Inc.\n * SPDX-License-Identifier: MIT\n */\n\n" + ); + assert_eq!(comment_for("q.SQL"), Some(Comment::Line("--"))); + assert_eq!(comment_for("Dockerfile"), Some(Comment::Line("#"))); + assert_eq!(comment_for("README.md"), None); + assert_eq!(comment_for("noext"), None); + assert_eq!(header_lines(2026, " ", ""), ["Copyright (c) 2026"]); + } + + #[test] + fn keeps_shebang_and_encoding_lines_first() { + assert_eq!(insert_line("fn main() {}\n"), 0); + assert_eq!(insert_line("#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\nprint()\n"), 2); + assert_eq!(insert_line("#!/bin/sh\necho\n"), 1); + assert_eq!(insert_line("# coding=latin-1\nx = 1\n"), 1); + let e = header_edit("run.sh", "#!/bin/sh", 2026, "", "").unwrap(); + assert_eq!((e.range.start, e.text.as_str()), (Position::new(1, 0), "\n# Copyright (c) 2026\n\n")); + } + + #[test] + fn an_existing_header_is_left_alone() { + assert!(has_header("// SPDX-License-Identifier: Apache-2.0\nfn x() {}")); + assert!(has_header("/*\n * Licensed under the MIT license\n */")); + assert!(has_header(&format!("{}// Copyright 2020\n", "\n".repeat(10)))); + assert!(!has_header(&format!("{}// Copyright 2020\n", "\n".repeat(20))), "only the top of the file counts"); + assert!(header_edit("a.rs", "// Copyright (c) 2020 X\n", 2026, "", "").is_none()); + } + + #[test] + fn years() { + assert_eq!(year_of_day(0), 1970); + assert_eq!(year_of_day(19_722), 2023); // 2023-12-31 + assert_eq!(year_of_day(19_723), 2024); // 2024-01-01 + assert_eq!(year_of_day(20_759), 2026); + } + + #[test] + fn reports_on_open_and_save_and_fixes() { + let host = MockHost::install().with_capabilities(&["events", "project.read", "editor.read", "editor.write"]); + host.add_file("src/a.rs", "fn a() {}\n"); + host.add_file("src/b.rs", "// Copyright (c) 2020 X\nfn b() {}\n"); + let mut p = LicenseHeader; + p.handle_events( + &[Event::FileOpened("/project/src/a.rs".into()), Event::FileOpened("/project/src/b.rs".into())], + &host.invocation(), + ); + let d = host.diagnostics(); + assert_eq!(d["/project/src/a.rs"][0].code.as_deref(), Some(CODE)); + assert!(d.get("/project/src/b.rs").is_none_or(Vec::is_empty)); + + // Off when opening, still on saving. + host.set_setting("reportOnOpen", "false"); + host.add_file("src/c.rs", "fn c() {}\n"); + p.handle_events(&[Event::FileOpened("/project/src/c.rs".into())], &host.invocation()); + assert!(host.diagnostics().get("/project/src/c.rs").is_none_or(Vec::is_empty)); + p.handle_events(&[Event::FileSaved("/project/src/c.rs".into())], &host.invocation()); + assert_eq!(host.diagnostics()["/project/src/c.rs"].len(), 1); + + host.set_setting("owner", "\"ACME\""); + let actions = p.code_actions(&doc("/project/src/a.rs", "fn a() {}\n"), Range::default()); + assert_eq!(actions[0].title, "Add license header"); + let (path, edits) = &actions[0].edits[0]; + assert_eq!(path, "/project/src/a.rs"); + assert!( + edits[0].text.starts_with(&format!( + "// Copyright (c) {} ACME\n// SPDX-License-Identifier: Apache-2.0\n", + this_year() + )) + ); + assert!(p.code_actions(&doc("/project/README.md", "x"), Range::default()).is_empty()); + + // The command edits the focused editor once. + host.open_editor("/project/src/a.rs", "rust", "fn a() {}\n", &[(0, 0, 0, 0)]); + assert_eq!(p.run_command("add", &host.invocation(), None).unwrap(), None); + assert!(has_header(&host.editor_text())); + assert!(p.run_command("add", &host.invocation(), None).unwrap().unwrap().contains("already")); + } + + #[test] + fn scans_the_project_in_a_task() { + let host = MockHost::install().with_capabilities(&["events", "project.read"]); + host.add_file("src/a.rs", "fn a() {}\n"); + host.add_file("src/b.py", "# Copyright 2024 X\n"); + host.add_file("notes.md", "no header needed\n"); + let mut p = LicenseHeader; + p.run_command("scan", &host.invocation(), None).unwrap(); + let d = host.diagnostics(); + assert_eq!(d["/project/src/a.rs"].len(), 1); + assert!(d.get("/project/src/b.py").is_none_or(Vec::is_empty)); + assert!(!d.contains_key("/project/notes.md")); + assert_eq!(host.tasks().len(), 1); + assert!(host.notifications()[0].body.contains("1 of 2"), "{:?}", host.notifications()); + } +} diff --git a/plugins/official/regex-tester/Cargo.lock b/plugins/official/regex-tester/Cargo.lock new file mode 100644 index 000000000..5ccd74ebb --- /dev/null +++ b/plugins/official/regex-tester/Cargo.lock @@ -0,0 +1,373 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "equivalent" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown", + "serde", + "serde_core", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "log" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" + +[[package]] +name = "macro-string" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b3a5bbb2f63aaa223a671ea1bd0e7bc16bd30ce387324cf63995deaddbbd2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "openidea-plugin" +version = "0.1.0" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "openidea-plugin-openidea-regex-tester" +version = "0.1.0" +dependencies = [ + "openidea-plugin", + "regex", + "serde_json", +] + +[[package]] +name = "prettyplease" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bfe0f4c752e450fc2faf62654f1c134747922825d5b04ca717b8874f41a40c0" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "wasm-encoder" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4495a6f85dd94c411c749303efcbc5defade0b0cbdbc0541495241ab917a9b5a" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86ff6668190d9fb70372b306b4f9fe8930f0e2f57ce72e4922bf2f117900949" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "974d643b125b272607e2fff8012ea14a8328acd7621e4bafa7afb32500052b1b" +dependencies = [ + "bitflags", + "hashbrown", + "indexmap", + "semver", +] + +[[package]] +name = "wit-bindgen" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85a987ab61d365382d25c7d47e26edd48941b3bf6e3fbf76eff918bc71dab06" +dependencies = [ + "bitflags", + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e122e390603abfacd548027016cd0113a6e2bf2f8ce6bdd3658b013456ea8" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e26e13b9d972026778d2ffb7985736de116026fdc8d9464f966e12df2eb240" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a008a0d6b4840677326beb4edbeb210a2f1b7d0183fb7cc33f466b90fd7fb6" +dependencies = [ + "anyhow", + "macro-string", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078def49fdb49cab405c3006e05793b3fdaf7069126ba6b9c97d01ec8c98fe4c" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.262.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f0dc051466ffe46787721fca3d088536f158ae400be044f1b1c386ba9397ad" +dependencies = [ + "anyhow", + "hashbrown", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-ident", + "wasmparser", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/plugins/official/regex-tester/Cargo.toml b/plugins/official/regex-tester/Cargo.toml new file mode 100644 index 000000000..ae13c79c4 --- /dev/null +++ b/plugins/official/regex-tester/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "openidea-plugin-openidea-regex-tester" +version = "0.1.0" +edition = "2024" +publish = false + +# A plugin builds on its own (target wasm32-wasip2), outside any IDE workspace. +[workspace] + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +openidea-plugin = { path = "../../../sdk/rust/openidea-plugin" } +regex = { version = "1", default-features = false, features = ["std", "unicode", "perf-dfa", "perf-onepass", "perf-backtrack", "perf-inline"] } +serde_json = "1" + +[profile.release] +opt-level = "s" +lto = true +strip = true +codegen-units = 1 +panic = "abort" diff --git a/plugins/official/regex-tester/dist/plugin.wasm b/plugins/official/regex-tester/dist/plugin.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9eed421b1bd1cfc2d44d3ebc0563c16dd5dd95c6 GIT binary patch literal 930798 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 z�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, +} + +impl Run { + pub fn parse(v: &Value) -> Option { + let s = |k: &str| v.get(k).and_then(Value::as_str).map(str::to_owned); + Some(Run { + seq: v.get("seq").and_then(Value::as_u64).unwrap_or(0), + pattern: s("pattern")?, + flags: s("flags").unwrap_or_default(), + text: s("text").unwrap_or_default(), + replace: s("replace"), + }) + } +} + +/// UTF-16 offset of every byte offset that starts a char (and the end). +fn utf16_offsets(text: &str) -> Vec { + let mut map = vec![0u32; text.len() + 1]; + let mut at = 0u32; + for (i, c) in text.char_indices() { + map[i] = at; + at += c.len_utf16() as u32; + } + map[text.len()] = at; + map +} + +/// Matches `run` and returns the page's result message. +pub fn evaluate(run: &Run) -> Value { + let fail = |e: String| json!({ "op": "result", "seq": run.seq, "error": e, "matches": [], "count": 0 }); + if run.text.len() > MAX_TEXT { + return fail(format!("the text is longer than {} KiB", MAX_TEXT >> 10)); + } + let flag = |c: char| run.flags.contains(c); + let re = match RegexBuilder::new(&run.pattern) + .case_insensitive(flag('i')) + .multi_line(flag('m')) + .dot_matches_new_line(flag('s')) + .ignore_whitespace(flag('x')) + .size_limit(8 << 20) + .build() + { + Ok(re) => re, + // The parser's message names the position; keep it, minus the repeated pattern. + Err(e) => return fail(e.to_string()), + }; + if run.pattern.is_empty() { + return json!({ "op": "result", "seq": run.seq, "error": null, "matches": [], "count": 0, "groups": [] }); + } + let at = utf16_offsets(&run.text); + let names: Vec = re.capture_names().skip(1).map(|n| n.map_or(Value::Null, |n| json!(n))).collect(); + let mut matches = Vec::new(); + let mut count = 0usize; + for caps in re.captures_iter(&run.text) { + count += 1; + if matches.len() < MAX_MATCHES { + let groups: Vec = (1..caps.len()) + .map(|i| caps.get(i).map_or(Value::Null, |g| json!([at[g.start()], at[g.end()]]))) + .collect(); + let m = caps.get(0).expect("group 0"); + matches.push(json!({ "s": at[m.start()], "e": at[m.end()], "groups": groups })); + } + } + let replaced = run.replace.as_ref().map(|r| { + let mut out = re.replace_all(&run.text, r.as_str()).into_owned(); + if out.len() > MAX_REPLACED { + let mut cut = MAX_REPLACED; + while !out.is_char_boundary(cut) { + cut -= 1; + } + out.truncate(cut); + out.push('…'); + } + out + }); + json!({ + "op": "result", + "seq": run.seq, + "error": null, + "matches": matches, + "count": count, + "groups": names, + "replaced": replaced, + }) +} + +/// The flags the page starts with, from the settings. +fn default_flags() -> String { + let mut f = String::new(); + if host::setting_bool("ignoreCase").unwrap_or(false) { + f.push('i'); + } + if host::setting_bool("multiLine").unwrap_or(true) { + f.push('m'); + } + f +} + +/// The focused editor's first non-empty selection, else its whole text. +fn selection_text(ctx: &Invocation) -> Result { + let editor = ctx.editor().ok_or_else(|| Error::Invalid("focus an editor first".into()))?; + let doc = editor.document()?; + let selected = editor.selections()?.into_iter().filter_map(|r| doc.text_in(r)).find(|t| !t.is_empty()); + let text = selected.map(str::to_owned).unwrap_or(doc.text); + Ok(if text.len() > MAX_TEXT { + let mut cut = MAX_TEXT; + while !text.is_char_boundary(cut) { + cut -= 1; + } + text[..cut].to_owned() + } else { + text + }) +} + +fn post(message: &Value) -> Result<(), Error> { + host::post_view_message(VIEW, &message.to_string()) +} + +impl Plugin for RegexTester { + fn run_command(&mut self, id: &str, ctx: &Invocation, _arg: Option<&str>) -> Result, Error> { + match id { + // To the open tool window (its page ignores it until it has loaded). + "test-selection" => post(&json!({ "op": "text", "text": selection_text(ctx)? })).map(|()| None), + _ => Err(Error::NotFound(format!("command {id}"))), + } + } +} + +impl Views for RegexTester { + fn render(&mut self, view: &str, _viewport: Option, _ctx: &Invocation) -> Result { + if view != VIEW { + return Err(Error::NotFound(view.into())); + } + // The page keeps its own state: the plugin only answers its messages, + // and never re-renders it (that would reload the frame). + let start = json!({ "flags": default_flags() }).to_string().replace('<', "\\u003c"); + let page = PAGE.replacen(r#""__START__""#, &start, 1); + Ok(View::new(Body::Html(page)).button(Button::new("selection", "Use Selection").icon("text"))) + } + + fn handle(&mut self, view: &str, event: ViewEvent, ctx: &Invocation) -> Result<(), Error> { + if view != VIEW { + return Err(Error::NotFound(view.into())); + } + match event { + ViewEvent::Button(b) if b == "selection" => post(&json!({ "op": "text", "text": selection_text(ctx)? })), + ViewEvent::Message(text) => { + let Ok(v) = serde_json::from_str::(&text) else { return Ok(()) }; + match v.get("op").and_then(Value::as_str) { + Some("run") => match Run::parse(&v) { + Some(run) => post(&evaluate(&run)), + None => Ok(()), + }, + Some("selection") => post(&json!({ "op": "text", "text": selection_text(ctx)? })), + _ => Ok(()), + } + } + _ => Ok(()), + } + } +} + +register_plugin!(RegexTester, views); + +#[cfg(test)] +mod tests { + use super::*; + use openidea_plugin::mock::MockHost; + + fn run(pattern: &str, flags: &str, text: &str, replace: Option<&str>) -> Value { + evaluate(&Run { + seq: 7, + pattern: pattern.into(), + flags: flags.into(), + text: text.into(), + replace: replace.map(str::to_owned), + }) + } + + #[test] + fn matches_with_groups_in_utf16_offsets() { + // "é" is one UTF-16 unit but two bytes; "😀" two units, four bytes. + let r = run(r"(?P\w+)@(\d+)", "", "é😀 ab@12 cd@3", None); + assert_eq!(r["error"], Value::Null); + assert_eq!(r["count"], 2); + assert_eq!(r["seq"], 7); + assert_eq!(r["groups"], json!(["word", null])); + assert_eq!(r["matches"][0], json!({ "s": 4, "e": 9, "groups": [[4, 6], [7, 9]] })); + assert_eq!(r["matches"][1]["s"], 10); + } + + #[test] + fn flags_change_the_match() { + let text = "One\none"; + assert_eq!(run("^one$", "", text, None)["count"], 0); + assert_eq!(run("^one$", "m", text, None)["count"], 1); + assert_eq!(run("^one$", "im", text, None)["count"], 2); + assert_eq!(run("e.o", "", text, None)["count"], 0); + assert_eq!(run("e.o", "s", text, None)["count"], 1); + assert_eq!(run("o n e", "x", text, None)["count"], 1); + } + + #[test] + fn replacement_preview_and_errors() { + let r = run(r"(\w+)@(\d+)", "", "ab@12, cd@3", Some("$2:$1")); + assert_eq!(r["replaced"], "12:ab, 3:cd"); + let bad = run("(unclosed", "", "x", None); + assert!(bad["error"].as_str().unwrap().contains("unclosed"), "{bad}"); + assert_eq!(bad["count"], 0); + assert_eq!(run("", "", "x", None)["count"], 0); + } + + #[test] + fn counts_every_match_but_sends_a_bounded_number() { + let text = "a".repeat(5000); + let r = run("a", "", &text, None); + assert_eq!(r["count"], 5000); + assert_eq!(r["matches"].as_array().unwrap().len(), MAX_MATCHES); + } + + #[test] + fn answers_the_page_and_reads_the_selection() { + let host = MockHost::install().with_capabilities(&["editor.read"]); + host.set_setting("ignoreCase", "true"); + let mut p = RegexTester; + let View { body: Body::Html(page), toolbar, .. } = p.render(VIEW, None, &host.invocation()).unwrap() else { + panic!("an html body") + }; + assert!(page.contains(r#"{"flags":"im"}"#), "the settings' flags start the page"); + assert_eq!(toolbar[0].id, "selection"); + + let msg = json!({ "op": "run", "seq": 1, "pattern": "b+", "flags": "", "text": "abbc" }).to_string(); + p.handle(VIEW, ViewEvent::Message(msg), &host.invocation()).unwrap(); + let (view, reply) = host.view_messages().pop().unwrap(); + assert_eq!(view, VIEW); + let reply: Value = serde_json::from_str(&reply).unwrap(); + assert_eq!((reply["count"].clone(), reply["matches"][0]["s"].clone()), (json!(1), json!(1))); + + host.open_editor("/p/a.txt", "plaintext", "first line\nsecond", &[(1, 0, 1, 6)]); + p.handle(VIEW, ViewEvent::Button("selection".into()), &host.invocation()).unwrap(); + let reply: Value = serde_json::from_str(&host.view_messages().pop().unwrap().1).unwrap(); + assert_eq!(reply, json!({ "op": "text", "text": "second" })); + + // Garbage from the page is ignored. + p.handle(VIEW, ViewEvent::Message("not json".into()), &host.invocation()).unwrap(); + } +} diff --git a/plugins/official/regex-tester/src/page.html b/plugins/official/regex-tester/src/page.html new file mode 100644 index 000000000..4dafa5a8a --- /dev/null +++ b/plugins/official/regex-tester/src/page.html @@ -0,0 +1,377 @@ + +

+ diff --git a/scripts/theme/theme.test.ts b/scripts/theme/theme.test.ts index 8224b5c4f..bf5333296 100644 --- a/scripts/theme/theme.test.ts +++ b/scripts/theme/theme.test.ts @@ -14,7 +14,8 @@ const read = (p: string) => readFileSync(p, "utf8"); const css = read("src/styles/tokens.css"); const groups = themeTokenGroups(css); const sets = tokenSets(groups); -const TEMPLATE = "templates/theme-plugin"; +// The official Harbor Night theme, where new themes start (`openidea-plugin new --template theme`). +const TEMPLATE = "plugins/official/harbor-night"; const themeSrc = read(`${TEMPLATE}/themes/harbor-night.theme.json`); const schemeSrc = read(`${TEMPLATE}/themes/harbor-night.scheme.json`); const theme = JSON.parse(stripJsonComments(themeSrc)) as { id: string; kind: string; tokens: Record }; @@ -47,7 +48,7 @@ describe("theme token reference", () => { describe("theme plugin template", () => { it("sets every UI token in the theme file and every editor token in the scheme file", () => { // A failure here means tokens.css gained (or lost) a themeable token: - // add it to templates/theme-plugin/themes/*.json, then run pnpm gen:theme-docs. + // add it to plugins/official/harbor-night/themes/*.json, then run pnpm gen:theme-docs. expect(sorted(Object.keys(theme.tokens))).toEqual(sorted(sets.ui)); expect(sorted(Object.keys(scheme.tokens))).toEqual(sorted(sets.scheme)); }); diff --git a/src-tauri/src/commands/plugin.rs b/src-tauri/src/commands/plugin.rs index 9cad11401..15a6343f4 100644 --- a/src-tauri/src/commands/plugin.rs +++ b/src-tauri/src/commands/plugin.rs @@ -382,7 +382,8 @@ pub async fn plugin_line_markers( ide_host::ops::lsp::plugin_line_markers(&state.host, window.label(), doc).await } -/// Content of a plugin view (`doc`: the document of a custom editor). +/// Content of a plugin view (`doc`: the document of a custom editor; `editor`: for +/// a tool window, the window's active editor, as commands get it). #[tauri::command] #[specta::specta] pub async fn plugin_view_render( @@ -392,12 +393,13 @@ pub async fn plugin_view_render( view: String, viewport: Option, doc: Option, + editor: Option, ) -> IdeResult { let plugins = state.plugins.clone(); - ide_host::plugins::views::render(&state.host, plugins, window.label(), plugin_id, view, viewport, doc).await + ide_host::plugins::views::render(&state.host, plugins, window.label(), plugin_id, view, viewport, doc, editor).await } -/// A user action in a plugin view or custom editor. +/// A user action in a plugin view or custom editor (`doc`, `editor`: as for rendering). #[tauri::command] #[specta::specta] pub async fn plugin_view_event( @@ -407,9 +409,10 @@ pub async fn plugin_view_event( view: String, event: ide_plugin::ViewEvent, doc: Option, + editor: Option, ) -> IdeResult<()> { let plugins = state.plugins.clone(); - ide_host::plugins::views::event(&state.host, plugins, window.label(), plugin_id, view, event, doc).await + ide_host::plugins::views::event(&state.host, plugins, window.label(), plugin_id, view, event, doc, editor).await } /// The page of a plugin's web view or custom editor (`web = …`). diff --git a/src/features/plugins/backend.ts b/src/features/plugins/backend.ts index 45d8f2cae..4d79330e2 100644 --- a/src/features/plugins/backend.ts +++ b/src/features/plugins/backend.ts @@ -26,6 +26,7 @@ import type { } from "@/bindings"; import { tx } from "@/platform/i18n"; import { call, commands, IpcError, isTauri } from "@/platform/ipc"; +import { editorContext } from "./editorContext"; export interface PluginsBackend { list(): Promise; @@ -165,9 +166,11 @@ export const tauriPluginsBackend: PluginsBackend = { }); return (Array.isArray(picked) ? picked[0] : picked) ?? null; }, - renderView: (pluginId, view, viewport, doc) => call(commands.pluginViewRender(pluginId, view, viewport, doc)), + // A tool window's calls (no `doc`) carry the window's active editor. + renderView: (pluginId, view, viewport, doc) => + call(commands.pluginViewRender(pluginId, view, viewport, doc, doc == null ? editorContext() : null)), viewEvent: async (pluginId, view, event, doc) => { - await call(commands.pluginViewEvent(pluginId, view, event, doc)); + await call(commands.pluginViewEvent(pluginId, view, event, doc, doc == null ? editorContext() : null)); }, webPageUrl: async (pluginId, view) => { const page = await call(commands.pluginWebPage(pluginId, view)); @@ -230,7 +233,7 @@ function ensureSubscribed() { // --------------------------------------------------------------------------- // Browser simulation: the bundled sample plugins, with `hello` implemented in JS. -// templates/theme-plugin, abridged. +// plugins/official/harbor-night, abridged. const SAMPLE_THEMES: ActiveTheme["theme"][] = [ { id: "harbor-night", diff --git a/src/features/plugins/editorContext.ts b/src/features/plugins/editorContext.ts new file mode 100644 index 000000000..9371150f1 --- /dev/null +++ b/src/features/plugins/editorContext.ts @@ -0,0 +1,23 @@ +/** + * The editor a plugin call is about: the window's active text editor, as + * commands get it (path, language, selections in line / UTF-16 column). Tool + * windows' renders and events carry it too, so their buttons act on what the + * user is editing; a custom editor's calls carry its own document instead. + */ +import type { PluginEditor } from "@/bindings"; +import { activeEditor } from "@/editor/api"; + +export function editorContext(): PluginEditor | null { + const editor = activeEditor(); + if (!editor?.ctx.path) return null; + const { doc, selection } = editor.view.state; + const pos = (offset: number) => { + const line = doc.lineAt(offset); + return { line: line.number - 1, col: offset - line.from }; + }; + return { + path: editor.ctx.path, + language: editor.ctx.language, + selections: selection.ranges.map((r) => ({ start: pos(r.from), end: pos(r.to) })), + }; +} diff --git a/src/features/plugins/store.ts b/src/features/plugins/store.ts index 7e0ec9961..9b1651239 100644 --- a/src/features/plugins/store.ts +++ b/src/features/plugins/store.ts @@ -6,14 +6,13 @@ import type { CatalogPlugin, Consent, MarketPlugin, - PluginEditor, PluginInfo, PluginStatus, UiContribution, } from "@/bindings"; -import { activeEditor } from "@/editor/api"; import { notifications } from "@/workbench/contributions"; import { pluginsBackend, type PluginsBackend } from "./backend"; +import { editorContext } from "./editorContext"; export const SETTINGS_PAGE_ID = "plugins"; @@ -335,27 +334,11 @@ export function commandTitle(pluginId: string, commandId: string): string { return typeof title === "string" ? title : commandId; } -/** The focused text editor as a command's context: path, language, selections (line / UTF-16 column). */ -function focusedEditor(): PluginEditor | null { - const editor = activeEditor(); - if (!editor?.ctx.path) return null; - const { doc, selection } = editor.view.state; - const pos = (offset: number) => { - const line = doc.lineAt(offset); - return { line: line.number - 1, col: offset - line.from }; - }; - return { - path: editor.ctx.path, - language: editor.ctx.language, - selections: selection.ranges.map((r) => ({ start: pos(r.from), end: pos(r.to) })), - }; -} - /** Runs a plugin command from an action; failures become notifications. */ export async function runPluginCommand(pluginId: string, commandId: string, arg: string | null = null) { const title = commandTitle(pluginId, commandId); try { - return await pluginsBackend().runCommand(pluginId, commandId, arg, focusedEditor()); + return await pluginsBackend().runCommand(pluginId, commandId, arg, editorContext()); } catch (e) { await refreshPlugins(); const status = usePlugins.getState().plugins.find((p) => p.id === pluginId)?.status;