From 7e6bcdfbe4387e3b040dcf05b8b8952e11dceab5 Mon Sep 17 00:00:00 2001 From: tanmoyopenroot Date: Tue, 28 Jan 2020 12:37:17 +0530 Subject: [PATCH] [Fix] `jsx-sort-props`: only use localeCompare when case is ignored Fixes #2381. Fixes #2530. Co-authored-by: tanmoyopenroot Co-authored-by: Jordan Harband --- lib/rules/jsx-sort-props.js | 8 ++++++-- tests/lib/rules/jsx-sort-props.js | 30 ++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/lib/rules/jsx-sort-props.js b/lib/rules/jsx-sort-props.js index c80116f4a7..7692302812 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,7 @@ 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,