Skip to content

Commit 7e77e8d

Browse files
committed
fix(valid-expect-in-promise): handle sparse arrays
1 parent d566516 commit 7e77e8d

4 files changed

Lines changed: 97 additions & 23 deletions

File tree

src/rules/__tests__/valid-expect-in-promise.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,17 @@ ruleTester.run('valid-expect-in-promise', rule, {
131131
return number + 1;
132132
});
133133
134+
expect([,,await promise,,]).toHaveLength(1);
135+
});
136+
`,
137+
dedent`
138+
it('is valid', async () => {
139+
const promise = loadNumber().then(number => {
140+
expect(typeof number).toBe('number');
141+
142+
return number + 1;
143+
});
144+
134145
expect([[await promise]]).toHaveLength(1);
135146
});
136147
`,

src/rules/prefer-spy-on.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { createRule, getNodeName } from './utils';
33

44
const findNodeObject = (
55
node: TSESTree.CallExpression | TSESTree.MemberExpression,
6-
): TSESTree.LeftHandSideExpression | null => {
6+
): TSESTree.Expression | null => {
77
if ('object' in node) {
88
return node.object;
99
}

src/rules/valid-expect-in-promise.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const isPromiseMethodThatUsesValue = (
9999

100100
if (
101101
firstArg.type === AST_NODE_TYPES.ArrayExpression &&
102-
firstArg.elements.some(nod => isIdentifier(nod, name))
102+
firstArg.elements.some(nod => nod && isIdentifier(nod, name))
103103
) {
104104
return true;
105105
}
@@ -128,14 +128,14 @@ const isValueAwaitedInElements = (
128128
): boolean => {
129129
for (const element of elements) {
130130
if (
131-
element.type === AST_NODE_TYPES.AwaitExpression &&
131+
element?.type === AST_NODE_TYPES.AwaitExpression &&
132132
isIdentifier(element.argument, name)
133133
) {
134134
return true;
135135
}
136136

137137
if (
138-
element.type === AST_NODE_TYPES.ArrayExpression &&
138+
element?.type === AST_NODE_TYPES.ArrayExpression &&
139139
isValueAwaitedInElements(name, element.elements)
140140
) {
141141
return true;

yarn.lock

Lines changed: 82 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2730,12 +2730,12 @@ __metadata:
27302730
linkType: hard
27312731

27322732
"@typescript-eslint/eslint-plugin@npm:^5.0.0":
2733-
version: 5.47.0
2734-
resolution: "@typescript-eslint/eslint-plugin@npm:5.47.0"
2733+
version: 5.48.0
2734+
resolution: "@typescript-eslint/eslint-plugin@npm:5.48.0"
27352735
dependencies:
2736-
"@typescript-eslint/scope-manager": 5.47.0
2737-
"@typescript-eslint/type-utils": 5.47.0
2738-
"@typescript-eslint/utils": 5.47.0
2736+
"@typescript-eslint/scope-manager": 5.48.0
2737+
"@typescript-eslint/type-utils": 5.48.0
2738+
"@typescript-eslint/utils": 5.48.0
27392739
debug: ^4.3.4
27402740
ignore: ^5.2.0
27412741
natural-compare-lite: ^1.4.0
@@ -2748,24 +2748,24 @@ __metadata:
27482748
peerDependenciesMeta:
27492749
typescript:
27502750
optional: true
2751-
checksum: fd867eb2b668d1f476fd28d38c2df2a680bf510a265a6e714b28d8f77e7a37e74e32294b70262a6fd1aec99ddb2fddef0212c862b4465ca4f83bb1172476f6e7
2751+
checksum: cb9cd62fd56670414795e30d30c9fa11ec7ad3a8b0abda48dd17625053a1c26ba1767184b096149bdd0ccb457bec6392306f22211b75f802f4b27366398d16eb
27522752
languageName: node
27532753
linkType: hard
27542754

27552755
"@typescript-eslint/parser@npm:^5.0.0":
2756-
version: 5.47.0
2757-
resolution: "@typescript-eslint/parser@npm:5.47.0"
2756+
version: 5.48.0
2757+
resolution: "@typescript-eslint/parser@npm:5.48.0"
27582758
dependencies:
2759-
"@typescript-eslint/scope-manager": 5.47.0
2760-
"@typescript-eslint/types": 5.47.0
2761-
"@typescript-eslint/typescript-estree": 5.47.0
2759+
"@typescript-eslint/scope-manager": 5.48.0
2760+
"@typescript-eslint/types": 5.48.0
2761+
"@typescript-eslint/typescript-estree": 5.48.0
27622762
debug: ^4.3.4
27632763
peerDependencies:
27642764
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
27652765
peerDependenciesMeta:
27662766
typescript:
27672767
optional: true
2768-
checksum: 5c864ca74b86ca740c73e5b87d90d43bb832b20ba6be0a39089175435771527722a7bf0a8ef7ddbd64b85235fbb7f6dbe8ae55a8bc73c6242f5559d580a8a80c
2768+
checksum: 41d5ce5c8742d286fb083523295a4f186e57bbe4e3da63b6b2de1edbafbcbf6d5225ed3405da2c56e2b0fe1d52bb72babc37508d2ee9b86f6fadad3c4a7950d0
27692769
languageName: node
27702770
linkType: hard
27712771

@@ -2779,20 +2779,30 @@ __metadata:
27792779
languageName: node
27802780
linkType: hard
27812781

2782-
"@typescript-eslint/type-utils@npm:5.47.0":
2783-
version: 5.47.0
2784-
resolution: "@typescript-eslint/type-utils@npm:5.47.0"
2782+
"@typescript-eslint/scope-manager@npm:5.48.0":
2783+
version: 5.48.0
2784+
resolution: "@typescript-eslint/scope-manager@npm:5.48.0"
27852785
dependencies:
2786-
"@typescript-eslint/typescript-estree": 5.47.0
2787-
"@typescript-eslint/utils": 5.47.0
2786+
"@typescript-eslint/types": 5.48.0
2787+
"@typescript-eslint/visitor-keys": 5.48.0
2788+
checksum: 96c0ce33d613490690ae6f34e4152f05dbddf3196a6dec89afba4a63cd2d828ae23a98262920b521fe461e7655d38f3a01e9e43588c12392a27bf8cb4f8ae201
2789+
languageName: node
2790+
linkType: hard
2791+
2792+
"@typescript-eslint/type-utils@npm:5.48.0":
2793+
version: 5.48.0
2794+
resolution: "@typescript-eslint/type-utils@npm:5.48.0"
2795+
dependencies:
2796+
"@typescript-eslint/typescript-estree": 5.48.0
2797+
"@typescript-eslint/utils": 5.48.0
27882798
debug: ^4.3.4
27892799
tsutils: ^3.21.0
27902800
peerDependencies:
27912801
eslint: "*"
27922802
peerDependenciesMeta:
27932803
typescript:
27942804
optional: true
2795-
checksum: 504b3e883ac02cb8e69957b706e76cb79fa2192aa62702c2a658119f28f8f50f1e668efb62318e85aeda6522e1d948b59382cae4ef3300a3f4eea809a87dec26
2805+
checksum: 0d57e3bbcaa46e29b588b86b2271341b264f063e71ff5b6d4d35f50f2fe11bd6cdc3c4c95d78493fd17673ecdbd712992b84da1600947ed3bf6ae09de7b99464
27962806
languageName: node
27972807
linkType: hard
27982808

@@ -2803,6 +2813,13 @@ __metadata:
28032813
languageName: node
28042814
linkType: hard
28052815

2816+
"@typescript-eslint/types@npm:5.48.0":
2817+
version: 5.48.0
2818+
resolution: "@typescript-eslint/types@npm:5.48.0"
2819+
checksum: fa27bd9ec7ec5f256b79a371bb05cfbc26902b6a395f38b0cff0e281633ebd76775ad18e41be1bb156868859287295f6833a2a671da57c6347ac7c6bc08a553b
2820+
languageName: node
2821+
linkType: hard
2822+
28062823
"@typescript-eslint/typescript-estree@npm:5.47.0":
28072824
version: 5.47.0
28082825
resolution: "@typescript-eslint/typescript-estree@npm:5.47.0"
@@ -2821,7 +2838,43 @@ __metadata:
28212838
languageName: node
28222839
linkType: hard
28232840

2824-
"@typescript-eslint/utils@npm:5.47.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.38.1":
2841+
"@typescript-eslint/typescript-estree@npm:5.48.0":
2842+
version: 5.48.0
2843+
resolution: "@typescript-eslint/typescript-estree@npm:5.48.0"
2844+
dependencies:
2845+
"@typescript-eslint/types": 5.48.0
2846+
"@typescript-eslint/visitor-keys": 5.48.0
2847+
debug: ^4.3.4
2848+
globby: ^11.1.0
2849+
is-glob: ^4.0.3
2850+
semver: ^7.3.7
2851+
tsutils: ^3.21.0
2852+
peerDependenciesMeta:
2853+
typescript:
2854+
optional: true
2855+
checksum: 2444632243111e51bc83b56140514cb5978bef4d7151fede0dfcff8808afc1ad335b0c60ca86c2811bcc82273b87e59e2e0360bf1b8c014825ff818a1731d127
2856+
languageName: node
2857+
linkType: hard
2858+
2859+
"@typescript-eslint/utils@npm:5.48.0, @typescript-eslint/utils@npm:^5.10.0":
2860+
version: 5.48.0
2861+
resolution: "@typescript-eslint/utils@npm:5.48.0"
2862+
dependencies:
2863+
"@types/json-schema": ^7.0.9
2864+
"@types/semver": ^7.3.12
2865+
"@typescript-eslint/scope-manager": 5.48.0
2866+
"@typescript-eslint/types": 5.48.0
2867+
"@typescript-eslint/typescript-estree": 5.48.0
2868+
eslint-scope: ^5.1.1
2869+
eslint-utils: ^3.0.0
2870+
semver: ^7.3.7
2871+
peerDependencies:
2872+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
2873+
checksum: 53f512ae61f72c2b29f2daf8adbc1f37c400cc71156557f69f0745b62c1265d99917a168245e2ee3d88ae458144818d1bf41ced4a764d7d9534b466b29d362fd
2874+
languageName: node
2875+
linkType: hard
2876+
2877+
"@typescript-eslint/utils@npm:^5.38.1":
28252878
version: 5.47.0
28262879
resolution: "@typescript-eslint/utils@npm:5.47.0"
28272880
dependencies:
@@ -2849,6 +2902,16 @@ __metadata:
28492902
languageName: node
28502903
linkType: hard
28512904

2905+
"@typescript-eslint/visitor-keys@npm:5.48.0":
2906+
version: 5.48.0
2907+
resolution: "@typescript-eslint/visitor-keys@npm:5.48.0"
2908+
dependencies:
2909+
"@typescript-eslint/types": 5.48.0
2910+
eslint-visitor-keys: ^3.3.0
2911+
checksum: 8d41fb7c93b79df415b43c31da7c9007074d78ab6f16c2d318c23e7974b578ce510f466a9584bd67c526367666974091cb5cfbf6670d29e36fb4ab2e57137515
2912+
languageName: node
2913+
linkType: hard
2914+
28522915
"JSONStream@npm:^1.0.4, JSONStream@npm:^1.3.5":
28532916
version: 1.3.5
28542917
resolution: "JSONStream@npm:1.3.5"

0 commit comments

Comments
 (0)