plaxtony
Version:
Static code analysis of SC2 Galaxy Script
48 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NavigationProvider = void 0;
const utils_1 = require("../compiler/utils");
const utils_2 = require("./utils");
const provider_1 = require("./provider");
function collectDeclarations(sourceFile) {
let declarations = [];
function registerDeclaration(node) {
declarations.push(node);
}
function visitNode(node) {
if (node.kind === 141 /* VariableDeclaration */ ||
node.kind === 142 /* FunctionDeclaration */ ||
node.kind === 140 /* StructDeclaration */) {
registerDeclaration(node);
}
if (node.kind === 127 /* SourceFile */) {
utils_1.forEachChild(node, child => visitNode(child));
}
}
visitNode(sourceFile);
return declarations;
}
class NavigationProvider extends provider_1.AbstractProvider {
getDocumentSymbols(uri) {
const sourceFile = this.store.documents.get(uri);
if (!sourceFile)
return [];
return collectDeclarations(sourceFile);
}
getWorkspaceSymbols(query) {
let declarations = [];
outer: for (const document of this.store.documents.values()) {
for (const decl of collectDeclarations(document)) {
if (!query || utils_2.fuzzysearch(query, decl.name.name)) {
declarations.push(decl);
if (declarations.length >= 1000) {
break outer;
}
}
}
}
return declarations;
}
}
exports.NavigationProvider = NavigationProvider;
//# sourceMappingURL=navigation.js.map