eslint-plugin-canonical
Version:
Canonical linting rules for ESLint.
57 lines (56 loc) • 1.81 kB
JavaScript
;
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',
});