Skip to content

Commit 8c1e3f2

Browse files
committed
refactor: don't spread arrays
1 parent 2b6bf78 commit 8c1e3f2

11 files changed

+23
-35
lines changed

__mocks__/genInteractives.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ import type { JSXElementMockType } from './JSXElementMock';
1212

1313
const { fromEntries } = Object;
1414

15-
const domElements = [...dom.keys()];
16-
const roleNames = [...roles.keys()];
17-
1815
const interactiveElementsMap = {
1916
a: [{ prop: 'href', value: '#' }],
2017
area: [{ prop: 'href', value: '#' }],
@@ -122,19 +119,19 @@ const nonInteractiveElementsMap: {[string]: Array<{[string]: string}>} = {
122119
ul: [],
123120
};
124121

125-
const indeterminantInteractiveElementsMap: { [key: string]: Array<any> } = fromEntries(domElements.map((name) => [name, []]));
122+
const indeterminantInteractiveElementsMap: { [key: string]: Array<any> } = fromEntries(dom.keys().map((name) => [name, []]));
126123

127124
Object.keys(interactiveElementsMap)
128125
.concat(Object.keys(nonInteractiveElementsMap))
129126
.forEach((name) => delete indeterminantInteractiveElementsMap[name]);
130127

131-
const abstractRoles = roleNames.filter((role) => roles.get(role).abstract);
128+
const abstractRoles = roles.keys().filter((role) => roles.get(role).abstract);
132129

133-
const nonAbstractRoles = roleNames.filter((role) => !roles.get(role).abstract);
130+
const nonAbstractRoles = roles.keys().filter((role) => !roles.get(role).abstract);
134131

135132
const interactiveRoles = []
136133
.concat(
137-
roleNames,
134+
roles.keys(),
138135
// 'toolbar' does not descend from widget, but it does support
139136
// aria-activedescendant, thus in practice we treat it as a widget.
140137
'toolbar',
@@ -144,7 +141,7 @@ const interactiveRoles = []
144141
&& roles.get(role).superClass.some((klasses) => klasses.includes('widget'))
145142
));
146143

