11import { ASTUtils , TSESTree } from '@typescript-eslint/experimental-utils' ;
22import {
33 findClosestCallExpressionNode ,
4+ getDeepestIdentifierNode ,
45 getFunctionName ,
56 getInnermostReturningFunction ,
67 getVariableReferences ,
@@ -27,9 +28,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
2728 } ,
2829 } ,
2930 messages : {
30- awaitAsyncQuery : 'promise returned from {{ name }} query must be handled' ,
31+ awaitAsyncQuery :
32+ 'promise returned from `{{ name }}` query must be handled' ,
3133 asyncQueryWrapper :
32- 'promise returned from {{ name }} wrapper over async query must be handled' ,
34+ 'promise returned from ` {{ name }}` wrapper over async query must be handled' ,
3335 } ,
3436 schema : [ ] ,
3537 } ,
@@ -46,10 +48,16 @@ export default createTestingLibraryRule<Options, MessageIds>({
4648 }
4749
4850 return {
49- 'CallExpression Identifier' ( node : TSESTree . Identifier ) {
50- if ( helpers . isAsyncQuery ( node ) ) {
51+ CallExpression ( node ) {
52+ const identifierNode = getDeepestIdentifierNode ( node ) ;
53+
54+ if ( ! identifierNode ) {
55+ return ;
56+ }
57+
58+ if ( helpers . isAsyncQuery ( identifierNode ) ) {
5159 // detect async query used within wrapper function for later analysis
52- detectAsyncQueryWrapper ( node ) ;
60+ detectAsyncQueryWrapper ( identifierNode ) ;
5361
5462 const closestCallExpressionNode = findClosestCallExpressionNode (
5563 node ,
@@ -68,11 +76,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
6876 // check direct usage of async query:
6977 // const element = await findByRole('button')
7078 if ( references && references . length === 0 ) {
71- if ( ! isPromiseHandled ( node ) ) {
79+ if ( ! isPromiseHandled ( identifierNode ) ) {
7280 return context . report ( {
73- node,
81+ node : identifierNode ,
7482 messageId : 'awaitAsyncQuery' ,
75- data : { name : node . name } ,
83+ data : { name : identifierNode . name } ,
7684 } ) ;
7785 }
7886 }
@@ -86,19 +94,19 @@ export default createTestingLibraryRule<Options, MessageIds>({
8694 ! isPromiseHandled ( reference . identifier )
8795 ) {
8896 return context . report ( {
89- node,
97+ node : identifierNode ,
9098 messageId : 'awaitAsyncQuery' ,
91- data : { name : node . name } ,
99+ data : { name : identifierNode . name } ,
92100 } ) ;
93101 }
94102 }
95- } else if ( functionWrappersNames . includes ( node . name ) ) {
103+ } else if ( functionWrappersNames . includes ( identifierNode . name ) ) {
96104 // check async queries used within a wrapper previously detected
97- if ( ! isPromiseHandled ( node ) ) {
105+ if ( ! isPromiseHandled ( identifierNode ) ) {
98106 return context . report ( {
99- node,
107+ node : identifierNode ,
100108 messageId : 'asyncQueryWrapper' ,
101- data : { name : node . name } ,
109+ data : { name : identifierNode . name } ,
102110 } ) ;
103111 }
104112 }
0 commit comments