UNPKG

@masknet/eslint-plugin

Version:
67 lines 2.19 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.', }, }, resolveOptions(options) { return { 'variable': options?.variable ?? true, 'side-effect': options?.['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