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,