ecmarkup
Version:
Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.
49 lines (48 loc) • 1.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const utils_1 = require("../../utils");
const ruleId = 'if-else-consistency';
/*
Checks that `if`/`else` statements are both single-line or both multi-line.
*/
function default_1(report, step, algorithmSource, parsedSteps, parent) {
const stepSeq = parsedSteps.get(step);
if (stepSeq == null) {
return;
}
const firstSeqItem = stepSeq.items[0];
if ((firstSeqItem === null || firstSeqItem === void 0 ? void 0 : firstSeqItem.name) !== 'text' || !/^(?:If|Else if)\b/.test(firstSeqItem.contents)) {
return;
}
const idx = parent.contents.indexOf(step);
if (idx >= parent.contents.length - 1) {
return;
}
const nextStep = parent.contents[idx + 1];
const nextSeq = parsedSteps.get(nextStep);
if (nextSeq == null) {
return;
}
const nextFirstSeqitem = nextSeq.items[0];
if ((nextFirstSeqitem === null || nextFirstSeqitem === void 0 ? void 0 : nextFirstSeqitem.name) !== 'text' ||
!/^(?:Else|Otherwise)\b/.test(nextFirstSeqitem.contents)) {
return;
}
if (step.sublist != null && nextStep.sublist == null) {
const location = (0, utils_1.offsetToLineAndColumn)(algorithmSource, nextFirstSeqitem.location.start.offset);
report({
ruleId,
...location,
message: '"Else" steps should be multiline whenever their corresponding "If" is',
});
}
else if (step.sublist == null && nextStep.sublist != null) {
const location = (0, utils_1.offsetToLineAndColumn)(algorithmSource, firstSeqItem.location.start.offset);
report({
ruleId,
...location,
message: '"If" steps should be multiline whenever their corresponding "Else" is',
});
}
}
;