From 2aa095599e8672a6ea5186f82daaad3026ed4d26 Mon Sep 17 00:00:00 2001 From: Alex Zherdev Date: Thu, 19 Jul 2018 21:02:03 -0700 Subject: [PATCH] Fix: Handle member expressions in jsx-props-no-multi-spaces Resolves #1881 --- lib/rules/jsx-props-no-multi-spaces.js | 14 +++++++++----- tests/lib/rules/jsx-props-no-multi-spaces.js | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/rules/jsx-props-no-multi-spaces.js b/lib/rules/jsx-props-no-multi-spaces.js index e9a5589379..bd36dc6822 100644 --- a/lib/rules/jsx-props-no-multi-spaces.js +++ b/lib/rules/jsx-props-no-multi-spaces.js @@ -27,12 +27,16 @@ module.exports = { const sourceCode = context.getSourceCode(); function getPropName(propNode) { - if (propNode.type === 'JSXSpreadAttribute') { - return sourceCode.getText(propNode.argument); - } else if (propNode.type === 'JSXIdentifier') { - return propNode.name; + switch (propNode.type) { + case 'JSXSpreadAttribute': + return sourceCode.getText(propNode.argument); + case 'JSXIdentifier': + return propNode.name; + case 'JSXMemberExpression': + return `${getPropName(propNode.object)}.${propNode.property.name}`; + default: + return propNode.name.name; } - return propNode.name.name; } function checkSpacing(prev, node) { diff --git a/tests/lib/rules/jsx-props-no-multi-spaces.js b/tests/lib/rules/jsx-props-no-multi-spaces.js index bb0834ad87..3b3cbd7aa1 100644 --- a/tests/lib/rules/jsx-props-no-multi-spaces.js +++ b/tests/lib/rules/jsx-props-no-multi-spaces.js @@ -58,6 +58,10 @@ ruleTester.run('jsx-props-no-multi-spaces', rule, { ' foo {...test}', ' bar />' ].join('\n') + }, { + code: '' + }, { + code: '' }], invalid: [{ @@ -106,5 +110,17 @@ ruleTester.run('jsx-props-no-multi-spaces', rule, { {message: 'Expected only one space between "foo" and "test"'}, {message: 'Expected only one space between "test" and "bar"'} ] + }, { + code: '', + output: '', + errors: [ + {message: 'Expected only one space between "Foo.Bar" and "baz"'} + ] + }, { + code: '', + output: '', + errors: [ + {message: 'Expected only one space between "Foobar.Foo.Bar.Baz.Qux.Quux.Quuz.Corge.Grault.Garply.Waldo.Fred.Plugh" and "xyzzy"'} + ] }] });