fish-lsp
Version:
LSP implementation for fish/fish-shell
42 lines (41 loc) • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDocumentHighlights = getDocumentHighlights;
const translation_1 = require("./utils/translation");
const tree_sitter_1 = require("./utils/tree-sitter");
const vscode_languageserver_1 = require("vscode-languageserver");
/**
* TODO:
* ADD DocumentHighlightKind.Read | DocumentHighlightKind.Write support
*/
function getDocumentHighlights(tree, node) {
const highlights = [];
const nodeSymbolKind = (0, translation_1.toSymbolKind)(node);
function visitNode(currentNode) {
if (!currentNode)
return;
const currSymbolKind = (0, translation_1.toSymbolKind)(currentNode);
const equalKinds = currSymbolKind === nodeSymbolKind || currentNode.type === node.type;
if (equalKinds && currentNode.text === node.text) {
highlights.push({
range: {
start: {
line: currentNode.startPosition.row,
character: currentNode.startPosition.column,
},
end: {
line: currentNode.endPosition.row,
character: currentNode.endPosition.column,
},
},
// kind: DocumentHighlightKind.Text,
kind: (0, tree_sitter_1.equalRanges)((0, tree_sitter_1.getRange)(currentNode), (0, tree_sitter_1.getRange)(node))
? vscode_languageserver_1.DocumentHighlightKind.Read
: vscode_languageserver_1.DocumentHighlightKind.Text,
});
}
currentNode.children.forEach(child => visitNode(child));
}
visitNode(tree.rootNode);
return highlights;
}