Files
WRNexusJS/editors/vscode/src/extension.js
Clintchiz 2c960fc1dc
Quality / quality (ubuntu-latest) (push) Failing after 9m49s
Quality / quality (windows-latest) (push) Canceled after 0s
refactor: migrate legacy wire namespace to wrn
2026-08-12 18:51:15 +05:30

55 lines
1.7 KiB
JavaScript

// @ts-check
"use strict";
const path = require("node:path");
const vscode = require("vscode");
const { LanguageClient, TransportKind } = require("vscode-languageclient/node");
const WRN_LANGUAGE_ID = "wrn";
/** @type {LanguageClient | undefined} */
let client;
/** @param {vscode.TextDocument} document */
async function recoverWrnLanguage(document) {
if (!document.fileName.toLowerCase().endsWith(".wrn")) return;
if (!["plaintext", "wrn"].includes(document.languageId)) return;
try {
await vscode.languages.setTextDocumentLanguage(document, WRN_LANGUAGE_ID);
} catch (error) {
console.warn(
"[wrnexus] unable to recover .wrn language association:",
error instanceof Error ? error.message : String(error),
);
}
}
/** @param {vscode.ExtensionContext} context */
async function activate(context) {
for (const document of vscode.workspace.textDocuments) void recoverWrnLanguage(document);
context.subscriptions.push(
vscode.workspace.onDidOpenTextDocument((document) => void recoverWrnLanguage(document)),
);
if (!vscode.workspace.getConfiguration("wrnexus").get("languageServer.enable", true)) return;
const module = path.join(context.extensionPath, "src", "language-server.cjs");
client = new LanguageClient(
"wrnexusLanguageServer",
"WRNexus Language Server",
{
run: { module, transport: TransportKind.stdio },
debug: { module, transport: TransportKind.stdio, options: { execArgv: ["--nolazy"] } },
},
{ documentSelector: [{ scheme: "file", language: WRN_LANGUAGE_ID }] },
);
await client.start();
}
async function deactivate() {
const running = client;
client = undefined;
if (running) await running.stop();
}
module.exports = { activate, deactivate, recoverWrnLanguage };