Skip to content

Commit 106990a

Browse files
committed
Merge pull request #42 from zertosh/sort-props-spread
Handle spread in jsx-sort-props
2 parents 6eac519 + 08d791d commit 106990a

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

lib/rules/jsx-sort-props.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ module.exports = function(context) {
1515

1616
return {
1717
JSXOpeningElement: function(node) {
18-
node.attributes.reduce(function(memo, decl) {
18+
var attributes = node.attributes.filter(function(decl) {
19+
return decl.type === 'JSXAttribute';
20+
});
21+
22+
attributes.reduce(function(memo, decl) {
1923
var lastPropName = memo.name.name;
2024
var currenPropName = decl.name.name;
2125

@@ -30,7 +34,7 @@ module.exports = function(context) {
3034
}
3135

3236
return decl;
33-
}, node.attributes[0]);
37+
}, attributes[0]);
3438
}
3539
};
3640
};

tests/lib/rules/jsx-sort-props.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,23 @@ var features = {
3232
eslintTester.addRuleTest('lib/rules/jsx-sort-props', {
3333
valid: [
3434
{code: '<App />;', ecmaFeatures: features},
35+
{code: '<App {...this.props} />;', ecmaFeatures: features},
3536
{code: '<App a b c />;', ecmaFeatures: features},
37+
{code: '<App {...this.props} a b c />;', ecmaFeatures: features},
3638
{code: '<App a="c" b="b" c="a" />;', ecmaFeatures: features},
39+
{code: '<App {...this.props} a="c" b="b" c="a" />;', ecmaFeatures: features},
3740
{code: '<App A a />;', ecmaFeatures: features},
3841
{code: '<App a A />;', args: ignoreCaseArgs, ecmaFeatures: features},
3942
{code: '<App a B c />;', args: ignoreCaseArgs, ecmaFeatures: features},
4043
{code: '<App A b C />;', args: ignoreCaseArgs, ecmaFeatures: features}
4144
],
4245
invalid: [
4346
{code: '<App b a />;', errors: [expectedError], ecmaFeatures: features},
47+
{code: '<App {...this.props} b a />;', errors: [expectedError], ecmaFeatures: features},
4448
{code: '<App a A />;', errors: [expectedError], ecmaFeatures: features},
4549
{code: '<App B a />;', args: ignoreCaseArgs, errors: [expectedError], ecmaFeatures: features},
4650
{code: '<App B A c />;', args: ignoreCaseArgs, errors: [expectedError], ecmaFeatures: features},
47-
{code: '<App c="a" a="c" b="b" />;', errors: 2, ecmaFeatures: features}
51+
{code: '<App c="a" a="c" b="b" />;', errors: 2, ecmaFeatures: features},
52+
{code: '<App {...this.props} c="a" a="c" b="b" />;', errors: 2, ecmaFeatures: features}
4853
]
4954
});

0 commit comments

Comments
 (0)