init source
This commit is contained in:
Generated
Vendored
+81
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* @fileoverview Flag shouldComponentUpdate when extending PureComponent
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const Components = require('../util/Components');
|
||||
const astUtil = require('../util/ast');
|
||||
const docsUrl = require('../util/docsUrl');
|
||||
|
||||
function errorMessage(node) {
|
||||
return `${node} does not need shouldComponentUpdate when extending React.PureComponent.`;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Rule Definition
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
module.exports = {
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'Flag shouldComponentUpdate when extending PureComponent',
|
||||
category: 'Possible Errors',
|
||||
recommended: false,
|
||||
url: docsUrl('no-redundant-should-component-update')
|
||||
},
|
||||
schema: []
|
||||
},
|
||||
|
||||
create: Components.detect((context, components, utils) => {
|
||||
/**
|
||||
* Checks for shouldComponentUpdate property
|
||||
* @param {ASTNode} node The AST node being checked.
|
||||
* @returns {Boolean} Whether or not the property exists.
|
||||
*/
|
||||
function hasShouldComponentUpdate(node) {
|
||||
const properties = astUtil.getComponentProperties(node);
|
||||
return properties.some((property) => {
|
||||
const name = astUtil.getPropertyName(property);
|
||||
return name === 'shouldComponentUpdate';
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get name of node if available
|
||||
* @param {ASTNode} node The AST node being checked.
|
||||
* @return {String} The name of the node
|
||||
*/
|
||||
function getNodeName(node) {
|
||||
if (node.id) {
|
||||
return node.id.name;
|
||||
}
|
||||
if (node.parent && node.parent.id) {
|
||||
return node.parent.id.name;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for violation of rule
|
||||
* @param {ASTNode} node The AST node being checked.
|
||||
*/
|
||||
function checkForViolation(node) {
|
||||
if (utils.isPureComponent(node)) {
|
||||
const hasScu = hasShouldComponentUpdate(node);
|
||||
if (hasScu) {
|
||||
const className = getNodeName(node);
|
||||
context.report({
|
||||
node,
|
||||
message: errorMessage(className)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
ClassDeclaration: checkForViolation,
|
||||
ClassExpression: checkForViolation
|
||||
};
|
||||
})
|
||||
};
|
||||
Reference in New Issue
Block a user