147-
const nonInteractiveRoles = roleNames
144+
const nonInteractiveRoles = roles.keys()
148145
.filter((role) => (
149146
!roles.get(role).abstract
150147
&& !roles.get(role).superClass.some((klasses) => klasses.includes('widget'))

__tests__/src/rules/aria-props-test.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@ import getSuggestion from '../../../src/util/getSuggestion';
1919
// -----------------------------------------------------------------------------
2020

2121
const ruleTester = new RuleTester();
22-
const ariaAttributes = [...aria.keys()];
2322

2423
const errorMessage = (name) => {
25-
const suggestions = getSuggestion(name, ariaAttributes);
24+
const suggestions = getSuggestion(name, aria.keys());
2625

2726
if (suggestions.length > 0) {
2827
return {
@@ -43,7 +42,7 @@ const errorMessage = (name) => {
4342
};
4443

4544
// Create basic test cases using all valid role types.
46-
const basicValidityTests = ariaAttributes.map((prop) => ({
45+
const basicValidityTests = aria.keys().map((prop) => ({
4746
code: `<div ${prop.toLowerCase()}="foobar" />`,
4847
}));
4948

__tests__/src/rules/aria-role-test.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,8 @@ const errorMessage = {
2424
type: 'JSXAttribute',
2525
};
2626

27-
const roleKeys = [...roles.keys()];
28-
29-
const validRoles = roleKeys.filter((role) => roles.get(role).abstract === false);
30-
const invalidRoles = roleKeys.filter((role) => roles.get(role).abstract === true);
27+
const validRoles = roles.keys().filter((role) => roles.get(role).abstract === false);
28+
const invalidRoles = roles.keys().filter((role) => roles.get(role).abstract === true);
3129

3230
const createTests = (roleNames) => roleNames.map((role) => ({
3331
code: `<div role="${role.toLowerCase()}" />`,

__tests__/src/rules/aria-unsupported-elements-test.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ const errorMessage = (invalidProp) => ({
2626
type: 'JSXOpeningElement',
2727
});
2828

29-
const domElements = [...dom.keys()];
3029
// Generate valid test cases
31-
const roleValidityTests = domElements.map((element) => {
30+
const roleValidityTests = dom.keys().map((element) => {
3231
const isReserved = dom.get(element).reserved || false;
3332
const role = isReserved ? '' : 'role';
3433

@@ -37,7 +36,7 @@ const roleValidityTests = domElements.map((element) => {
3736
};
3837
});
3938

40-
const ariaValidityTests = domElements.map((element) => {
39+
const ariaValidityTests = dom.keys().map((element) => {
4140
const isReserved = dom.get(element).reserved || false;
4241
const aria = isReserved ? '' : 'aria-hidden';
4342

@@ -50,7 +49,7 @@ const ariaValidityTests = domElements.map((element) => {
5049
});
5150

5251
// Generate invalid test cases.
53-
const invalidRoleValidityTests = domElements
52+
const invalidRoleValidityTests = dom.keys()
5453
.filter((element) => dom.get(element).reserved)
5554
.map((reservedElem) => ({
5655
code: `<${reservedElem} role {...props} />`,
@@ -61,7 +60,7 @@ const invalidRoleValidityTests = domElements
6160
settings: { 'jsx-a11y': { components: { Meta: 'meta' } } },
6261
});
6362

64-
const invalidAriaValidityTests = domElements
63+
const invalidAriaValidityTests = dom.keys()
6564
.filter((element) => dom.get(element).reserved)
6665
.map((reservedElem) => ({
6766
code: `<${reservedElem} aria-hidden aria-role="none" {...props} />`,

src/rules/aria-props.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import { propName } from 'jsx-ast-utils';
1212
import { generateObjSchema } from '../util/schemas';
1313
import getSuggestion from '../util/getSuggestion';
1414

15-
const ariaAttributes = aria.keys();
16-
1715
const schema = generateObjSchema();
1816

1917
export default {
@@ -41,7 +39,7 @@ export default {
4139
const isValid = aria.has(name);
4240

4341
if (isValid === false) {
44-
const suggestions = getSuggestion(name, ariaAttributes);
42+
const suggestions = getSuggestion(name, aria.keys());
4543

4644
context.report({
4745
data: {

src/rules/aria-unsupported-elements.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default {
4545
return;
4646
}
4747

48-
const invalidAttributes = new Set([...aria.keys(), 'role']);
48+
const invalidAttributes = new Set(aria.keys().concat('role'));
4949

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

src/rules/role-has-required-aria-props.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default {
5959

6060
const normalizedValues = String(roleAttrValue).toLowerCase().split(' ');
6161
const validRoles = normalizedValues
62-
.filter((val) => [...roles.keys()].indexOf(val) > -1);
62+
.filter((val) => roles.keys().indexOf(val) > -1);
6363

6464
// Check semantic DOM elements
6565
// For example, <input type="checkbox" role="switch" />

src/util/isInteractiveElement.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ import flatMap from 'array.prototype.flatmap';
1515

1616
import attributesComparator from './attributesComparator';
1717

18-
const roleKeys = [...roles.keys()];
1918
const elementRoleEntries = [...elementRoles];
2019

21-
const nonInteractiveRoles = new Set(roleKeys
20+
const nonInteractiveRoles = new Set(roles.keys()
2221
.filter((name) => {
2322
const role = roles.get(name);
2423
return (
@@ -34,7 +33,7 @@ const nonInteractiveRoles = new Set(roleKeys
3433
'progressbar',
3534
));
3635

37-
const interactiveRoles = new Set(roleKeys
36+
const interactiveRoles = new Set(roles.keys()
3837
.filter((name) => {
3938
const role = roles.get(name);
4039
return (

src/util/isInteractiveRole.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import type { Node } from 'ast-types-flow';
44
import { getProp, getLiteralPropValue } from 'jsx-ast-utils';
55
import flatMap from 'array.prototype.flatmap';
66

7-
const roles = [...rolesMap.keys()];
8-
const interactiveRoles = roles.filter((name) => (
7+
const interactiveRoles = rolesMap.keys().filter((name) => (
98
!rolesMap.get(name).abstract
109
&& rolesMap.get(name).superClass.some((klasses) => klasses.includes('widget'))
1110
));
@@ -41,7 +40,7 @@ const isInteractiveRole = (
4140
const normalizedValues = String(value).toLowerCase().split(' ');
4241
const validRoles = flatMap(
4342
normalizedValues,
44-
(name: string) => (roles.includes(name) ? [name] : []),
43+
(name: string) => (rolesMap.keys().includes(name) ? [name] : []),
4544
);
4645
if (validRoles.length > 0) {
4746
// The first role value is a series takes precedence.

src/util/isNonInteractiveElement.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ import flatMap from 'array.prototype.flatmap';
1616

1717
import attributesComparator from './attributesComparator';
1818

19-
const roleKeys = [...roles.keys()];
2019
const elementRoleEntries = [...elementRoles];
2120

22-
const nonInteractiveRoles = new Set(roleKeys
21+
const nonInteractiveRoles = new Set(roles.keys()
2322
.filter((name) => {
2423
const role = roles.get(name);
2524
return (
@@ -38,7 +37,7 @@ const nonInteractiveRoles = new Set(roleKeys
3837
'progressbar',
3938
));
4039

41-
const interactiveRoles = new Set(roleKeys
40+
const interactiveRoles = new Set(roles.keys()
4241
.filter((name) => {
4342
const role = roles.get(name);
4443
return (

src/util/isNonInteractiveRole.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type { Node } from 'ast-types-flow';
1010
import { getProp, getLiteralPropValue } from 'jsx-ast-utils';
1111
import flatMap from 'array.prototype.flatmap';
1212

13-
const nonInteractiveRoles = [...rolesMap.keys()].filter((name) => (
13+
const nonInteractiveRoles = rolesMap.keys().filter((name) => (
1414
!rolesMap.get(name).abstract
1515
&& !rolesMap.get(name).superClass.some((klasses) => klasses.includes('widget'))
1616
));

0 commit comments

Comments
 (0)