UNPKG

ui5plugin-parser

Version:
51 lines (50 loc) 2.26 kB
"use strict"; 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;