You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/** * @fileoverview Rule to disallow specified names in exports * @author Milos Djermanovic */
"use strict";
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
module.exports = { meta: { type: "suggestion",
docs: { description: "disallow specified names in exports", category: "ECMAScript 6", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-exports" },
schema: [{ type: "object", properties: { restrictedNamedExports: { type: "array", items: { type: "string" }, uniqueItems: true } }, additionalProperties: false }],
messages: { restrictedNamed: "'{{name}}' is restricted from being used as an exported name." } },
create(context) {
const restrictedNames = new Set(context.options[0] && context.options[0].restrictedNamedExports);
/** * Checks and reports given exported identifier. * @param {ASTNode} node exported `Identifer` node to check. * @returns {void} */ function checkExportedName(node) { const name = node.name;
if (restrictedNames.has(name)) { context.report({ node, messageId: "restrictedNamed", data: { name } }); } }
return { ExportAllDeclaration(node) { if (node.exported) { checkExportedName(node.exported); } },
ExportNamedDeclaration(node) { const declaration = node.declaration;
if (declaration) { if (declaration.type === "FunctionDeclaration" || declaration.type === "ClassDeclaration") { checkExportedName(declaration.id); } else if (declaration.type === "VariableDeclaration") { context.getDeclaredVariables(declaration) .map(v => v.defs.find(d => d.parent === declaration)) .map(d => d.name) // Identifier nodes
.forEach(checkExportedName); } } else { node.specifiers .map(s => s.exported) .forEach(checkExportedName); } } }; } };
|