kjelsrud.dev/node_modules/vscode-html-languageservice/lib/esm/services/htmlSymbolsProvider.js

41 lines
1.6 KiB
JavaScript
Raw Normal View History

2023-07-19 21:31:30 +02:00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Location, Range, SymbolKind } from '../htmlLanguageTypes';
export function findDocumentSymbols(document, htmlDocument) {
const symbols = [];
htmlDocument.roots.forEach(node => {
provideFileSymbolsInternal(document, node, '', symbols);
});
return symbols;
}
function provideFileSymbolsInternal(document, node, container, symbols) {
const name = nodeToName(node);
const location = Location.create(document.uri, Range.create(document.positionAt(node.start), document.positionAt(node.end)));
const symbol = {
name: name,
location: location,
containerName: container,
kind: SymbolKind.Field
};
symbols.push(symbol);
node.children.forEach(child => {
provideFileSymbolsInternal(document, child, name, symbols);
});
}
function nodeToName(node) {
let name = node.tag;
if (node.attributes) {
const id = node.attributes['id'];
const classes = node.attributes['class'];
if (id) {
name += `#${id.replace(/[\"\']/g, '')}`;
}
if (classes) {
name += classes.replace(/[\"\']/g, '').split(/\s+/).map(className => `.${className}`).join('');
}
}
return name || '?';
}