|
1 | 1 | import { TSESLint, AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'
|
2 |
| -import { createEslintRule, getNodeName, isFunction } from '../utils' |
3 |
| -import { parseVitestFnCall } from '../utils/parseVitestFnCall' |
| 2 | +import { createEslintRule, getNodeName, isFunction, isSupportedAccessor } from '../utils' |
| 3 | +import { isTypeOfVitestFnCall, parseVitestFnCall } from '../utils/parseVitestFnCall' |
4 | 4 |
|
5 | 5 | export const RULE_NAME = 'no-done-callback'
|
6 | 6 | export type MessageIds = 'noDoneCallback' | 'suggestWrappingInPromise' | 'useAwaitInsteadOfCallback';
|
@@ -46,8 +46,20 @@ export default createEslintRule<Options, MessageIds>({
|
46 | 46 | if (isVitestEach && node.callee.type !== AST_NODE_TYPES.TaggedTemplateExpression)
|
47 | 47 | return
|
48 | 48 |
|
49 |
| - const isVitestConcurrent = getNodeName(node.callee)?.endsWith('.concurrent') ?? false |
50 |
| - if (isVitestConcurrent) return |
| 49 | + const isInsideConcurrentTestOrDescribe = context.getAncestors().some((ancestor) => { |
| 50 | + if (ancestor.type !== AST_NODE_TYPES.CallExpression) return false |
| 51 | + |
| 52 | + const isNotInsideDescribeOrTest = !isTypeOfVitestFnCall(ancestor, context, ['describe', 'test']) |
| 53 | + if (isNotInsideDescribeOrTest) return false |
| 54 | + |
| 55 | + const isTestRunningConcurrently = |
| 56 | + ancestor.callee.type === AST_NODE_TYPES.MemberExpression && |
| 57 | + isSupportedAccessor(ancestor.callee.property, 'concurrent') |
| 58 | + |
| 59 | + return isTestRunningConcurrently |
| 60 | + }) |
| 61 | + |
| 62 | + if (isInsideConcurrentTestOrDescribe) return; |
51 | 63 |
|
52 | 64 | const callback = findCallbackArg(node, isVitestEach, context)
|
53 | 65 | const callbackArgIndex = Number(isVitestEach)
|
|
0 commit comments