Skip to content

Commit 99489b9

Browse files
authored
no-array-method-this-argument: Check Array.fromAsync() (#2330)
1 parent 497519e commit 99489b9

4 files changed

+299
-23
lines changed

rules/no-array-method-this-argument.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,12 @@ const create = context => {
184184
});
185185
});
186186

187-
// `Array.from()`
187+
// `Array.from()` and `Array.fromAsync()`
188188
context.on('CallExpression', callExpression => {
189189
if (
190190
!isMethodCall(callExpression, {
191191
object: 'Array',
192-
method: 'from',
192+
methods: ['from', 'fromAsync'],
193193
argumentsLength: 3,
194194
optionalCall: false,
195195
optionalMember: false,

test/no-array-method-this-argument.mjs

+31
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ test.snapshot({
1414
'Array.from?.(iterableOrArrayLike, () => {}, thisArgument)',
1515
'Array?.from(iterableOrArrayLike, () => {}, thisArgument)',
1616
'NotArray.from(iterableOrArrayLike, () => {}, thisArgument)',
17+
'new Array.fromAsync(iterableOrArrayLike, () => {}, thisArgument)',
18+
'Array.fromAsync?.(iterableOrArrayLike, () => {}, thisArgument)',
19+
'Array?.fromAsync(iterableOrArrayLike, () => {}, thisArgument)',
20+
'NotArray.fromAsync(iterableOrArrayLike, () => {}, thisArgument)',
1721

1822
// More or less arguments
1923
'array.map()',
@@ -28,6 +32,13 @@ test.snapshot({
2832
'Array.from(iterableOrArrayLike, ...() => {}, thisArgument)',
2933
'Array.from(...iterableOrArrayLike, () => {}, thisArgument)',
3034
'Array.from(iterableOrArrayLike, () => {}, thisArgument, extraArgument)',
35+
'Array.fromAsync()',
36+
'Array.fromAsync(iterableOrArrayLike)',
37+
'Array.fromAsync(iterableOrArrayLike, () => {},)',
38+
'Array.fromAsync(iterableOrArrayLike, () => {}, ...thisArgument)',
39+
'Array.fromAsync(iterableOrArrayLike, ...() => {}, thisArgument)',
40+
'Array.fromAsync(...iterableOrArrayLike, () => {}, thisArgument)',
41+
'Array.fromAsync(iterableOrArrayLike, () => {}, thisArgument, extraArgument)',
3142

3243
// Ignored
3344
'lodash.every(array, () => {})',
@@ -52,8 +63,11 @@ test.snapshot({
5263
'array.map(1, thisArgument)',
5364
'async () => array.map(await callback, thisArgument)',
5465
'Array.from(iterableOrArrayLike, new Callback, thisArgument)',
66+
'Array.fromAsync(iterableOrArrayLike, new Callback, thisArgument)',
5567
'Array.from(iterableOrArrayLike, 1, thisArgument)',
68+
'Array.fromAsync(iterableOrArrayLike, 1, thisArgument)',
5669
'Array.from(iterableOrArrayLike, await callback, thisArgument)',
70+
'Array.fromAsync(iterableOrArrayLike, await callback, thisArgument)',
5771
],
5872
invalid: [
5973
'array.every(() => {}, thisArgument)',
@@ -66,13 +80,16 @@ test.snapshot({
6680
'array.forEach(() => {}, thisArgument)',
6781
'array.map(() => {}, thisArgument)',
6882
'Array.from(iterableOrArrayLike, () => {}, thisArgument)',
83+
'Array.fromAsync(iterableOrArrayLike, () => {}, thisArgument)',
6984
// Comma
7085
'array.map(() => {}, thisArgument,)',
7186
'array.map(() => {}, (0, thisArgument),)',
7287
'Array.from(iterableOrArrayLike, () => {}, thisArgument,)',
88+
'Array.fromAsync(iterableOrArrayLike, () => {}, thisArgument,)',
7389
// Side effect
7490
'array.map(() => {}, thisArgumentHasSideEffect())',
7591
'Array.from(iterableOrArrayLike, () => {}, thisArgumentHasSideEffect())',
92+
'Array.fromAsync(iterableOrArrayLike, () => {}, thisArgumentHasSideEffect())',
7693
],
7794
});
7895

@@ -82,12 +99,15 @@ test.snapshot({
8299
invalid: [
83100
'array.map(callback, thisArgument)',
84101
'Array.from(iterableOrArrayLike, callback, thisArgument)',
102+
'Array.fromAsync(iterableOrArrayLike, callback, thisArgument)',
85103
'array.map(callback, (0, thisArgument))',
86104
'Array.from(iterableOrArrayLike, callback, (0, thisArgument))',
105+
'Array.fromAsync(iterableOrArrayLike, callback, (0, thisArgument))',
87106
'array.map(function () {}, thisArgument)',
88107
'Array.from(iterableOrArrayLike, function () {}, thisArgument)',
89108
'array.map(function callback () {}, thisArgument)',
90109
'Array.from(iterableOrArrayLike, function callback () {}, thisArgument)',
110+
'Array.fromAsync(iterableOrArrayLike, function callback () {}, thisArgument)',
91111
{
92112
code: 'array.map( foo as bar, (( thisArgument )),)',
93113
languageOptions: {parser: parsers.typescript},
@@ -96,6 +116,10 @@ test.snapshot({
96116
code: 'Array.from(iterableOrArrayLike, foo as bar, (( thisArgument )),)',
97117
languageOptions: {parser: parsers.typescript},
98118
},
119+
{
120+
code: 'Array.fromAsync(iterableOrArrayLike, foo as bar, (( thisArgument )),)',
121+
languageOptions: {parser: parsers.typescript},
122+
},
99123
{
100124
code: 'array.map( (( foo as bar )), (( thisArgument )),)',
101125
languageOptions: {parser: parsers.typescript},
@@ -104,13 +128,20 @@ test.snapshot({
104128
code: 'Array.from(iterableOrArrayLike, (( foo as bar )), (( thisArgument )),)',
105129
languageOptions: {parser: parsers.typescript},
106130
},
131+
{
132+
code: 'Array.fromAsync(iterableOrArrayLike, (( foo as bar )), (( thisArgument )),)',
133+
languageOptions: {parser: parsers.typescript},
134+
},
107135
'array.map( (( 0, callback )), (( thisArgument )),)',
108136
'Array.from(iterableOrArrayLike, (( 0, callback )), (( thisArgument )),)',
137+
'Array.fromAsync(iterableOrArrayLike, (( 0, callback )), (( thisArgument )),)',
109138
// This callback is actually arrow function, but we don't know
110139
'array.map((0, () => {}), thisArgument)',
111140
'Array.from(iterableOrArrayLike, (0, () => {}), thisArgument)',
141+
'Array.fromAsync(iterableOrArrayLike, (0, () => {}), thisArgument)',
112142
// This callback is a bound function, but we don't know
113143
'array.map(callback.bind(foo), thisArgument)',
114144
'Array.from(iterableOrArrayLike, callback.bind(foo), thisArgument)',
145+
'Array.fromAsync(iterableOrArrayLike, callback.bind(foo), thisArgument)',
115146
],
116147
});

0 commit comments

Comments
 (0)