UNPKG

@masknet/eslint-plugin

Version:
62 lines 2.08 kB
import { createRule } from "../rule.js"; export default createRule({ name: 'no-top-level', meta: { type: 'problem', docs: { description: 'Disallow side-effect at module top-level', }, schema: [ { type: 'object', properties: { 'variable': { type: 'boolean' }, 'side-effect': { type: 'boolean' }, }, additionalProperties: false, }, ], messages: { 'variable': 'Unexpected {{kind}} in top-level, use const.', 'side-effect': 'Side effects in top-level are not allowed.', }, }, defaultOptions: [{ 'variable': true, 'side-effect': true }], create(context, [options]) { const handleVariable = options.variable ? (node) => { if (node.kind === 'const') return; if (!isTopLevel(node)) return; context.report({ node, messageId: 'variable', data: { kind: node.kind } }); } : undefined; const handleSideEffect = options['side-effect'] ? (node) => { if (!isTopLevel(node)) return; context.report({ node, messageId: 'side-effect' }); } : undefined; return { IfStatement: handleSideEffect, ForStatement: handleSideEffect, ForInStatement: handleSideEffect, ForOfStatement: handleSideEffect, DoWhileStatement: handleSideEffect, WhileStatement: handleSideEffect, SwitchStatement: handleSideEffect, ExpressionStatement: handleSideEffect, VariableDeclaration: handleVariable, }; }, }); function isTopLevel(node) { let { parent } = node; while (parent?.type === 'BlockStatement') { parent = parent.parent; } return parent?.type === 'Program'; } //# sourceMappingURL=no-top-level.js.map