eslint-plugin-etc
Version:
More general-purpose ESLint rules
50 lines (49 loc) • 1.63 kB
JavaScript
const eslint_etc_1 = require("eslint-etc");
const tsutils = require("tsutils");
const ts = require("typescript");
const utils_1 = require("../utils");
const defaultOptions = [];
const rule = (0, utils_1.ruleCreator)({
defaultOptions,
meta: {
docs: {
description: "Forbids the use of `const enum`.",
recommended: false,
},
fixable: undefined,
hasSuggestions: false,
messages: {
forbidden: "`const enum` is forbidden.",
},
schema: [
{
properties: {
allowLocal: { type: "boolean" },
},
type: "object",
},
],
type: "problem",
},
name: "no-const-enum",
create: (context, unused) => ({
TSEnumDeclaration: (node) => {
const [{ allowLocal = false } = {}] = context.options;
const { esTreeNodeToTSNodeMap } = (0, eslint_etc_1.getParserServices)(context);
const enumDeclaration = esTreeNodeToTSNodeMap.get(node);
if (allowLocal &&
!tsutils.hasModifier(enumDeclaration.modifiers, ts.SyntaxKind.ExportKeyword)) {
return;
}
if (!tsutils.hasModifier(enumDeclaration.modifiers, ts.SyntaxKind.ConstKeyword)) {
return;
}
context.report({
messageId: "forbidden",
loc: (0, eslint_etc_1.getLoc)(enumDeclaration.name),
});
},
}),
});
module.exports = rule;
;