diff --git a/lib/rules/jsx-sort-props.js b/lib/rules/jsx-sort-props.js
index c80116f4a7..b3c01389e8 100644
--- a/lib/rules/jsx-sort-props.js
+++ b/lib/rules/jsx-sort-props.js
@@ -71,8 +71,12 @@ function contextCompare(a, b, options) {
if (options.ignoreCase) {
aProp = aProp.toLowerCase();
bProp = bProp.toLowerCase();
+ return aProp.localeCompare(bProp);
}
- return aProp.localeCompare(bProp);
+ if (aProp === bProp) {
+ return 0;
+ }
+ return aProp < bProp ? -1 : 1;
}
/**
@@ -342,7 +346,14 @@ module.exports = {
}
}
- if (!noSortAlphabetically && previousPropName.localeCompare(currentPropName) > 0) {
+ if (
+ !noSortAlphabetically
+ && (
+ ignoreCase
+ ? previousPropName.localeCompare(currentPropName) > 0
+ : previousPropName > currentPropName
+ )
+ ) {
context.report({
node: decl.name,
message: 'Props should be sorted alphabetically',
diff --git a/tests/lib/rules/jsx-sort-props.js b/tests/lib/rules/jsx-sort-props.js
index 3d64788e3a..9144a9aa60 100644
--- a/tests/lib/rules/jsx-sort-props.js
+++ b/tests/lib/rules/jsx-sort-props.js
@@ -109,15 +109,18 @@ ruleTester.run('jsx-sort-props', rule, {
{code: ';'},
{code: ';'},
{code: ';'},
- {code: ';'},
- {code: ';'},
+ {code: ';'},
+ {code: ';'},
{code: ';'},
- {code: ';'},
- {code: ';'},
+ {code: ';'},
+ {code: ';'},
+ {code: ';'},
// Ignoring case
{code: ';', options: ignoreCaseArgs},
+ {code: ';', options: ignoreCaseArgs},
{code: ';', options: ignoreCaseArgs},
{code: ';', options: ignoreCaseArgs},
+ {code: ';', options: ignoreCaseArgs},
// Sorting callbacks below all other props
{code: ';', options: callbacksLastArgs},
{code: ';', options: ignoreCaseAndCallbackLastArgs},
@@ -175,9 +178,14 @@ ruleTester.run('jsx-sort-props', rule, {
output: ';'
},
{
- code: ';',
+ code: ';',
+ errors: [expectedError, expectedError, expectedError],
+ output: ';'
+ },
+ {
+ code: ';',
errors: [expectedError],
- output: ';'
+ output: ';'
},
{
code: ';',
@@ -191,8 +199,8 @@ ruleTester.run('jsx-sort-props', rule, {
},
{
code: ';',
- errors: [expectedError, expectedError, expectedError],
- output: ';'
+ errors: [expectedError, expectedError],
+ output: ';'
},
{
code: ';',
@@ -204,6 +212,12 @@ ruleTester.run('jsx-sort-props', rule, {
errors: [expectedError],
output: ';'
},
+ {
+ code: ';',
+ options: ignoreCaseArgs,
+ errors: [expectedError, expectedError, expectedError],
+ output: ';'
+ },
{
code: ';',
options: ignoreCaseArgs,