ui5plugin-linter
Version:
47 lines (46 loc) • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InterfaceLinter = void 0;
const Linter_1 = require("../../Linter");
const JSLinter_1 = require("./abstraction/JSLinter");
class InterfaceLinter extends JSLinter_1.JSLinter {
constructor() {
super(...arguments);
this.className = Linter_1.JSLinters.InterfaceLinter;
}
_getErrors(document) {
const errors = [];
const UIClass = this._parser.textDocumentTransformer.toCustomUIClass(document);
if (UIClass?.interfaces && UIClass.interfaces.length > 0) {
const interfaceMembers = UIClass.interfaces.flatMap(theInterface => [
...this._parser.classFactory.getClassMethods(theInterface, false),
...this._parser.classFactory.getClassFields(theInterface, false)
]);
const undefinedMembers = [];
const members = [...UIClass.methods, ...UIClass.fields];
interfaceMembers.forEach(interfaceMember => {
const memberDefined = !!members.find(member => member.name === interfaceMember.name);
if (!memberDefined) {
undefinedMembers.push(interfaceMember);
}
});
undefinedMembers.forEach(member => {
errors.push({
source: this.className,
acornNode: null,
className: UIClass.className,
code: "UI5Plugin",
message: `Interface "${member.owner}" requires "${member.name}" member implementation`,
range: {
start: { line: 1, column: 0 },
end: { line: 1, column: 0 }
},
severity: this._configHandler.getSeverity(this.className),
fsPath: document.fileName
});
});
}
return errors;
}
}
exports.InterfaceLinter = InterfaceLinter;