@maniascript/mslint
Version:
ManiaScript linter
30 lines (29 loc) • 1.12 kB
JavaScript
import {} from '../linter/rule.js';
import { SwitchStatement } from '@maniascript/parser';
import { getNodeText, sameTokens } from '../linter/ast-utils.js';
export const noDupeCase = {
meta: {
id: 'no-dupe-case',
description: 'Forbid duplicate case in switch statements',
recommended: true
},
create(context) {
return {
'SwitchStatement:exit': (node) => {
if (node instanceof SwitchStatement) {
const previousTests = [];
for (const switchCase of node.cases) {
for (const test of switchCase.tests) {
if (previousTests.some(previousTest => sameTokens(test, previousTest, context.tokens))) {
context.report(test, `Duplicate case '${getNodeText(test, context.tokens)}'`);
}
else {
previousTests.push(test);
}
}
}
}
}
};
}
};