UNPKG

plaxtony

Version:

Static code analysis of SC2 Galaxy Script

64 lines 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefinitionProvider = void 0; const checker_1 = require("../compiler/checker"); const provider_1 = require("./provider"); const utils_1 = require("../compiler/utils"); const utils_2 = require("./utils"); const lsp = require("vscode-languageserver"); class DefinitionProvider extends provider_1.AbstractProvider { processIncludeStatement(inclStmt) { const links = []; const qresults = this.store.qualifiedDocuments.get(inclStmt.path.value.toLowerCase().replace(/\.galaxy$/, '')); if (!qresults) return; for (const qsfile of qresults.values()) { const targetRange = lsp.Range.create({ line: 0, character: 0 }, { line: 0, character: 0 }); links.push({ targetUri: qsfile.fileName, targetRange: utils_2.getNodeRange(qsfile), targetSelectionRange: targetRange, originSelectionRange: utils_2.getNodeRange(inclStmt.path), }); } return links; } processIdentifier(identifier) { const links = []; const checker = new checker_1.TypeChecker(this.store); const symbol = checker.getSymbolAtLocation(identifier); if (!symbol) return; for (const decl of symbol.declarations) { let declName = decl; if (utils_1.isNamedDeclarationKind(decl.kind)) { declName = decl.name; } const sourceFile = utils_1.getSourceFileOfNode(decl); links.push({ targetUri: sourceFile.fileName, targetRange: utils_2.getNodeRange(decl), targetSelectionRange: utils_2.getNodeRange(declName), }); } return links; } getDefinitionAt(uri, position) { const sourceFile = this.store.documents.get(uri); if (!sourceFile) return; const currentToken = utils_2.getTokenAtPosition(position, sourceFile); if (!currentToken) return; if (currentToken.kind === 3 /* StringLiteral */) { if (currentToken.parent.kind === 136 /* IncludeStatement */) { return this.processIncludeStatement(currentToken.parent); } } else if (currentToken.kind === 113 /* Identifier */) { return this.processIdentifier(currentToken); } } } exports.DefinitionProvider = DefinitionProvider; //# sourceMappingURL=definitions.js.map