UNPKG

@maniascript/mslint

Version:
43 lines (42 loc) 1.75 kB
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`); } } } } }; } };