Skip to content

Commit 259fab4

Browse files
committed
Fix annotated function detection (fixes #498)
1 parent 2884a80 commit 259fab4

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

lib/rules/prop-types.js

+4-6
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,10 @@ module.exports = Components.detect(function(context, components, utils) {
9090
function isAnnotatedFunctionPropsDeclaration(node) {
9191
if (node && node.params && node.params.length) {
9292
var tokens = context.getFirstTokens(node.params[0], 2);
93-
if (
94-
node.params[0].typeAnnotation && (
95-
tokens[0].value === 'props' ||
96-
(tokens[1] && tokens[1].value === 'props')
97-
)
98-
) {
93+
var isAnnotated = node.params[0].typeAnnotation;
94+
var isDestructuredProps = node.params[0].type === 'ObjectPattern';
95+
var isProps = tokens[0].value === 'props' || (tokens[1] && tokens[1].value === 'props');
96+
if (isAnnotated && (isDestructuredProps || isProps)) {
9997
return true;
10098
}
10199
}

tests/lib/rules/prop-types.js

+23
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,16 @@ ruleTester.run('prop-types', rule, {
11721172
'};'
11731173
].join('\n'),
11741174
parser: 'babel-eslint'
1175+
}, {
1176+
code: [
1177+
'type Props = {',
1178+
' firstname: ?string,',
1179+
'};',
1180+
'function Hello({firstname}: Props): React$Element {',
1181+
' return <div>Hello {firstname}</div>;',
1182+
'}'
1183+
].join('\n'),
1184+
parser: 'babel-eslint'
11751185
}
11761186
],
11771187

@@ -2031,6 +2041,19 @@ ruleTester.run('prop-types', rule, {
20312041
errors: [{
20322042
message: '\'test\' is missing in props validation'
20332043
}]
2044+
}, {
2045+
code: [
2046+
'type Props = {',
2047+
' firstname: ?string,',
2048+
'};',
2049+
'function Hello({firstname, lastname}: Props): React$Element {',
2050+
' return <div>Hello {firstname} {lastname}</div>;',
2051+
'}'
2052+
].join('\n'),
2053+
parser: 'babel-eslint',
2054+
errors: [{
2055+
message: '\'lastname\' is missing in props validation'
2056+
}]
20342057
}
20352058
]
20362059
});

0 commit comments

Comments
 (0)