Skip to content

Commit dc03975

Browse files
authored
Merge pull request #1112 from ethanjgoldberg/method-annotations-are-not-prop-types
Fix required prop types for classes with annotated methods.
2 parents ccb213d + 6e8f543 commit dc03975

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

lib/rules/prop-types.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,12 @@ module.exports = {
868868

869869
ArrowFunctionExpression: handleStatelessComponent,
870870

871-
FunctionExpression: handleStatelessComponent,
871+
FunctionExpression: function(node) {
872+
if (node.parent.type === 'MethodDefinition') {
873+
return;
874+
}
875+
handleStatelessComponent(node);
876+
},
872877

873878
MemberExpression: function(node) {
874879
var type;

tests/lib/rules/prop-types.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,20 @@ ruleTester.run('prop-types', rule, {
11151115
'}'
11161116
].join('\n'),
11171117
parser: 'babel-eslint'
1118+
}, {
1119+
code: [
1120+
'type Props = {',
1121+
' name: string,',
1122+
'};',
1123+
'class Hello extends React.Component {',
1124+
' props: Props;',
1125+
' render() {',
1126+
' const {name} = this.props;',
1127+
' return name;',
1128+
' }',
1129+
'}'
1130+
].join('\n'),
1131+
parser: 'babel-eslint'
11181132
}, {
11191133
code: [
11201134
'Card.propTypes = {',
@@ -1405,6 +1419,25 @@ ruleTester.run('prop-types', rule, {
14051419

14061420
invalid: [
14071421
{
1422+
code: [
1423+
'type Props = {',
1424+
' name: string,',
1425+
'};',
1426+
'class Hello extends React.Component {',
1427+
' foo(props: Props) {}',
1428+
' render() {',
1429+
' return this.props.name;',
1430+
' }',
1431+
'}'
1432+
].join('\n'),
1433+
errors: [{
1434+
message: '\'name\' is missing in props validation',
1435+
line: 7,
1436+
column: 23,
1437+
type: 'Identifier'
1438+
}],
1439+
parser: 'babel-eslint'
1440+
}, {
14081441
code: [
14091442
'var Hello = createReactClass({',
14101443
' render: function() {',

0 commit comments

Comments
 (0)