Skip to content

Commit 1826628

Browse files
committedMar 16, 2022
[Refactor] reduce egregious use of array spread, in favor of [].concat idiom
1 parent 0f1615a commit 1826628

10 files changed

+41
-41
lines changed
 

‎__tests__/src/rules/no-static-element-interactions-test.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ const neverValid = [
348348

349349
const recommendedOptions = configs.recommended.rules[`jsx-a11y/${ruleName}`][1] || {};
350350
ruleTester.run(`${ruleName}:recommended`, rule, {
351-
valid: [
352-
...alwaysValid,
351+
valid: [].concat(
352+
alwaysValid,
353353
// All the possible handlers
354354
{ code: '<div onCopy={() => {}} />;' },
355355
{ code: '<div onCut={() => {}} />;' },
@@ -417,22 +417,22 @@ ruleTester.run(`${ruleName}:recommended`, rule, {
417417
// Expressions should pass in recommended mode
418418
{ code: '<div role={ROLE_BUTTON} onClick={() => {}} />;' },
419419
{ code: '<div {...this.props} role={this.props.role} onKeyPress={e => this.handleKeyPress(e)}>{this.props.children}</div>' },
420-
]
420+
)
421421
.map(ruleOptionsMapperFactory(recommendedOptions))
422422
.map(parserOptionsMapper),
423-
invalid: [
424-
...neverValid,
425-
]
423+
invalid: [].concat(
424+
neverValid,
425+
)
426426
.map(ruleOptionsMapperFactory(recommendedOptions))
427427
.map(parserOptionsMapper),
428428
});
429429

430430
ruleTester.run(`${ruleName}:strict`, rule, {
431-
valid: [
432-
...alwaysValid,
433-
].map(parserOptionsMapper),
434-
invalid: [
435-
...neverValid,
431+
valid: [].concat(
432+
alwaysValid,
433+
).map(parserOptionsMapper),
434+
invalid: [].concat(
435+
neverValid,
436436
// All the possible handlers
437437
{ code: '<div onContextMenu={() => {}} />;', errors: [expectedError] },
438438
{ code: '<div onDblClick={() => {}} />;', errors: [expectedError] },
@@ -453,5 +453,5 @@ ruleTester.run(`${ruleName}:strict`, rule, {
453453
// Expressions should fail in strict mode
454454
{ code: '<div role={ROLE_BUTTON} onClick={() => {}} />;', errors: [expectedError] },
455455
{ code: '<div {...this.props} role={this.props.role} onKeyPress={e => this.handleKeyPress(e)}>{this.props.children}</div>', errors: [expectedError] },
456-
].map(parserOptionsMapper),
456+
).map(parserOptionsMapper),
457457
});

‎src/rules/alt-text.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,15 @@ export default {
212212
(components, customComponentsForElement) => components.concat(customComponentsForElement || []),
213213
[],
214214
);
215-
const typesToValidate = new Set([]
216-
.concat(customComponents, ...elementOptions)
217-
.map((type) => {
218-
if (type === 'input[type="image"]') { return 'input'; }
219-
return type;
220-
}));
215+
const typesToValidate = new Set(
216+
[].concat(
217+
customComponents,
218+
elementOptions,
219+
).map((type) => (type === 'input[type="image"]' ? 'input' : type)),
220+
);
221221

222222
return {
223-
JSXOpeningElement: (node) => {
223+
JSXOpeningElement(node) {
224224
const nodeType = elementType(node);
225225
if (!typesToValidate.has(nodeType)) { return; }
226226

‎src/rules/aria-unsupported-elements.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default {
4444
return;
4545
}
4646

47-
const invalidAttributes = [...aria.keys()].concat('role');
47+
const invalidAttributes = [...aria.keys(), 'role'];
4848

4949
node.attributes.forEach((prop) => {
5050
if (prop.type === 'JSXSpreadAttribute') {

‎src/rules/autocomplete-valid.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default {
2727
JSXOpeningElement: (node) => {
2828
const options = context.options[0] || {};
2929
const { inputComponents = [] } = options;
30-
const inputTypes = ['input', ...inputComponents];
30+
const inputTypes = ['input'].concat(inputComponents);
3131

3232
const elType = elementType(node);
3333
const autocomplete = getLiteralPropValue(getProp(node.attributes, 'autocomplete'));

‎src/rules/control-has-associated-label.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default ({
5151
ignoreRoles = [],
5252
} = options;
5353

54-
const newIgnoreElements = new Set([...ignoreElements, ...ignoreList]);
54+
const newIgnoreElements = new Set([].concat(ignoreElements, ignoreList));
5555

5656
const rule = (node: JSXElement): void => {
5757
const tag = elementType(node.openingElement);

‎src/rules/interactive-supports-focus.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ const schema = generateObjSchema({
4242
});
4343
const domElements = [...dom.keys()];
4444

45-
const interactiveProps = [
46-
...eventHandlersByType.mouse,
47-
...eventHandlersByType.keyboard,
48-
];
45+
const interactiveProps = [].concat(
46+
eventHandlersByType.mouse,
47+
eventHandlersByType.keyboard,
48+
);
4949

5050
export default ({
5151
meta: {

‎src/rules/label-has-for.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const schema = {
2828
};
2929
// Breadth-first search, assuming that HTML for forms is shallow.
3030
function validateNesting(node) {
31-
let queue = [...node.parent.children];
31+
let queue = node.parent.children.slice();
3232
let child;
3333
let opener;
3434
while (queue.length) {

‎src/rules/no-noninteractive-element-interactions.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ import isPresentationRole from '../util/isPresentationRole';
3232
const errorMessage = 'Non-interactive elements should not be assigned mouse or keyboard event listeners.';
3333

3434
const domElements = [...dom.keys()];
35-
const defaultInteractiveProps = [
36-
...eventHandlersByType.focus,
37-
...eventHandlersByType.image,
38-
...eventHandlersByType.keyboard,
39-
...eventHandlersByType.mouse,
40-
];
35+
const defaultInteractiveProps = [].concat(
36+
eventHandlersByType.focus,
37+
eventHandlersByType.image,
38+
eventHandlersByType.keyboard,
39+
eventHandlersByType.mouse,
40+
);
4141
const schema = generateObjSchema({
4242
handlers: arraySchema,
4343
});

‎src/rules/no-static-element-interactions.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ import isPresentationRole from '../util/isPresentationRole';
3232
const errorMessage = 'Avoid non-native interactive elements. If using native HTML is not possible, add an appropriate role and support for tabbing, mouse, keyboard, and touch inputs to an interactive content element.';
3333

3434
const domElements = [...dom.keys()];
35-
const defaultInteractiveProps = [
36-
...eventHandlersByType.focus,
37-
...eventHandlersByType.keyboard,
38-
...eventHandlersByType.mouse,
39-
];
35+
const defaultInteractiveProps = [].concat(
36+
eventHandlersByType.focus,
37+
eventHandlersByType.keyboard,
38+
eventHandlersByType.mouse,
39+
);
4040
const schema = generateObjSchema({
4141
handlers: arraySchema,
4242
});

‎src/util/mayHaveAccessibleLabel.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ function hasLabellingProp(
1616
openingElement: JSXOpeningElement,
1717
additionalLabellingProps?: Array<string> = [],
1818
) {
19-
const labellingProps = [
19+
const labellingProps = [].concat(
2020
'alt', // Assume alt is used correctly on an image
2121
'aria-label',
2222
'aria-labelledby',
23-
...additionalLabellingProps,
24-
];
23+
additionalLabellingProps,
24+
);
2525
return openingElement.attributes.some((attribute): boolean => {
2626
// We must assume that a spread value contains a labelling prop.
2727
if (attribute.type !== 'JSXAttribute') {

0 commit comments

Comments
 (0)
Please sign in to comment.