feat(language-server): add tag folding and linked editing

This commit is contained in:
2026-08-18 21:10:57 +05:30
parent bd0c1317ff
commit d9e8f5be82
5 changed files with 149 additions and 2 deletions
+24 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// WRN editor language server source hash: 6a4f4c8e370f4063c863f89ca0dd57923fdb2b940a3e63980984ed2ff45f7af0
// WRN editor language server source hash: 1317c4e318ab938fffab3dd5b65655b0e220a81c481c9fa92f23706ede60303c
// WRN editor language server generator hash: f593a44aaf05495b789ce7a3086bee1eebb951b884d41c0e017bbcfe5f547e72
// @bun @bun-cjs
(function(exports, require, module, __filename, __dirname) {var __create = Object.create;
@@ -195960,6 +195960,16 @@ function htmlHover(document, position) {
const contents = markdown(result.contents);
return contents ? { contents } : null;
}
function htmlFoldingRanges(document) {
return service.getFoldingRanges(htmlDocument(document)).map((range) => ({ startLine: range.startLine, endLine: range.endLine }));
}
function htmlLinkedEditingRanges(document, position) {
if (!isInsideHtml(document, offsetAt2(document.text, position)))
return null;
const virtual = htmlDocument(document);
const ranges = service.findLinkedEditingRanges(virtual, position, service.parseHTMLDocument(virtual));
return ranges && ranges.length ? ranges : null;
}
function mergeCompletions(wrnexus, html) {
const taken = new Set(wrnexus.map((item) => item.label));
return [
@@ -196066,6 +196076,8 @@ async function handle(message) {
triggerCharacters: ["<", "@", ":", ".", " ", "=", '"', "/"]
},
hoverProvider: true,
foldingRangeProvider: true,
linkedEditingRangeProvider: true,
definitionProvider: true,
referencesProvider: true,
renameProvider: { prepareProvider: true },
@@ -196169,6 +196181,17 @@ async function handle(message) {
result(message.id, html ?? (document ? hover(document, params.position) : null));
break;
}
case "textDocument/foldingRange": {
const document = documents.get(params.textDocument.uri);
result(message.id, document ? htmlFoldingRanges(document) : []);
break;
}
case "textDocument/linkedEditingRange": {
const document = documents.get(params.textDocument.uri);
const ranges = document ? htmlLinkedEditingRanges(document, params.position) : null;
result(message.id, ranges ? { ranges } : null);
break;
}
case "textDocument/definition": {
const document = documents.get(params.textDocument.uri);
result(message.id, document ? definitionLocation(document, params.position) : null);