diff --git a/lib/util/Components.js b/lib/util/Components.js
index fec2d2e50e..eb2bad5356 100644
--- a/lib/util/Components.js
+++ b/lib/util/Components.js
@@ -362,12 +362,14 @@ function componentRule(rule, context) {
var isFunction = /Function/.test(node.type); // Functions
var isMethod = node.parent && node.parent.type === 'MethodDefinition'; // Classes methods
var isArgument = node.parent && node.parent.type === 'CallExpression'; // Arguments (callback, etc.)
+ // Attribute Expressions inside JSX Elements ()
+ var isJSXExpressionContainer = node.parent && node.parent.type === 'JSXExpressionContainer';
// Stop moving up if we reach a class or an argument (like a callback)
if (isClass || isArgument) {
return null;
}
- // Return the node if it is a function that is not a class method
- if (isFunction && !isMethod) {
+ // Return the node if it is a function that is not a class method and is not inside a JSX Element
+ if (isFunction && !isMethod && !isJSXExpressionContainer) {
return node;
}
scope = scope.upper;
diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js
index 8d255add46..02a6032273 100644
--- a/tests/lib/rules/no-unused-prop-types.js
+++ b/tests/lib/rules/no-unused-prop-types.js
@@ -1428,6 +1428,39 @@ ruleTester.run('no-unused-prop-types', rule, {
'};'
].join('\n'),
parserOptions: parserOptions
+ }, {
+ // `no-unused-prop-types` in jsx expressions - [Issue #885]
+ code: [
+ 'const PagingBlock = function(props) {',
+ ' return (',
+ ' ',
+ ' props.previousPage()}/>',
+ ' props.nextPage()}/>',
+ ' ',
+ ' );',
+ '};',
+
+ 'PagingBlock.propTypes = {',
+ ' nextPage: React.PropTypes.func.isRequired,',
+ ' previousPage: React.PropTypes.func.isRequired,',
+ '};'
+ ].join('\n'),
+ parserOptions: parserOptions
+ }, {
+ // `no-unused-prop-types` rest param props in jsx expressions - [Issue #885]
+ code: [
+ 'const PagingBlock = function(props) {',
+ ' return (',
+ ' ',
+ ' );',
+ '};',
+
+ 'PagingBlock.propTypes = {',
+ ' nextPage: React.PropTypes.func.isRequired,',
+ ' previousPage: React.PropTypes.func.isRequired,',
+ '};'
+ ].join('\n'),
+ parserOptions: parserOptions
}
],