Skip to content

Commit a860541

Browse files
author
Paweł Nowak
committed
Fix sorting props with numeric keys
1 parent 35de81b commit a860541

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

lib/rules/sort-prop-types.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ module.exports = {
8585
return node.arguments && node.arguments[0] && node.arguments[0].properties;
8686
}
8787

88+
function toLowerCase(item) {
89+
return item.toString().toLowerCase();
90+
}
91+
8892
function sorter(a, b) {
8993
let aKey = getKey(a);
9094
let bKey = getKey(b);
@@ -107,8 +111,8 @@ module.exports = {
107111
}
108112

109113
if (ignoreCase) {
110-
aKey = aKey.toLowerCase();
111-
bKey = bKey.toLowerCase();
114+
aKey = toLowerCase(aKey);
115+
bKey = toLowerCase(bKey);
112116
}
113117

114118
if (aKey < bKey) {
@@ -188,8 +192,8 @@ module.exports = {
188192
const currentIsCallback = isCallbackPropName(currentPropName);
189193

190194
if (ignoreCase) {
191-
prevPropName = prevPropName.toLowerCase();
192-
currentPropName = currentPropName.toLowerCase();
195+
prevPropName = toLowerCase(prevPropName);
196+
currentPropName = toLowerCase(currentPropName);
193197
}
194198

195199
if (requiredFirst) {

tests/lib/rules/sort-prop-types.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,21 @@ ruleTester.run('sort-prop-types', rule, {
410410
options: [{
411411
noSortAlphabetically: true
412412
}]
413+
}, {
414+
code: `
415+
class Component extends React.Component {
416+
render() {
417+
return <div />;
418+
}
419+
}
420+
Component.propTypes = {
421+
0: PropTypes.any,
422+
1: PropTypes.any,
423+
};
424+
`,
425+
options: [{
426+
ignoreCase: true
427+
}]
413428
}],
414429

415430
invalid: [{
@@ -1565,5 +1580,37 @@ ruleTester.run('sort-prop-types', rule, {
15651580
' }',
15661581
'});'
15671582
].join('\n')
1583+
}, {
1584+
code: `
1585+
class Component extends React.Component {
1586+
render() {
1587+
return <div />;
1588+
}
1589+
}
1590+
Component.propTypes = {
1591+
1: PropTypes.any,
1592+
0: PropTypes.any,
1593+
};
1594+
`,
1595+
options: [{
1596+
ignoreCase: true
1597+
}],
1598+
errors: [{
1599+
message: ERROR_MESSAGE,
1600+
line: 9,
1601+
column: 9,
1602+
type: 'Property'
1603+
}],
1604+
output: `
1605+
class Component extends React.Component {
1606+
render() {
1607+
return <div />;
1608+
}
1609+
}
1610+
Component.propTypes = {
1611+
0: PropTypes.any,
1612+
1: PropTypes.any,
1613+
};
1614+
`
15681615
}]
15691616
});

0 commit comments

Comments
 (0)