ui5plugin-parser
Version:
51 lines (50 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const RangeAdapter_1 = require("../range/adapters/RangeAdapter");
class ReferenceFinderBase {
constructor(parser) {
this._parser = parser;
}
_addLocationsFromXMLDocument(XMLDoc, member, locations) {
const cache = XMLDoc.getCache("referenceCodeLensCache") || {};
if (cache[member.owner]?.[`_${member.name}`]) {
locations.push(...cache[member.owner][`_${member.name}`]);
}
else {
const tagsAndAttributes = this._parser.xmlParser.getXMLFunctionCallTagsAndAttributes(XMLDoc, member.name, member.owner);
const currentLocations = [];
tagsAndAttributes.forEach(tagAndAttribute => {
tagAndAttribute.attributes.forEach(attribute => {
const positionBegin = tagAndAttribute.tag.positionBegin +
tagAndAttribute.tag.text.indexOf(attribute) +
this._gerIndexOfAttributeValue(attribute, member.name);
const positionEnd = positionBegin + member.name.length;
const range = RangeAdapter_1.RangeAdapter.offsetsRange(XMLDoc.content, positionBegin, positionEnd);
if (range) {
currentLocations.push({ filePath: XMLDoc.fsPath, range: range });
}
});
});
if (currentLocations.length > 0) {
locations.push(...currentLocations);
}
if (!cache[member.owner]) {
cache[member.owner] = {};
}
cache[member.owner][`_${member.name}`] = currentLocations;
XMLDoc.setCache("referenceCodeLensCache", cache);
}
}
_gerIndexOfAttributeValue(attribute, memberName) {
const rMember = new RegExp(`(\\.|'|")${memberName}`);
const startsWithSomething = rMember.test(attribute);
if (startsWithSomething) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return rMember.exec(attribute).index + 1;
}
else {
return attribute.indexOf(memberName);
}
}
}
exports.default = ReferenceFinderBase;