/** Real CodeMirror mouse/navigation path with a deliberately slow IPC boundary. * Semantic correctness and JVM timings live in the real-JDT configuration harness. */ import { EditorState } from "@codemirror/state"; import { EditorView } from "@codemirror/view"; import { commands } from "../src/platform/ipc"; import { usePlatform } from "../src/platform/platformInfo"; import { provideEditorService } from "../src/workbench/contributions"; import { lspDoc } from "../src/editor/lsp/lsp"; import { navigationExtension } from "../src/editor/lsp/navigation"; import { hoverExtension } from "../src/editor/lsp/hover"; import { lspTheme } from "../src/editor/lsp/theme"; Object.assign(window, { __TAURI_INTERNALS__: {} }); usePlatform.setState({ os: "macos" }); document.body.innerHTML = `
0`; const configHost = document.querySelector("#config")!; const javaHost = document.querySelector("#java")!; let requests = 0; let hoverRequests = 0; let targetLine = 0; let clickedAt = 0; const latency: number[] = []; commands.lspGoto = async () => { document.querySelector("#requests")!.textContent = String(++requests); await new Promise((resolve) => setTimeout(resolve, 500)); return { status: "ok", data: [ { path: "/fixture/Settings.java", uri: null, range: { start: { line: targetLine, col: 24 }, end: { line: targetLine, col: 31 } }, }, ], }; }; commands.lspHover = async () => { hoverRequests++; return { status: "ok", data: { contents: { kind: "plaintext", value: "dingtalk.driver-class-name String" }, range: null }, }; }; commands.lspDocumentLinks = async () => ({ status: "ok", data: [] }); commands.lspDocumentHighlights = async () => ({ status: "ok", data: [] }); commands.cancelRequest = async () => ({ status: "ok", data: null }); const java = new EditorView({ parent: javaHost, state: EditorState.create({ doc: "class Settings { String agentId; }", extensions: [ lspDoc.of({ doc: 2, path: "/fixture/Settings.java", language: "java", uiMode: "Java", readOnly: false }), navigationExtension(), ], }), }); const config = new EditorView({ parent: configHost, state: EditorState.create({ doc: "dingtalk:\n driver-class-name: demo\n", extensions: [ EditorState.languageData.of(() => [{ wordChars: "-" }]), lspDoc.of({ doc: 1, path: "/fixture/application.yml", language: "yaml", uiMode: "YAML", readOnly: false }), navigationExtension(), hoverExtension(), lspTheme, ], }), }); config.contentDOM.addEventListener( "mousedown", () => { clickedAt = performance.now(); }, true, ); provideEditorService({ openFile: async (path, options) => { javaHost.hidden = false; configHost.hidden = true; java.dispatch({ selection: { anchor: java.state.doc.line((options?.selection?.line ?? 0) + 1).from + 24 } }); document.querySelector("#opened")!.textContent = `${path}:${options?.selection?.line}`; latency.push(performance.now() - clickedAt); }, } as Parameters[0]); document.querySelector("#back")!.addEventListener("click", () => { javaHost.hidden = true; configHost.hidden = false; }); document.querySelector("#edit")!.addEventListener("click", () => { java.dispatch({ changes: { from: 0, insert: "// moved\n" } }); targetLine++; }); Object.assign(window, { navigationMetrics: () => ({ requests, hoverRequests, latency, injectedServerDelayMs: 500 }) });