From 45e3b9f2be6094d76de7ba01fb86af0868724d71 Mon Sep 17 00:00:00 2001 From: Yannick Croissant Date: Thu, 18 May 2017 00:45:34 +0200 Subject: [PATCH] Fix require-default-props quoted defaultProps detection (fix #1201) --- lib/rules/require-default-props.js | 8 ++++++-- tests/lib/rules/require-default-props.js | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/rules/require-default-props.js b/lib/rules/require-default-props.js index cfd28679fc..3af1192bb0 100644 --- a/lib/rules/require-default-props.js +++ b/lib/rules/require-default-props.js @@ -9,6 +9,8 @@ var Components = require('../util/Components'); var variableUtil = require('../util/variable'); var annotations = require('../util/annotations'); +const QUOTES_REGEX = /^["']|["']$/g; + // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ @@ -25,6 +27,8 @@ module.exports = { create: Components.detect(function(context, components, utils) { + var sourceCode = context.getSourceCode(); + /** * Get properties name * @param {Object} node - Property. @@ -142,7 +146,7 @@ module.exports = { return props.map(function(property) { return { - name: property.key.name || property.key.value, + name: sourceCode.getText(property.key).replace(QUOTES_REGEX, ''), isRequired: isRequiredPropType(property.value), node: property }; @@ -222,7 +226,7 @@ module.exports = { } return objectExpression.properties.map(function(property) { - return property.key.name; + return sourceCode.getText(property.key).replace(QUOTES_REGEX, ''); }); } diff --git a/tests/lib/rules/require-default-props.js b/tests/lib/rules/require-default-props.js index e3ef2ebc8b..ca6efc8dd4 100644 --- a/tests/lib/rules/require-default-props.js +++ b/tests/lib/rules/require-default-props.js @@ -720,6 +720,21 @@ ruleTester.run('require-default-props', rule, { '}' ].join('\n'), parser: 'babel-eslint' + }, + // make sure defaultProps are correctly detected with quoted properties + { + code: [ + 'function Hello(props) {', + ' return
Hello {props.bar}
;', + '}', + 'Hello.propTypes = {', + ' bar: PropTypes.string', + '};', + 'Hello.defaultProps = {', + ' "bar": "bar"', + '};' + ].join('\n'), + parser: 'babel-eslint' } ],