Skip to content

Commit 0ebcb62

Browse files
authored
Merge pull request jsx-eslint#1883 from fleischie/jsx-sort-props/fix-reserved-first
Fix `reservedFirst` for `jsx-sort-props` rule
2 parents b1f2b6f + 21faf02 commit 0ebcb62

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

lib/rules/jsx-sort-props.js

+4-11
Original file line numberDiff line numberDiff line change
@@ -245,24 +245,17 @@ module.exports = {
245245
const previousIsReserved = isReservedPropName(previousPropName, reservedList);
246246
const currentIsReserved = isReservedPropName(currentPropName, reservedList);
247247

248-
if ((previousIsReserved && currentIsReserved) || (!previousIsReserved && !currentIsReserved)) {
249-
if (!noSortAlphabetically && currentPropName < previousPropName) {
250-
context.report({
251-
node: decl,
252-
message: 'Props should be sorted alphabetically',
253-
fix: generateFixerFunction(node, context, reservedList)
254-
});
255-
return memo;
256-
}
248+
if (previousIsReserved && !currentIsReserved) {
249+
return decl;
257250
}
258251
if (!previousIsReserved && currentIsReserved) {
259252
context.report({
260253
node: decl,
261254
message: 'Reserved props must be listed before all other props',
262255
fix: generateFixerFunction(node, context, reservedList)
263256
});
257+
return memo;
264258
}
265-
return decl;
266259
}
267260

268261
if (callbacksLast) {
@@ -310,7 +303,7 @@ module.exports = {
310303
context.report({
311304
node: decl,
312305
message: 'Props should be sorted alphabetically',
313-
fix: generateFixerFunction(node, context)
306+
fix: generateFixerFunction(node, context, reservedList)
314307
});
315308
return memo;
316309
}

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

+19-1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ const reservedFirstWithNoSortAlphabeticallyArgs = [{
8888
noSortAlphabetically: true,
8989
reservedFirst: true
9090
}];
91+
const reservedFirstWithShorthandLast = [{
92+
reservedFirst: true,
93+
shorthandLast: true
94+
}];
9195
const reservedFirstAsEmptyArrayArgs = [{
9296
reservedFirst: []
9397
}];
@@ -149,6 +153,10 @@ ruleTester.run('jsx-sort-props', rule, {
149153
{
150154
code: '<div ref="r" dangerouslySetInnerHTML={{__html: "EPR"}} key={0} children={<App />} b a c />',
151155
options: reservedFirstWithNoSortAlphabeticallyArgs
156+
},
157+
{
158+
code: '<App key="key" c="c" b />',
159+
options: reservedFirstWithShorthandLast
152160
}
153161
],
154162
invalid: [
@@ -230,6 +238,16 @@ ruleTester.run('jsx-sort-props', rule, {
230238
`,
231239
errors: 3
232240
},
241+
{
242+
code: '<App key="key" b c="c" />',
243+
errors: [expectedShorthandLastError],
244+
options: reservedFirstWithShorthandLast
245+
},
246+
{
247+
code: '<App ref="ref" key="key" isShorthand veryLastAttribute="yes" />',
248+
errors: [expectedError, expectedShorthandLastError],
249+
options: reservedFirstWithShorthandLast
250+
},
233251
{
234252
code: '<App a z onFoo onBar />;',
235253
errors: [expectedError],
@@ -293,7 +311,7 @@ ruleTester.run('jsx-sort-props', rule, {
293311
code: '<App dangerouslySetInnerHTML={{__html: "EPR"}} e key={2} b />',
294312
options: reservedFirstAsBooleanArgs,
295313
output: '<App key={2} b dangerouslySetInnerHTML={{__html: "EPR"}} e />',
296-
errors: [expectedReservedFirstError]
314+
errors: [expectedReservedFirstError, expectedError]
297315
},
298316
{
299317
code: '<App key={3} children={<App />} />',

0 commit comments

Comments
 (0)