eslint-plugin-react
Advanced tools
Comparing version 7.29.3 to 7.29.4
@@ -231,2 +231,61 @@ /** | ||
function getComponentTypeAnnotation(component) { | ||
// If this is a functional component that uses a global type, check it | ||
if ( | ||
(component.node.type === 'FunctionDeclaration' || component.node.type === 'ArrowFunctionExpression') | ||
&& component.node.params | ||
&& component.node.params.length > 0 | ||
&& component.node.params[0].typeAnnotation | ||
) { | ||
return component.node.params[0].typeAnnotation.typeAnnotation; | ||
} | ||
if ( | ||
component.node.parent | ||
&& component.node.parent.type === 'VariableDeclarator' | ||
&& component.node.parent.id | ||
&& component.node.parent.id.type === 'Identifier' | ||
&& component.node.parent.id.typeAnnotation | ||
&& component.node.parent.id.typeAnnotation.typeAnnotation | ||
&& component.node.parent.id.typeAnnotation.typeAnnotation.typeParameters | ||
&& ( | ||
component.node.parent.id.typeAnnotation.typeAnnotation.typeParameters.type === 'TSTypeParameterInstantiation' | ||
|| component.node.parent.id.typeAnnotation.typeAnnotation.typeParameters.type === 'TypeParameterInstantiation' | ||
) | ||
) { | ||
return component.node.parent.id.typeAnnotation.typeAnnotation.typeParameters.params.find( | ||
(param) => param.type === 'TSTypeReference' || param.type === 'GenericTypeAnnotation' | ||
); | ||
} | ||
} | ||
function findAllTypeAnnotations(identifier, node) { | ||
if (node.type === 'TSTypeLiteral' || node.type === 'ObjectTypeAnnotation') { | ||
const currentNode = [].concat( | ||
objectTypeAnnotations.get(identifier.name) || [], | ||
node | ||
); | ||
objectTypeAnnotations.set(identifier.name, currentNode); | ||
} else if ( | ||
node.type === 'TSParenthesizedType' | ||
&& ( | ||
node.typeAnnotation.type === 'TSIntersectionType' | ||
|| node.typeAnnotation.type === 'TSUnionType' | ||
) | ||
) { | ||
node.typeAnnotation.types.forEach((type) => { | ||
findAllTypeAnnotations(identifier, type); | ||
}); | ||
} else if ( | ||
node.type === 'TSIntersectionType' | ||
|| node.type === 'TSUnionType' | ||
|| node.type === 'IntersectionTypeAnnotation' | ||
|| node.type === 'UnionTypeAnnotation' | ||
) { | ||
node.types.forEach((type) => { | ||
findAllTypeAnnotations(identifier, type); | ||
}); | ||
} | ||
} | ||
// -------------------------------------------------------------------------- | ||
@@ -296,12 +355,7 @@ // Public | ||
TypeAlias(node) { | ||
// Cache all ObjectType annotations, we will check them at the end | ||
if (node.right.type === 'ObjectTypeAnnotation') { | ||
objectTypeAnnotations.set(node.id.name, node.right); | ||
} | ||
findAllTypeAnnotations(node.id, node.right); | ||
}, | ||
TSTypeAliasDeclaration(node) { | ||
if (node.typeAnnotation.type === 'TSTypeLiteral') { | ||
objectTypeAnnotations.set(node.id.name, node.typeAnnotation); | ||
} | ||
findAllTypeAnnotations(node.id, node.typeAnnotation); | ||
}, | ||
@@ -316,15 +370,7 @@ | ||
const list = components.list(); | ||
Object.keys(list).forEach((component) => { | ||
// If this is a functional component that uses a global type, check it | ||
if ( | ||
( | ||
list[component].node.type === 'FunctionDeclaration' | ||
|| list[component].node.type === 'ArrowFunctionExpression' | ||
) | ||
&& list[component].node.params | ||
&& list[component].node.params.length | ||
&& list[component].node.params[0].typeAnnotation | ||
) { | ||
const typeNode = list[component].node.params[0].typeAnnotation; | ||
const annotation = typeNode.typeAnnotation; | ||
const annotation = getComponentTypeAnnotation(list[component]); | ||
if (annotation) { | ||
let propType; | ||
@@ -340,6 +386,8 @@ if (annotation.type === 'GenericTypeAnnotation') { | ||
if (propType) { | ||
validatePropNaming( | ||
list[component].node, | ||
propType.properties || propType.members | ||
); | ||
[].concat(propType).forEach((prop) => { | ||
validatePropNaming( | ||
list[component].node, | ||
prop.properties || prop.members | ||
); | ||
}); | ||
} | ||
@@ -346,0 +394,0 @@ } |
@@ -252,2 +252,3 @@ /** | ||
|| !node.value | ||
|| !node.value.params | ||
|| node.value.params.length < 2 // no `state` argument | ||
@@ -254,0 +255,0 @@ ) { |
{ | ||
"name": "eslint-plugin-react", | ||
"version": "7.29.3", | ||
"version": "7.29.4", | ||
"author": "Yannick Croissant <yannick.croissant+npm@gmail.com>", | ||
@@ -5,0 +5,0 @@ "description": "React specific linting rules for ESLint", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
706805
19655