From 0109a736d9a84f36323988835398e04ba4211a80 Mon Sep 17 00:00:00 2001 From: "Wu, Zhenyu" Date: Tue, 5 Mar 2024 20:34:21 +0800 Subject: [PATCH] :sparkles: Add dot-language-server --- package.json | 1 + src/extension.ts | 3 +- src/index.ts | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ src/server.ts | 1 + 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/index.ts create mode 100644 src/server.ts diff --git a/package.json b/package.json index 4565a45..42a4238 100644 --- a/package.json +++ b/package.json @@ -155,6 +155,7 @@ }, "dependencies": { "@hpcc-js/wasm": "^1.3.0", + "dot-language-server": "1.2.0", "open": "^8.0.2", "tmp": "^0.2.1", "vsce": "^2.15.0" diff --git a/src/extension.ts b/src/extension.ts index b8bf7e2..a80df04 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -27,11 +27,12 @@ import { } from 'vscode'; import { GraphvizPreviewGenerator } from './GraphvizPreviewGenerator'; +import { activate as _activate } from '.'; const DOT = 'dot'; export function activate(context: ExtensionContext) { - + _activate(context); const graphvizPreviewGenerator = new GraphvizPreviewGenerator(context); // When the active document is changed set the provider for rebuild diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..adaf7b8 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,73 @@ +import {resolve} from 'path'; +import { + window, + workspace, + services, + ExtensionContext, + // Disposable, + DidChangeTextDocumentParams, + // ViewColumn, + TextDocument, + TransportKind, + // TextEditorSelectionChangeEvent, + commands +} from "coc.nvim"; + +import { + ServerOptions, + LanguageClient, + LanguageClientOptions, +} from "coc.nvim"; + +// import * as gvp from "./GraphvizProvider"; + +export function activate(context: ExtensionContext) { + let serverModule = resolve(context.extensionPath, 'out', 'src', 'server') + const lc = createLanguageClient(serverModule); + const lcDisposable = services.registLanguageClient(lc); + + // const gvProviders = createGraphvizProviders(); + + context.subscriptions.push(lcDisposable/* , ...gvProviders */); +} + +function createLanguageClient(serverModule: string) { + const serverOptions: ServerOptions = { + run : { + module: serverModule, + transport: TransportKind.ipc, + }, + debug: { + module: serverModule, + transport: TransportKind.ipc, + options: { + execArgv: [ + "--nolazy", + "--debug=6009" + ] + } + }, + + // Type assertion because of unreleased patch + // https://github.com/Microsoft/vscode-languageserver-node/issues/358 + options: { shell: true } as any + }; + + // Options to control the language client + const clientOptions: LanguageClientOptions = { + // Register the server for plain text documents + documentSelector: [{ language: "dot" }], + synchronize: { + configurationSection: "dotLanguageServer", + // Notify the server about file changes to '.clientrc files contain in the workspace + fileEvents: workspace.createFileSystemWatcher("**/.clientrc") + } + }; + + return new LanguageClient( + "dotLanguageServer", + "DOT Language Server", + serverOptions, + clientOptions, + ); +} diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..0322caf --- /dev/null +++ b/src/server.ts @@ -0,0 +1 @@ +import 'dot-language-server/lib/cli'