Skip to content

Commit 832a153

Browse files
committed
Fix proptypes detection for nested classes (fixes #267)
1 parent 9f4b4e6 commit 832a153

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

lib/util/component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function getIdentifiers(node) {
7575
var name = [];
7676
var loopNode = node;
7777
var namePart;
78-
while (loopNode && (!name.length || loopNode.type !== 'FunctionDeclaration')) {
78+
while (loopNode && (!name.length || ['FunctionDeclaration', 'MethodDefinition'].indexOf(loopNode.type) === -1)) {
7979
namePart = (loopNode.id && loopNode.id.name) || (loopNode.key && loopNode.key.name);
8080
if (namePart) {
8181
name.unshift(namePart);

tests/lib/rules/prop-types.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,29 @@ ruleTester.run('prop-types', rule, {
846846
'module.exports = HelloComponent();'
847847
].join('\n'),
848848
parser: 'babel-eslint'
849+
}, {
850+
code: [
851+
'class DynamicHello extends Component {',
852+
' render() {',
853+
' const {firstname} = this.props;',
854+
' class Hello extends Component {',
855+
' render() {',
856+
' const {name} = this.props;',
857+
' return <div>Hello {name}</div>;',
858+
' }',
859+
' }',
860+
' Hello.propTypes = {',
861+
' name: PropTypes.string',
862+
' };',
863+
' Hello = connectReduxForm({name: firstname})(Hello);',
864+
' return <Hello />;',
865+
' }',
866+
'}',
867+
'DynamicHello.propTypes = {',
868+
' firstname: PropTypes.string,',
869+
'};'
870+
].join('\n'),
871+
parser: 'babel-eslint'
849872
}
850873
],
851874

@@ -1386,6 +1409,27 @@ ruleTester.run('prop-types', rule, {
13861409
errors: [
13871410
{message: '\'name\' is missing in props validation for Hello'}
13881411
]
1412+
}, {
1413+
code: [
1414+
'class DynamicHello extends Component {',
1415+
' render() {',
1416+
' const {firstname} = this.props;',
1417+
' class Hello extends Component {',
1418+
' render() {',
1419+
' const {name} = this.props;',
1420+
' return <div>Hello {name}</div>;',
1421+
' }',
1422+
' }',
1423+
' Hello = connectReduxForm({name: firstname})(Hello);',
1424+
' return <Hello />;',
1425+
' }',
1426+
'}'
1427+
].join('\n'),
1428+
parser: 'babel-eslint',
1429+
errors: [
1430+
{message: '\'firstname\' is missing in props validation for DynamicHello'},
1431+
{message: '\'name\' is missing in props validation for Hello'}
1432+
]
13891433
}
13901434
]
13911435
});

0 commit comments

Comments
 (0)