@maniascript/mslint
Version:
ManiaScript linter
43 lines (42 loc) • 1.75 kB
JavaScript
import {} from '../linter/rule.js';
import { VariableDeclaration } from '@maniascript/parser';
export var Target;
(function (Target) {
Target["Always"] = "Always";
Target["AlwaysTrait"] = "AlwaysTrait";
Target["Never"] = "Never";
})(Target || (Target = {}));
export const initDeclaration = {
meta: {
id: 'init-declaration',
description: 'Require or forbid initialization in variable declarations',
recommended: true,
settings: {
target: 'AlwaysTrait'
}
},
create(context) {
const target = context.settings['target'] !== undefined ? context.settings['target'] : Target.AlwaysTrait;
return {
'VariableDeclaration:exit': (node) => {
if (node instanceof VariableDeclaration && !node.isGlobal) {
if (target === Target.Always) {
if (node.initializerExpression === undefined) {
context.report(node, `Variable '${node.name.name}' must be initialized on declaration`);
}
}
else if (target === Target.AlwaysTrait) {
if (node.forTarget !== undefined && node.initializerExpression === undefined) {
context.report(node, `Variable '${node.name.name}' must be initialized on declaration`);
}
}
else {
if (node.initializerExpression !== undefined) {
context.report(node, `Variable '${node.name.name}' should not be initialized on declaration`);
}
}
}
}
};
}
};