UNPKG

eslint-plugin-canonical

Version:
57 lines (56 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utilities_1 = require("../utilities"); const findConditionalExpressionParent = (node) => { let currentNode = node; while (currentNode.parent) { currentNode = currentNode.parent; if (currentNode.type === 'ConditionalExpression') { return true; } } return false; }; exports.default = (0, utilities_1.createRule)({ create: (context) => { const imported = []; return { ImportDeclaration(node) { for (const specifier of node.specifiers) { if (specifier.type !== 'ImportSpecifier') { continue; } if (specifier.imported.type !== 'Identifier') { continue; } imported.push(specifier.imported.name); } }, JSXOpeningElement(node) { // @ts-expect-error TODO const name = node.name.name; if (!findConditionalExpressionParent(node)) { return; } if (imported.includes(name)) { context.report({ messageId: 'preferReactLazy', node, }); } }, }; }, defaultOptions: [], meta: { docs: { description: 'require that useMount(() => {}) is used instead of useEffect(() => {}, [])', }, messages: { preferReactLazy: 'Use React.lazy() to load conditionally rendered components.', }, schema: [], type: 'suggestion', }, name: 'prefer-use-mount', });