@abaplint/core
Version:
abaplint - Core API
71 lines • 2.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MacroReferences = void 0;
class MacroReferences {
constructor() {
this.definitions = {};
this.references = {};
}
addDefinition(ref, start, end) {
if (this.definitions[ref.filename] === undefined) {
this.definitions[ref.filename] = [];
}
else if (this.definitions[ref.filename].find((d) => d.token.getStart().equals(ref.token.getStart()))) {
return;
}
this.definitions[ref.filename].push({ token: ref.token, start, end });
}
getDefinitionRange(filename, token) {
for (const d of this.definitions[filename] || []) {
if (d.token.getStart().equals(token.getStart())) {
return { start: d.start, end: d.end };
}
}
return undefined;
}
addReference(ref) {
if (this.references[ref.filename] === undefined) {
this.references[ref.filename] = [];
}
this.references[ref.filename].push(ref);
}
listDefinitionsByFile(filename) {
const ret = [];
for (const d of this.definitions[filename] || []) {
ret.push(d.token);
}
return ret;
}
listUsagesbyMacro(filename, token) {
const ret = [];
const tokenStr = token.getStr().toUpperCase();
for (const ref of this.references[filename] || []) {
if (ref.token.getStr().toUpperCase() === tokenStr) {
ret.push(ref);
}
}
return ret;
}
clear(filename) {
delete this.definitions[filename];
delete this.references[filename];
}
findDefinitionByUsage(filename, token) {
const tokenStr = token.getStr().toUpperCase();
for (const ref of this.references[filename] || []) {
if (ref.token.getStart().equals(token.getStart())) {
for (const d of this.definitions[ref.filename] || []) {
if (d.token.getStr().toUpperCase() === tokenStr) {
return {
filename: ref.filename,
token: d.token,
};
}
}
}
}
return undefined;
}
}
exports.MacroReferences = MacroReferences;
//# sourceMappingURL=macro_references.js.map