@vitest/eslint-plugin
Version:
Eslint plugin for vitest
1 lines • 136 kB
JavaScript
"use strict";const utils=require("@typescript-eslint/utils"),n$3=require("typescript"),node_path=require("node:path"),node_module=require("node:module");var _documentCurrentScript=typeof document<"u"?document.currentScript:null;function _interopDefaultCompat(q){return q&&typeof q=="object"&&"default"in q?q.default:q}const n__default=_interopDefaultCompat(n$3),version="1.3.4",createEslintRule=utils.ESLintUtils.RuleCreator(q=>`https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/${q}.md`),joinNames=(q,$)=>q&&$?`${q}.${$}`:null,isFunction=q=>q.type===utils.AST_NODE_TYPES.FunctionExpression||q.type===utils.AST_NODE_TYPES.ArrowFunctionExpression;function getNodeName(q){if(isSupportedAccessor(q))return getAccessorValue(q);switch(q.type){case utils.AST_NODE_TYPES.TaggedTemplateExpression:return getNodeName(q.tag);case utils.AST_NODE_TYPES.MemberExpression:return joinNames(getNodeName(q.object),getNodeName(q.property));case utils.AST_NODE_TYPES.NewExpression:case utils.AST_NODE_TYPES.CallExpression:return getNodeName(q.callee)}return null}const isSupportedAccessor=(q,$)=>isIdentifier(q,$)||isStringNode(q,$),isIdentifier=(q,$)=>q.type===utils.AST_NODE_TYPES.Identifier&&($===void 0||q.name===$),S$4=(q,$)=>q.type===utils.AST_NODE_TYPES.TemplateLiteral&&q.quasis.length===1&&($===void 0||q.quasis[0].value.raw===$),g$2=(q,$)=>q.type===utils.AST_NODE_TYPES.Literal&&typeof q.value=="string"&&($===void 0||q.value===$),isStringNode=(q,$)=>g$2(q,$)||S$4(q,$),getAccessorValue=q=>q.type===utils.AST_NODE_TYPES.Identifier?q.name:getStringValue(q),getStringValue=q=>q?.type===utils.AST_NODE_TYPES.TemplateLiteral?q.quasis[0].value.raw:q?.value,replaceAccessorFixer=(q,$,Y)=>q.replaceText($,$.type===utils.AST_NODE_TYPES.Identifier?Y:`'${Y}'`),removeExtraArgumentsFixer=(q,$,Y,B)=>{const F=Y.arguments[B],W=Y.arguments[Y.arguments.length-1],{sourceCode:V}=$;let H=V.getTokenAfter(W);return H.value===","&&(H=V.getTokenAfter(H)),q.removeRange([F.range[0],H.range[0]])},isParsedInstanceOfMatcherCall=(q,$)=>getAccessorValue(q.matcher)==="toBeInstanceOf"&&q.args.length===1&&isSupportedAccessor(q.args[0],$);var UtilName=(q=>(q.vi="vi",q.vitest="vitest",q))(UtilName||{}),DescribeAlias=(q=>(q.describe="describe",q.fdescribe="fdescribe",q.xdescribe="xdescribe",q))(DescribeAlias||{}),TestCaseName=(q=>(q.fit="fit",q.it="it",q.test="test",q.xit="xit",q.xtest="xtest",q.bench="bench",q))(TestCaseName||{}),HookName=(q=>(q.beforeAll="beforeAll",q.beforeEach="beforeEach",q.afterAll="afterAll",q.afterEach="afterEach",q))(HookName||{}),ModifierName=(q=>(q.to="to",q.have="have",q.not="not",q.rejects="rejects",q.resolves="resolves",q.returns="returns",q.branded="branded",q.asserts="asserts",q.constructorParameters="constructorParameters",q.parameters="parameters",q.thisParameter="thisParameter",q.guards="guards",q.instance="instance",q.items="items",q))(ModifierName||{}),EqualityMatcher=(q=>(q.toBe="toBe",q.toEqual="toEqual",q.toStrictEqual="toStrictEqual",q))(EqualityMatcher||{});function isClassOrFunctionType(q){return q.getCallSignatures().length>0?!0:q.getSymbol()?.getDeclarations()?.some($=>n__default.isArrowFunction($)||n__default.isClassDeclaration($)||n__default.isClassExpression($)||n__default.isFunctionDeclaration($)||n__default.isFunctionExpression($)||n__default.isMethodDeclaration($)||n__default.isFunctionTypeNode($))??!1}const ValidVitestFnCallChains=new Set(["beforeEach","beforeAll","afterEach","afterAll","it","it.skip","it.only","it.concurrent","it.sequential","it.todo","it.fails","it.extend","it.skipIf","it.runIf","it.each","it.skip.only","it.skip.concurrent","it.skip.sequential","it.skip.todo","it.skip.fails","it.only.skip","it.only.concurrent","it.only.sequential","it.only.todo","it.only.fails","it.concurrent.skip","it.concurrent.only","it.concurrent.sequential","it.concurrent.todo","it.concurrent.fails","it.sequential.skip","it.sequential.only","it.sequential.concurrent","it.sequential.todo","it.sequential.fails","it.todo.skip","it.todo.only","it.todo.concurrent","it.todo.sequential","it.todo.fails","it.fails.skip","it.fails.only","it.fails.concurrent","it.fails.sequential","it.fails.todo","it.extend.skip","it.extend.only","it.extend.concurrent","it.extend.sequential","it.extend.todo","it.extend.fails","it.skipIf.skip","it.skipIf.only","it.skipIf.concurrent","it.skipIf.sequential","it.skipIf.todo","it.skipIf.fails","it.runIf.skip","it.runIf.only","it.runIf.concurrent","it.runIf.sequential","it.runIf.todo","it.runIf.fails","it.skip.each","it.only.each","it.concurrent.each","it.sequential.each","it.todo.each","it.fails.each","it.extend.skipIf","it.extend.runIf","it.extend.each","it.skipIf.each","it.runIf.each","it.skip.only.concurrent","it.skip.only.sequential","it.skip.only.todo","it.skip.only.fails","it.skip.concurrent.only","it.skip.concurrent.sequential","it.skip.concurrent.todo","it.skip.concurrent.fails","it.skip.sequential.only","it.skip.sequential.concurrent","it.skip.sequential.todo","it.skip.sequential.fails","it.skip.todo.only","it.skip.todo.concurrent","it.skip.todo.sequential","it.skip.todo.fails","it.skip.fails.only","it.skip.fails.concurrent","it.skip.fails.sequential","it.skip.fails.todo","it.only.skip.concurrent","it.only.skip.sequential","it.only.skip.todo","it.only.skip.fails","it.only.concurrent.skip","it.only.concurrent.sequential","it.only.concurrent.todo","it.only.concurrent.fails","it.only.sequential.skip","it.only.sequential.concurrent","it.only.sequential.todo","it.only.sequential.fails","it.only.todo.skip","it.only.todo.concurrent","it.only.todo.sequential","it.only.todo.fails","it.only.fails.skip","it.only.fails.concurrent","it.only.fails.sequential","it.only.fails.todo","it.concurrent.skip.only","it.concurrent.skip.sequential","it.concurrent.skip.todo","it.concurrent.skip.fails","it.concurrent.only.skip","it.concurrent.only.sequential","it.concurrent.only.todo","it.concurrent.only.fails","it.concurrent.sequential.skip","it.concurrent.sequential.only","it.concurrent.sequential.todo","it.concurrent.sequential.fails","it.concurrent.todo.skip","it.concurrent.todo.only","it.concurrent.todo.sequential","it.concurrent.todo.fails","it.concurrent.fails.skip","it.concurrent.fails.only","it.concurrent.fails.sequential","it.concurrent.fails.todo","it.sequential.skip.only","it.sequential.skip.concurrent","it.sequential.skip.todo","it.sequential.skip.fails","it.sequential.only.skip","it.sequential.only.concurrent","it.sequential.only.todo","it.sequential.only.fails","it.sequential.concurrent.skip","it.sequential.concurrent.only","it.sequential.concurrent.todo","it.sequential.concurrent.fails","it.sequential.todo.skip","it.sequential.todo.only","it.sequential.todo.concurrent","it.sequential.todo.fails","it.sequential.fails.skip","it.sequential.fails.only","it.sequential.fails.concurrent","it.sequential.fails.todo","it.todo.skip.only","it.todo.skip.concurrent","it.todo.skip.sequential","it.todo.skip.fails","it.todo.only.skip","it.todo.only.concurrent","it.todo.only.sequential","it.todo.only.fails","it.todo.concurrent.skip","it.todo.concurrent.only","it.todo.concurrent.sequential","it.todo.concurrent.fails","it.todo.sequential.skip","it.todo.sequential.only","it.todo.sequential.concurrent","it.todo.sequential.fails","it.todo.fails.skip","it.todo.fails.only","it.todo.fails.concurrent","it.todo.fails.sequential","it.fails.skip.only","it.fails.skip.concurrent","it.fails.skip.sequential","it.fails.skip.todo","it.fails.only.skip","it.fails.only.concurrent","it.fails.only.sequential","it.fails.only.todo","it.fails.concurrent.skip","it.fails.concurrent.only","it.fails.concurrent.sequential","it.fails.concurrent.todo","it.fails.sequential.skip","it.fails.sequential.only","it.fails.sequential.concurrent","it.fails.sequential.todo","it.fails.todo.skip","it.fails.todo.only","it.fails.todo.concurrent","it.fails.todo.sequential","it.extend.skip.only","it.extend.skip.concurrent","it.extend.skip.sequential","it.extend.skip.todo","it.extend.skip.fails","it.extend.only.skip","it.extend.only.concurrent","it.extend.only.sequential","it.extend.only.todo","it.extend.only.fails","it.extend.concurrent.skip","it.extend.concurrent.only","it.extend.concurrent.sequential","it.extend.concurrent.todo","it.extend.concurrent.fails","it.extend.sequential.skip","it.extend.sequential.only","it.extend.sequential.concurrent","it.extend.sequential.todo","it.extend.sequential.fails","it.extend.todo.skip","it.extend.todo.only","it.extend.todo.concurrent","it.extend.todo.sequential","it.extend.todo.fails","it.extend.fails.skip","it.extend.fails.only","it.extend.fails.concurrent","it.extend.fails.sequential","it.extend.fails.todo","it.skipIf.skip.only","it.skipIf.skip.concurrent","it.skipIf.skip.sequential","it.skipIf.skip.todo","it.skipIf.skip.fails","it.skipIf.only.skip","it.skipIf.only.concurrent","it.skipIf.only.sequential","it.skipIf.only.todo","it.skipIf.only.fails","it.skipIf.concurrent.skip","it.skipIf.concurrent.only","it.skipIf.concurrent.sequential","it.skipIf.concurrent.todo","it.skipIf.concurrent.fails","it.skipIf.sequential.skip","it.skipIf.sequential.only","it.skipIf.sequential.concurrent","it.skipIf.sequential.todo","it.skipIf.sequential.fails","it.skipIf.todo.skip","it.skipIf.todo.only","it.skipIf.todo.concurrent","it.skipIf.todo.sequential","it.skipIf.todo.fails","it.skipIf.fails.skip","it.skipIf.fails.only","it.skipIf.fails.concurrent","it.skipIf.fails.sequential","it.skipIf.fails.todo","it.runIf.skip.only","it.runIf.skip.concurrent","it.runIf.skip.sequential","it.runIf.skip.todo","it.runIf.skip.fails","it.runIf.only.skip","it.runIf.only.concurrent","it.runIf.only.sequential","it.runIf.only.todo","it.runIf.only.fails","it.runIf.concurrent.skip","it.runIf.concurrent.only","it.runIf.concurrent.sequential","it.runIf.concurrent.todo","it.runIf.concurrent.fails","it.runIf.sequential.skip","it.runIf.sequential.only","it.runIf.sequential.concurrent","it.runIf.sequential.todo","it.runIf.sequential.fails","it.runIf.todo.skip","it.runIf.todo.only","it.runIf.todo.concurrent","it.runIf.todo.sequential","it.runIf.todo.fails","it.runIf.fails.skip","it.runIf.fails.only","it.runIf.fails.concurrent","it.runIf.fails.sequential","it.runIf.fails.todo","it.skip.only.each","it.skip.concurrent.each","it.skip.sequential.each","it.skip.todo.each","it.skip.fails.each","it.only.skip.each","it.only.concurrent.each","it.only.sequential.each","it.only.todo.each","it.only.fails.each","it.concurrent.skip.each","it.concurrent.only.each","it.concurrent.sequential.each","it.concurrent.todo.each","it.concurrent.fails.each","it.sequential.skip.each","it.sequential.only.each","it.sequential.concurrent.each","it.sequential.todo.each","it.sequential.fails.each","it.todo.skip.each","it.todo.only.each","it.todo.concurrent.each","it.todo.sequential.each","it.todo.fails.each","it.fails.skip.each","it.fails.only.each","it.fails.concurrent.each","it.fails.sequential.each","it.fails.todo.each","it.extend.skipIf.skip","it.extend.skipIf.only","it.extend.skipIf.concurrent","it.extend.skipIf.sequential","it.extend.skipIf.todo","it.extend.skipIf.fails","it.extend.runIf.skip","it.extend.runIf.only","it.extend.runIf.concurrent","it.extend.runIf.sequential","it.extend.runIf.todo","it.extend.runIf.fails","it.extend.skip.each","it.extend.only.each","it.extend.concurrent.each","it.extend.sequential.each","it.extend.todo.each","it.extend.fails.each","it.skipIf.skip.each","it.skipIf.only.each","it.skipIf.concurrent.each","it.skipIf.sequential.each","it.skipIf.todo.each","it.skipIf.fails.each","it.runIf.skip.each","it.runIf.only.each","it.runIf.concurrent.each","it.runIf.sequential.each","it.runIf.todo.each","it.runIf.fails.each","it.extend.skipIf.each","it.extend.runIf.each","test","test.skip","test.only","test.concurrent","test.sequential","test.todo","test.fails","test.extend","test.skipIf","test.runIf","test.each","test.skip.only","test.skip.concurrent","test.skip.sequential","test.skip.todo","test.skip.fails","test.only.skip","test.only.concurrent","test.only.sequential","test.only.todo","test.only.fails","test.concurrent.skip","test.concurrent.only","test.concurrent.sequential","test.concurrent.todo","test.concurrent.fails","test.sequential.skip","test.sequential.only","test.sequential.concurrent","test.sequential.todo","test.sequential.fails","test.todo.skip","test.todo.only","test.todo.concurrent","test.todo.sequential","test.todo.fails","test.fails.skip","test.fails.only","test.fails.concurrent","test.fails.sequential","test.fails.todo","test.extend.skip","test.extend.only","test.extend.concurrent","test.extend.sequential","test.extend.todo","test.extend.fails","test.skipIf.skip","test.skipIf.only","test.skipIf.concurrent","test.skipIf.sequential","test.skipIf.todo","test.skipIf.fails","test.runIf.skip","test.runIf.only","test.runIf.concurrent","test.runIf.sequential","test.runIf.todo","test.runIf.fails","test.skip.each","test.only.each","test.concurrent.each","test.sequential.each","test.todo.each","test.fails.each","test.extend.skipIf","test.extend.runIf","test.extend.each","test.skipIf.each","test.runIf.each","test.skip.only.concurrent","test.skip.only.sequential","test.skip.only.todo","test.skip.only.fails","test.skip.concurrent.only","test.skip.concurrent.sequential","test.skip.concurrent.todo","test.skip.concurrent.fails","test.skip.sequential.only","test.skip.sequential.concurrent","test.skip.sequential.todo","test.skip.sequential.fails","test.skip.todo.only","test.skip.todo.concurrent","test.skip.todo.sequential","test.skip.todo.fails","test.skip.fails.only","test.skip.fails.concurrent","test.skip.fails.sequential","test.skip.fails.todo","test.only.skip.concurrent","test.only.skip.sequential","test.only.skip.todo","test.only.skip.fails","test.only.concurrent.skip","test.only.concurrent.sequential","test.only.concurrent.todo","test.only.concurrent.fails","test.only.sequential.skip","test.only.sequential.concurrent","test.only.sequential.todo","test.only.sequential.fails","test.only.todo.skip","test.only.todo.concurrent","test.only.todo.sequential","test.only.todo.fails","test.only.fails.skip","test.only.fails.concurrent","test.only.fails.sequential","test.only.fails.todo","test.concurrent.skip.only","test.concurrent.skip.sequential","test.concurrent.skip.todo","test.concurrent.skip.fails","test.concurrent.only.skip","test.concurrent.only.sequential","test.concurrent.only.todo","test.concurrent.only.fails","test.concurrent.sequential.skip","test.concurrent.sequential.only","test.concurrent.sequential.todo","test.concurrent.sequential.fails","test.concurrent.todo.skip","test.concurrent.todo.only","test.concurrent.todo.sequential","test.concurrent.todo.fails","test.concurrent.fails.skip","test.concurrent.fails.only","test.concurrent.fails.sequential","test.concurrent.fails.todo","test.sequential.skip.only","test.sequential.skip.concurrent","test.sequential.skip.todo","test.sequential.skip.fails","test.sequential.only.skip","test.sequential.only.concurrent","test.sequential.only.todo","test.sequential.only.fails","test.sequential.concurrent.skip","test.sequential.concurrent.only","test.sequential.concurrent.todo","test.sequential.concurrent.fails","test.sequential.todo.skip","test.sequential.todo.only","test.sequential.todo.concurrent","test.sequential.todo.fails","test.sequential.fails.skip","test.sequential.fails.only","test.sequential.fails.concurrent","test.sequential.fails.todo","test.todo.skip.only","test.todo.skip.concurrent","test.todo.skip.sequential","test.todo.skip.fails","test.todo.only.skip","test.todo.only.concurrent","test.todo.only.sequential","test.todo.only.fails","test.todo.concurrent.skip","test.todo.concurrent.only","test.todo.concurrent.sequential","test.todo.concurrent.fails","test.todo.sequential.skip","test.todo.sequential.only","test.todo.sequential.concurrent","test.todo.sequential.fails","test.todo.fails.skip","test.todo.fails.only","test.todo.fails.concurrent","test.todo.fails.sequential","test.fails.skip.only","test.fails.skip.concurrent","test.fails.skip.sequential","test.fails.skip.todo","test.fails.only.skip","test.fails.only.concurrent","test.fails.only.sequential","test.fails.only.todo","test.fails.concurrent.skip","test.fails.concurrent.only","test.fails.concurrent.sequential","test.fails.concurrent.todo","test.fails.sequential.skip","test.fails.sequential.only","test.fails.sequential.concurrent","test.fails.sequential.todo","test.fails.todo.skip","test.fails.todo.only","test.fails.todo.concurrent","test.fails.todo.sequential","test.extend.skip.only","test.extend.skip.concurrent","test.extend.skip.sequential","test.extend.skip.todo","test.extend.skip.fails","test.extend.only.skip","test.extend.only.concurrent","test.extend.only.sequential","test.extend.only.todo","test.extend.only.fails","test.extend.concurrent.skip","test.extend.concurrent.only","test.extend.concurrent.sequential","test.extend.concurrent.todo","test.extend.concurrent.fails","test.extend.sequential.skip","test.extend.sequential.only","test.extend.sequential.concurrent","test.extend.sequential.todo","test.extend.sequential.fails","test.extend.todo.skip","test.extend.todo.only","test.extend.todo.concurrent","test.extend.todo.sequential","test.extend.todo.fails","test.extend.fails.skip","test.extend.fails.only","test.extend.fails.concurrent","test.extend.fails.sequential","test.extend.fails.todo","test.skipIf.skip.only","test.skipIf.skip.concurrent","test.skipIf.skip.sequential","test.skipIf.skip.todo","test.skipIf.skip.fails","test.skipIf.only.skip","test.skipIf.only.concurrent","test.skipIf.only.sequential","test.skipIf.only.todo","test.skipIf.only.fails","test.skipIf.concurrent.skip","test.skipIf.concurrent.only","test.skipIf.concurrent.sequential","test.skipIf.concurrent.todo","test.skipIf.concurrent.fails","test.skipIf.sequential.skip","test.skipIf.sequential.only","test.skipIf.sequential.concurrent","test.skipIf.sequential.todo","test.skipIf.sequential.fails","test.skipIf.todo.skip","test.skipIf.todo.only","test.skipIf.todo.concurrent","test.skipIf.todo.sequential","test.skipIf.todo.fails","test.skipIf.fails.skip","test.skipIf.fails.only","test.skipIf.fails.concurrent","test.skipIf.fails.sequential","test.skipIf.fails.todo","test.runIf.skip.only","test.runIf.skip.concurrent","test.runIf.skip.sequential","test.runIf.skip.todo","test.runIf.skip.fails","test.runIf.only.skip","test.runIf.only.concurrent","test.runIf.only.sequential","test.runIf.only.todo","test.runIf.only.fails","test.runIf.concurrent.skip","test.runIf.concurrent.only","test.runIf.concurrent.sequential","test.runIf.concurrent.todo","test.runIf.concurrent.fails","test.runIf.sequential.skip","test.runIf.sequential.only","test.runIf.sequential.concurrent","test.runIf.sequential.todo","test.runIf.sequential.fails","test.runIf.todo.skip","test.runIf.todo.only","test.runIf.todo.concurrent","test.runIf.todo.sequential","test.runIf.todo.fails","test.runIf.fails.skip","test.runIf.fails.only","test.runIf.fails.concurrent","test.runIf.fails.sequential","test.runIf.fails.todo","test.skip.only.each","test.skip.concurrent.each","test.skip.sequential.each","test.skip.todo.each","test.skip.fails.each","test.only.skip.each","test.only.concurrent.each","test.only.sequential.each","test.only.todo.each","test.only.fails.each","test.concurrent.skip.each","test.concurrent.only.each","test.concurrent.sequential.each","test.concurrent.todo.each","test.concurrent.fails.each","test.sequential.skip.each","test.sequential.only.each","test.sequential.concurrent.each","test.sequential.todo.each","test.sequential.fails.each","test.todo.skip.each","test.todo.only.each","test.todo.concurrent.each","test.todo.sequential.each","test.todo.fails.each","test.fails.skip.each","test.fails.only.each","test.fails.concurrent.each","test.fails.sequential.each","test.fails.todo.each","test.extend.skipIf.skip","test.extend.skipIf.only","test.extend.skipIf.concurrent","test.extend.skipIf.sequential","test.extend.skipIf.todo","test.extend.skipIf.fails","test.extend.runIf.skip","test.extend.runIf.only","test.extend.runIf.concurrent","test.extend.runIf.sequential","test.extend.runIf.todo","test.extend.runIf.fails","test.extend.skip.each","test.extend.only.each","test.extend.concurrent.each","test.extend.sequential.each","test.extend.todo.each","test.extend.fails.each","test.skipIf.skip.each","test.skipIf.only.each","test.skipIf.concurrent.each","test.skipIf.sequential.each","test.skipIf.todo.each","test.skipIf.fails.each","test.runIf.skip.each","test.runIf.only.each","test.runIf.concurrent.each","test.runIf.sequential.each","test.runIf.todo.each","test.runIf.fails.each","test.extend.skipIf.each","test.extend.runIf.each","bench","bench.skip","bench.only","bench.todo","bench.skipIf","bench.runIf","bench.skip.only","bench.skip.todo","bench.only.skip","bench.only.todo","bench.todo.skip","bench.todo.only","bench.skipIf.skip","bench.skipIf.only","bench.skipIf.todo","bench.runIf.skip","bench.runIf.only","bench.runIf.todo","bench.skip.only.todo","bench.skip.todo.only","bench.only.skip.todo","bench.only.todo.skip","bench.todo.skip.only","bench.todo.only.skip","bench.skipIf.skip.only","bench.skipIf.skip.todo","bench.skipIf.only.skip","bench.skipIf.only.todo","bench.skipIf.todo.skip","bench.skipIf.todo.only","bench.runIf.skip.only","bench.runIf.skip.todo","bench.runIf.only.skip","bench.runIf.only.todo","bench.runIf.todo.skip","bench.runIf.todo.only","describe","describe.skip","describe.only","describe.concurrent","describe.sequential","describe.shuffle","describe.todo","describe.skipIf","describe.runIf","describe.each","describe.skip.only","describe.skip.concurrent","describe.skip.sequential","describe.skip.shuffle","describe.skip.todo","describe.only.skip","describe.only.concurrent","describe.only.sequential","describe.only.shuffle","describe.only.todo","describe.concurrent.skip","describe.concurrent.only","describe.concurrent.sequential","describe.concurrent.shuffle","describe.concurrent.todo","describe.sequential.skip","describe.sequential.only","describe.sequential.concurrent","describe.sequential.shuffle","describe.sequential.todo","describe.shuffle.skip","describe.shuffle.only","describe.shuffle.concurrent","describe.shuffle.sequential","describe.shuffle.todo","describe.todo.skip","describe.todo.only","describe.todo.concurrent","describe.todo.sequential","describe.todo.shuffle","describe.skipIf.skip","describe.skipIf.only","describe.skipIf.concurrent","describe.skipIf.sequential","describe.skipIf.shuffle","describe.skipIf.todo","describe.runIf.skip","describe.runIf.only","describe.runIf.concurrent","describe.runIf.sequential","describe.runIf.shuffle","describe.runIf.todo","describe.skip.each","describe.only.each","describe.concurrent.each","describe.sequential.each","describe.shuffle.each","describe.todo.each","describe.skipIf.each","describe.runIf.each","describe.skip.only.concurrent","describe.skip.only.sequential","describe.skip.only.shuffle","describe.skip.only.todo","describe.skip.concurrent.only","describe.skip.concurrent.sequential","describe.skip.concurrent.shuffle","describe.skip.concurrent.todo","describe.skip.sequential.only","describe.skip.sequential.concurrent","describe.skip.sequential.shuffle","describe.skip.sequential.todo","describe.skip.shuffle.only","describe.skip.shuffle.concurrent","describe.skip.shuffle.sequential","describe.skip.shuffle.todo","describe.skip.todo.only","describe.skip.todo.concurrent","describe.skip.todo.sequential","describe.skip.todo.shuffle","describe.only.skip.concurrent","describe.only.skip.sequential","describe.only.skip.shuffle","describe.only.skip.todo","describe.only.concurrent.skip","describe.only.concurrent.sequential","describe.only.concurrent.shuffle","describe.only.concurrent.todo","describe.only.sequential.skip","describe.only.sequential.concurrent","describe.only.sequential.shuffle","describe.only.sequential.todo","describe.only.shuffle.skip","describe.only.shuffle.concurrent","describe.only.shuffle.sequential","describe.only.shuffle.todo","describe.only.todo.skip","describe.only.todo.concurrent","describe.only.todo.sequential","describe.only.todo.shuffle","describe.concurrent.skip.only","describe.concurrent.skip.sequential","describe.concurrent.skip.shuffle","describe.concurrent.skip.todo","describe.concurrent.only.skip","describe.concurrent.only.sequential","describe.concurrent.only.shuffle","describe.concurrent.only.todo","describe.concurrent.sequential.skip","describe.concurrent.sequential.only","describe.concurrent.sequential.shuffle","describe.concurrent.sequential.todo","describe.concurrent.shuffle.skip","describe.concurrent.shuffle.only","describe.concurrent.shuffle.sequential","describe.concurrent.shuffle.todo","describe.concurrent.todo.skip","describe.concurrent.todo.only","describe.concurrent.todo.sequential","describe.concurrent.todo.shuffle","describe.sequential.skip.only","describe.sequential.skip.concurrent","describe.sequential.skip.shuffle","describe.sequential.skip.todo","describe.sequential.only.skip","describe.sequential.only.concurrent","describe.sequential.only.shuffle","describe.sequential.only.todo","describe.sequential.concurrent.skip","describe.sequential.concurrent.only","describe.sequential.concurrent.shuffle","describe.sequential.concurrent.todo","describe.sequential.shuffle.skip","describe.sequential.shuffle.only","describe.sequential.shuffle.concurrent","describe.sequential.shuffle.todo","describe.sequential.todo.skip","describe.sequential.todo.only","describe.sequential.todo.concurrent","describe.sequential.todo.shuffle","describe.shuffle.skip.only","describe.shuffle.skip.concurrent","describe.shuffle.skip.sequential","describe.shuffle.skip.todo","describe.shuffle.only.skip","describe.shuffle.only.concurrent","describe.shuffle.only.sequential","describe.shuffle.only.todo","describe.shuffle.concurrent.skip","describe.shuffle.concurrent.only","describe.shuffle.concurrent.sequential","describe.shuffle.concurrent.todo","describe.shuffle.sequential.skip","describe.shuffle.sequential.only","describe.shuffle.sequential.concurrent","describe.shuffle.sequential.todo","describe.shuffle.todo.skip","describe.shuffle.todo.only","describe.shuffle.todo.concurrent","describe.shuffle.todo.sequential","describe.todo.skip.only","describe.todo.skip.concurrent","describe.todo.skip.sequential","describe.todo.skip.shuffle","describe.todo.only.skip","describe.todo.only.concurrent","describe.todo.only.sequential","describe.todo.only.shuffle","describe.todo.concurrent.skip","describe.todo.concurrent.only","describe.todo.concurrent.sequential","describe.todo.concurrent.shuffle","describe.todo.sequential.skip","describe.todo.sequential.only","describe.todo.sequential.concurrent","describe.todo.sequential.shuffle","describe.todo.shuffle.skip","describe.todo.shuffle.only","describe.todo.shuffle.concurrent","describe.todo.shuffle.sequential","describe.skipIf.skip.only","describe.skipIf.skip.concurrent","describe.skipIf.skip.sequential","describe.skipIf.skip.shuffle","describe.skipIf.skip.todo","describe.skipIf.only.skip","describe.skipIf.only.concurrent","describe.skipIf.only.sequential","describe.skipIf.only.shuffle","describe.skipIf.only.todo","describe.skipIf.concurrent.skip","describe.skipIf.concurrent.only","describe.skipIf.concurrent.sequential","describe.skipIf.concurrent.shuffle","describe.skipIf.concurrent.todo","describe.skipIf.sequential.skip","describe.skipIf.sequential.only","describe.skipIf.sequential.concurrent","describe.skipIf.sequential.shuffle","describe.skipIf.sequential.todo","describe.skipIf.shuffle.skip","describe.skipIf.shuffle.only","describe.skipIf.shuffle.concurrent","describe.skipIf.shuffle.sequential","describe.skipIf.shuffle.todo","describe.skipIf.todo.skip","describe.skipIf.todo.only","describe.skipIf.todo.concurrent","describe.skipIf.todo.sequential","describe.skipIf.todo.shuffle","describe.runIf.skip.only","describe.runIf.skip.concurrent","describe.runIf.skip.sequential","describe.runIf.skip.shuffle","describe.runIf.skip.todo","describe.runIf.only.skip","describe.runIf.only.concurrent","describe.runIf.only.sequential","describe.runIf.only.shuffle","describe.runIf.only.todo","describe.runIf.concurrent.skip","describe.runIf.concurrent.only","describe.runIf.concurrent.sequential","describe.runIf.concurrent.shuffle","describe.runIf.concurrent.todo","describe.runIf.sequential.skip","describe.runIf.sequential.only","describe.runIf.sequential.concurrent","describe.runIf.sequential.shuffle","describe.runIf.sequential.todo","describe.runIf.shuffle.skip","describe.runIf.shuffle.only","describe.runIf.shuffle.concurrent","describe.runIf.shuffle.sequential","describe.runIf.shuffle.todo","describe.runIf.todo.skip","describe.runIf.todo.only","describe.runIf.todo.concurrent","describe.runIf.todo.sequential","describe.runIf.todo.shuffle","describe.skip.only.each","describe.skip.concurrent.each","describe.skip.sequential.each","describe.skip.shuffle.each","describe.skip.todo.each","describe.only.skip.each","describe.only.concurrent.each","describe.only.sequential.each","describe.only.shuffle.each","describe.only.todo.each","describe.concurrent.skip.each","describe.concurrent.only.each","describe.concurrent.sequential.each","describe.concurrent.shuffle.each","describe.concurrent.todo.each","describe.sequential.skip.each","describe.sequential.only.each","describe.sequential.concurrent.each","describe.sequential.shuffle.each","describe.sequential.todo.each","describe.shuffle.skip.each","describe.shuffle.only.each","describe.shuffle.concurrent.each","describe.shuffle.sequential.each","describe.shuffle.todo.each","describe.todo.skip.each","describe.todo.only.each","describe.todo.concurrent.each","describe.todo.sequential.each","describe.todo.shuffle.each","describe.skipIf.skip.each","describe.skipIf.only.each","describe.skipIf.concurrent.each","describe.skipIf.sequential.each","describe.skipIf.shuffle.each","describe.skipIf.todo.each","describe.runIf.skip.each","describe.runIf.only.each","describe.runIf.concurrent.each","describe.runIf.sequential.each","describe.runIf.shuffle.each","describe.runIf.todo.each","suite","suite.skip","suite.only","suite.concurrent","suite.sequential","suite.shuffle","suite.todo","suite.skipIf","suite.runIf","suite.each","suite.skip.only","suite.skip.concurrent","suite.skip.sequential","suite.skip.shuffle","suite.skip.todo","suite.only.skip","suite.only.concurrent","suite.only.sequential","suite.only.shuffle","suite.only.todo","suite.concurrent.skip","suite.concurrent.only","suite.concurrent.sequential","suite.concurrent.shuffle","suite.concurrent.todo","suite.sequential.skip","suite.sequential.only","suite.sequential.concurrent","suite.sequential.shuffle","suite.sequential.todo","suite.shuffle.skip","suite.shuffle.only","suite.shuffle.concurrent","suite.shuffle.sequential","suite.shuffle.todo","suite.todo.skip","suite.todo.only","suite.todo.concurrent","suite.todo.sequential","suite.todo.shuffle","suite.skipIf.skip","suite.skipIf.only","suite.skipIf.concurrent","suite.skipIf.sequential","suite.skipIf.shuffle","suite.skipIf.todo","suite.runIf.skip","suite.runIf.only","suite.runIf.concurrent","suite.runIf.sequential","suite.runIf.shuffle","suite.runIf.todo","suite.skip.each","suite.only.each","suite.concurrent.each","suite.sequential.each","suite.shuffle.each","suite.todo.each","suite.skipIf.each","suite.runIf.each","suite.skip.only.concurrent","suite.skip.only.sequential","suite.skip.only.shuffle","suite.skip.only.todo","suite.skip.concurrent.only","suite.skip.concurrent.sequential","suite.skip.concurrent.shuffle","suite.skip.concurrent.todo","suite.skip.sequential.only","suite.skip.sequential.concurrent","suite.skip.sequential.shuffle","suite.skip.sequential.todo","suite.skip.shuffle.only","suite.skip.shuffle.concurrent","suite.skip.shuffle.sequential","suite.skip.shuffle.todo","suite.skip.todo.only","suite.skip.todo.concurrent","suite.skip.todo.sequential","suite.skip.todo.shuffle","suite.only.skip.concurrent","suite.only.skip.sequential","suite.only.skip.shuffle","suite.only.skip.todo","suite.only.concurrent.skip","suite.only.concurrent.sequential","suite.only.concurrent.shuffle","suite.only.concurrent.todo","suite.only.sequential.skip","suite.only.sequential.concurrent","suite.only.sequential.shuffle","suite.only.sequential.todo","suite.only.shuffle.skip","suite.only.shuffle.concurrent","suite.only.shuffle.sequential","suite.only.shuffle.todo","suite.only.todo.skip","suite.only.todo.concurrent","suite.only.todo.sequential","suite.only.todo.shuffle","suite.concurrent.skip.only","suite.concurrent.skip.sequential","suite.concurrent.skip.shuffle","suite.concurrent.skip.todo","suite.concurrent.only.skip","suite.concurrent.only.sequential","suite.concurrent.only.shuffle","suite.concurrent.only.todo","suite.concurrent.sequential.skip","suite.concurrent.sequential.only","suite.concurrent.sequential.shuffle","suite.concurrent.sequential.todo","suite.concurrent.shuffle.skip","suite.concurrent.shuffle.only","suite.concurrent.shuffle.sequential","suite.concurrent.shuffle.todo","suite.concurrent.todo.skip","suite.concurrent.todo.only","suite.concurrent.todo.sequential","suite.concurrent.todo.shuffle","suite.sequential.skip.only","suite.sequential.skip.concurrent","suite.sequential.skip.shuffle","suite.sequential.skip.todo","suite.sequential.only.skip","suite.sequential.only.concurrent","suite.sequential.only.shuffle","suite.sequential.only.todo","suite.sequential.concurrent.skip","suite.sequential.concurrent.only","suite.sequential.concurrent.shuffle","suite.sequential.concurrent.todo","suite.sequential.shuffle.skip","suite.sequential.shuffle.only","suite.sequential.shuffle.concurrent","suite.sequential.shuffle.todo","suite.sequential.todo.skip","suite.sequential.todo.only","suite.sequential.todo.concurrent","suite.sequential.todo.shuffle","suite.shuffle.skip.only","suite.shuffle.skip.concurrent","suite.shuffle.skip.sequential","suite.shuffle.skip.todo","suite.shuffle.only.skip","suite.shuffle.only.concurrent","suite.shuffle.only.sequential","suite.shuffle.only.todo","suite.shuffle.concurrent.skip","suite.shuffle.concurrent.only","suite.shuffle.concurrent.sequential","suite.shuffle.concurrent.todo","suite.shuffle.sequential.skip","suite.shuffle.sequential.only","suite.shuffle.sequential.concurrent","suite.shuffle.sequential.todo","suite.shuffle.todo.skip","suite.shuffle.todo.only","suite.shuffle.todo.concurrent","suite.shuffle.todo.sequential","suite.todo.skip.only","suite.todo.skip.concurrent","suite.todo.skip.sequential","suite.todo.skip.shuffle","suite.todo.only.skip","suite.todo.only.concurrent","suite.todo.only.sequential","suite.todo.only.shuffle","suite.todo.concurrent.skip","suite.todo.concurrent.only","suite.todo.concurrent.sequential","suite.todo.concurrent.shuffle","suite.todo.sequential.skip","suite.todo.sequential.only","suite.todo.sequential.concurrent","suite.todo.sequential.shuffle","suite.todo.shuffle.skip","suite.todo.shuffle.only","suite.todo.shuffle.concurrent","suite.todo.shuffle.sequential","suite.skipIf.skip.only","suite.skipIf.skip.concurrent","suite.skipIf.skip.sequential","suite.skipIf.skip.shuffle","suite.skipIf.skip.todo","suite.skipIf.only.skip","suite.skipIf.only.concurrent","suite.skipIf.only.sequential","suite.skipIf.only.shuffle","suite.skipIf.only.todo","suite.skipIf.concurrent.skip","suite.skipIf.concurrent.only","suite.skipIf.concurrent.sequential","suite.skipIf.concurrent.shuffle","suite.skipIf.concurrent.todo","suite.skipIf.sequential.skip","suite.skipIf.sequential.only","suite.skipIf.sequential.concurrent","suite.skipIf.sequential.shuffle","suite.skipIf.sequential.todo","suite.skipIf.shuffle.skip","suite.skipIf.shuffle.only","suite.skipIf.shuffle.concurrent","suite.skipIf.shuffle.sequential","suite.skipIf.shuffle.todo","suite.skipIf.todo.skip","suite.skipIf.todo.only","suite.skipIf.todo.concurrent","suite.skipIf.todo.sequential","suite.skipIf.todo.shuffle","suite.runIf.skip.only","suite.runIf.skip.concurrent","suite.runIf.skip.sequential","suite.runIf.skip.shuffle","suite.runIf.skip.todo","suite.runIf.only.skip","suite.runIf.only.concurrent","suite.runIf.only.sequential","suite.runIf.only.shuffle","suite.runIf.only.todo","suite.runIf.concurrent.skip","suite.runIf.concurrent.only","suite.runIf.concurrent.sequential","suite.runIf.concurrent.shuffle","suite.runIf.concurrent.todo","suite.runIf.sequential.skip","suite.runIf.sequential.only","suite.runIf.sequential.concurrent","suite.runIf.sequential.shuffle","suite.runIf.sequential.todo","suite.runIf.shuffle.skip","suite.runIf.shuffle.only","suite.runIf.shuffle.concurrent","suite.runIf.shuffle.sequential","suite.runIf.shuffle.todo","suite.runIf.todo.skip","suite.runIf.todo.only","suite.runIf.todo.concurrent","suite.runIf.todo.sequential","suite.runIf.todo.shuffle","suite.skip.only.each","suite.skip.concurrent.each","suite.skip.sequential.each","suite.skip.shuffle.each","suite.skip.todo.each","suite.only.skip.each","suite.only.concurrent.each","suite.only.sequential.each","suite.only.shuffle.each","suite.only.todo.each","suite.concurrent.skip.each","suite.concurrent.only.each","suite.concurrent.sequential.each","suite.concurrent.shuffle.each","suite.concurrent.todo.each","suite.sequential.skip.each","suite.sequential.only.each","suite.sequential.concurrent.each","suite.sequential.shuffle.each","suite.sequential.todo.each","suite.shuffle.skip.each","suite.shuffle.only.each","suite.shuffle.concurrent.each","suite.shuffle.sequential.each","suite.shuffle.todo.each","suite.todo.skip.each","suite.todo.only.each","suite.todo.concurrent.each","suite.todo.sequential.each","suite.todo.shuffle.each","suite.skipIf.skip.each","suite.skipIf.only.each","suite.skipIf.concurrent.each","suite.skipIf.sequential.each","suite.skipIf.shuffle.each","suite.skipIf.todo.each","suite.runIf.skip.each","suite.runIf.only.each","suite.runIf.concurrent.each","suite.runIf.sequential.each","suite.runIf.shuffle.each","suite.runIf.todo.each","xtest","xtest.each","xit","xit.each","fit","xdescribe","xdescribe.each","fdescribe"]);function getScope(q,$){return q.sourceCode.getScope?q.sourceCode.getScope($):q.getScope()}function getModuleScope(q,$){let Y=getScope(q,$);for(;Y;){if(Y.type==="module")return Y;Y=Y.upper}return Y}const isTypeOfVitestFnCall=(q,$,Y)=>{const B=parseVitestFnCall(q,$);return B!==null&&Y.includes(B.type)},parseVitestFnCall=(q,$)=>{const Y=parseVitestFnCallWithReason(q,$);return typeof Y=="string"?null:Y},y$4=new WeakMap,parseVitestFnCallWithReason=(q,$)=>{let Y=y$4.get(q);return Y||(Y=M$3(q,$),y$4.set(q,Y),Y)},A$3=q=>q==="expect"?"expect":q==="expectTypeOf"?"expectTypeOf":q==="vi"?"vi":q==="vitest"?"vitest":DescribeAlias.hasOwnProperty(q)?"describe":TestCaseName.hasOwnProperty(q)?"test":HookName.hasOwnProperty(q)?"hook":"unknown",w$2=q=>{const $=[];for(const Y of q){if(Y.parent?.type===utils.AST_NODE_TYPES.MemberExpression&&Y.parent.parent?.type===utils.AST_NODE_TYPES.CallExpression)return{matcher:Y,args:Y.parent.parent.arguments,modifiers:$};const B=getAccessorValue(Y);if($.length===0){if(!ModifierName.hasOwnProperty(B))return"modifier-unknown"}else if($.length===1){if(B!==ModifierName.not&&B!=ModifierName.have)return"modifier-unknown";const F=getAccessorValue($[0]);if(F!==ModifierName.resolves&&F!==ModifierName.rejects&&F!==ModifierName.to)return"modifier-unknown"}else return"modifier-unknown";$.push(Y)}return"matcher-not-found"},P$2=(q,$)=>{const Y=w$2(q.members);return typeof Y=="string"?Y:{...q,type:$,...Y}},findTopMostCallExpression=q=>{let $=q,{parent:Y}=q;for(;Y;){if(Y.type===utils.AST_NODE_TYPES.CallExpression){$=Y,Y=Y.parent;continue}if(Y.type!==utils.AST_NODE_TYPES.MemberExpression)break;Y=Y.parent}return $},M$3=(q,$)=>{const Y=getNodeChain(q);if(!Y?.length)return null;const[B,...F]=Y,W=getAccessorValue(Y[Y.length-1]);if(W==="each"&&q.callee.type!==utils.AST_NODE_TYPES.CallExpression&&q.callee.type!==utils.AST_NODE_TYPES.TaggedTemplateExpression||q.callee.type===utils.AST_NODE_TYPES.TaggedTemplateExpression&&W!=="each")return null;const V=v($,q,getAccessorValue(B));if(!V)return null;const H=V.original??V.local,G=[H,...F.map(getAccessorValue)];if(V.type!=="testContext"&&H!=="vi"&&H!=="vitest"&&H!=="expect"&&H!=="expectTypeOf"&&!ValidVitestFnCallChains.has(G.join(".")))return null;const z={name:H,head:{...V,node:B},members:F},J=A$3(H);if(J==="expect"||J==="expectTypeOf"){const X=P$2(z,J);return typeof X=="string"&&findTopMostCallExpression(q)!==q?null:X==="matcher-not-found"&&q.parent?.type===utils.AST_NODE_TYPES.MemberExpression?"matcher-not-called":X}return Y.slice(0,Y.length-1).some(X=>X.parent?.type!==utils.AST_NODE_TYPES.MemberExpression)||q.parent?.type===utils.AST_NODE_TYPES.CallExpression||q.parent?.type===utils.AST_NODE_TYPES.MemberExpression?null:{...z,type:J}},k$1=(q,$)=>q&&$?[...q,...$]:null;function getNodeChain(q){if(isSupportedAccessor(q))return[q];switch(q.type){case utils.AST_NODE_TYPES.TaggedTemplateExpression:return getNodeChain(q.tag);case utils.AST_NODE_TYPES.MemberExpression:return k$1(getNodeChain(q.object),getNodeChain(q.property));case utils.AST_NODE_TYPES.CallExpression:return getNodeChain(q.callee)}return null}const v=(q,$,Y)=>{const B=getScope(q,$),F=resolveScope(B,Y);return F==="local"?null:F==="testContext"?{local:Y,original:null,type:"testContext"}:F?F.source==="vitest"?{original:F.imported,local:F.local,type:"import"}:null:{original:N$4(Y,q),local:Y,type:"global"}},N$4=(q,$)=>{const Y=$.settings.vitest?.globalAliases??{},B=Object.entries(Y).find(([F,W])=>W.includes(q));return B?B[0]:null},I$1=({parent:q})=>{if(q?.type===utils.AST_NODE_TYPES.CallExpression&&q.callee.type===utils.AST_NODE_TYPES.Identifier)return TestCaseName.hasOwnProperty(q.callee.name)},resolveScope=(q,$)=>{let Y=q;for(;Y!==null;){const B=Y.set.get($);if(B&&B.defs.length>0){const F=B.defs[B.defs.length-1],W=isFunction(F.node)?F.node.params.find(G=>G.type===utils.AST_NODE_TYPES.ObjectPattern):void 0;if(W){const G=W.properties.find(z=>z.type===utils.AST_NODE_TYPES.Property);if((G?.key.type===utils.AST_NODE_TYPES.Identifier?G.key:void 0)?.name===$)return"testContext"}const V=isFunction(F.node)?F.node.params.find(G=>G.type===utils.AST_NODE_TYPES.Identifier):void 0;if(V&&I$1(V.parent))return"testContext";const H=D$1(F);return H?.local===$?H:"local"}Y=Y.upper}return null},R=q=>q.type===utils.AST_NODE_TYPES.AwaitExpression?q.argument.type===utils.AST_NODE_TYPES.ImportExpression?q.argument.source:null:q.type===utils.AST_NODE_TYPES.CallExpression&&isIdentifier(q.callee,"require")?q.arguments[0]??null:null,O$2=q=>q.parent.type===utils.AST_NODE_TYPES.TSImportEqualsDeclaration||q.node.type!==utils.AST_NODE_TYPES.ImportSpecifier||q.node.imported.type!=utils.AST_NODE_TYPES.Identifier||q.parent.importKind==="type"?null:{source:q.parent.source.value,imported:q.node.imported.name,local:q.node.local.name},D$1=q=>q.type==="Variable"?L$1(q):q.type==="ImportBinding"?O$2(q):null,L$1=q=>{if(!q.node.init)return null;const $=R(q.node.init);return!$||!isStringNode($)||q.name.parent?.type!==utils.AST_NODE_TYPES.Property||!isSupportedAccessor(q.name.parent.key)?null:{source:getStringValue($),imported:getAccessorValue(q.name.parent.key),local:q.name.name}},getTestCallExpressionsFromDeclaredVariables=(q,$)=>q.reduce((Y,{references:B})=>Y.concat(B.map(({identifier:F})=>F.parent).filter(F=>F?.type===utils.AST_NODE_TYPES.CallExpression&&isTypeOfVitestFnCall(F,$,["test"]))),[]),getFirstMatcherArg=q=>{const[$]=q.args;return $.type===utils.AST_NODE_TYPES.SpreadElement?$:followTypeAssertionChain$1($)},K=q=>q.type===utils.AST_NODE_TYPES.TSAsExpression||q.type===utils.AST_NODE_TYPES.TSTypeAssertion,followTypeAssertionChain$1=q=>K(q)?followTypeAssertionChain$1(q.expression):q,RULE_NAME$16="prefer-lowercase-title",E$5=q=>q.arguments[0]&&isStringNode(q.arguments[0]),x$4=q=>{const $=[];return q.includes(DescribeAlias.describe)&&$.push(...Object.keys(DescribeAlias)),q.includes(TestCaseName.test)&&$.push(...Object.keys(TestCaseName).filter(Y=>Y.endsWith(TestCaseName.test))),q.includes(TestCaseName.it)&&$.push(...Object.keys(TestCaseName).filter(Y=>Y.endsWith(TestCaseName.it))),$},be=createEslintRule({name:RULE_NAME$16,meta:{type:"problem",docs:{description:"enforce lowercase titles",recommended:!1},fixable:"code",messages:{lowerCaseTitle:"`{{ method }}`s should begin with lowercase",fullyLowerCaseTitle:"`{{ method }}`s should be lowercase"},schema:[{type:"object",properties:{ignore:{type:"array",items:{type:"string",enum:[DescribeAlias.describe,TestCaseName.test,TestCaseName.it]}},allowedPrefixes:{type:"array",items:{type:"string"},additionalItems:!1},ignoreTopLevelDescribe:{type:"boolean",default:!1},lowercaseFirstCharacterOnly:{type:"boolean",default:!0}},additionalProperties:!1}]},defaultOptions:[{ignore:[],allowedPrefixes:[],ignoreTopLevelDescribe:!1,lowercaseFirstCharacterOnly:!0}],create:(q,[{ignore:$=[],allowedPrefixes:Y=[],ignoreTopLevelDescribe:B=!1,lowercaseFirstCharacterOnly:F=!1}])=>{const W=x$4($);let V=0;return{CallExpression(H){const G=parseVitestFnCall(H,q);if(!G||!E$5)return;if(G?.type==="describe"){if(V++,B&&V===1)return}else if(G?.type!=="test")return;const[z]=H.arguments,J=getStringValue(z);if(typeof J!="string"||Y.some(te=>J.startsWith(te)))return;const X=J.charAt(0);W.includes(G.name)||F&&(!X||X===X.toLowerCase())||!F&&J===J.toLowerCase()||q.report({messageId:F?"lowerCaseTitle":"fullyLowerCaseTitle",node:H.arguments[0],data:{method:G.name},fix:te=>{const Q=getStringValue(z),se=[z.range[0]+1,z.range[1]-1],Z=F?Q.substring(0,1).toLowerCase()+Q.substring(1):Q.toLowerCase();return[te.replaceTextRange(se,Z)]}})},"CallExpression:exit"(H){isTypeOfVitestFnCall(H,q,["describe"])&&V--}}}}),RULE_NAME$15="max-nested-describe",ge=createEslintRule({name:RULE_NAME$15,meta:{type:"problem",docs:{description:"require describe block to be less than set max value or default value",recommended:!1},schema:[{type:"object",properties:{max:{type:"number"}},additionalProperties:!1}],messages:{maxNestedDescribe:"Nested describe block should be less than set max value"}},defaultOptions:[{max:5}],create(q,[{max:$}]){const Y=[];function B(W){W.parent?.type==="CallExpression"&&(W.parent.callee.type!=="Identifier"||W.parent.callee.name!=="describe"||(Y.push(0),Y.length>$&&q.report({node:W.parent,messageId:"maxNestedDescribe"})))}function F(W){W.parent?.type==="CallExpression"&&(W.parent.callee.type!=="Identifier"||W.parent.callee.name!=="describe"||Y.pop())}return{FunctionExpression:B,"FunctionExpression:exit":F,ArrowFunctionExpression:B,"ArrowFunctionExpression:exit":F}}}),RULE_NAME$14="no-identical-title",c$4=()=>({describeTitles:[],testTitles:[]}),he=createEslintRule({name:RULE_NAME$14,meta:{type:"problem",docs:{description:"disallow identical titles",recommended:!1},fixable:"code",schema:[],messages:{multipleTestTitle:"Test is used multiple times in the same describe(suite) block",multipleDescribeTitle:"Describe is used multiple times in the same describe(suite) block"}},defaultOptions:[],create(q){const $=[c$4()];return{CallExpression(Y){const B=$[$.length-1],F=parseVitestFnCall(Y,q);if(!F||((F.name==="describe"||F.name==="suite")&&$.push(c$4()),F.members.find(H=>isSupportedAccessor(H,"each"))))return;const[W]=Y.arguments;if(!W||!isStringNode(W))return;const V=getStringValue(W);F.type==="test"&&(B?.testTitles.includes(V)&&q.report({node:Y,messageId:"multipleTestTitle"}),B?.testTitles.push(V)),F.type==="describe"&&(B?.describeTitles.includes(V)&&q.report({node:Y,messageId:"multipleDescribeTitle"}),B?.describeTitles.push(V))},"CallExpression:exit"(Y){isTypeOfVitestFnCall(Y,q,["describe"])&&$.pop()}}}}),RULE_NAME$13="no-focused-tests",n$2=q=>q.type==="Identifier"&&["it","test","describe"].includes(q.name),a$6=q=>q.type==="Identifier"&&q.name==="only",ke=createEslintRule({name:RULE_NAME$13,meta:{type:"problem",docs:{description:"disallow focused tests",recommended:!1},fixable:"code",schema:[{type:"object",properties:{fixable:{type:"boolean",default:!0}},additionalProperties:!1}],messages:{noFocusedTests:"Focused tests are not allowed"}},defaultOptions:[{fixable:!0}],create:q=>{const $=q.options[0]?.fixable;return{ExpressionStatement(Y){if(Y.expression.type==="CallExpression"){const{callee:B}=Y.expression;if(B.type==="MemberExpression"&&n$2(B.object)&&a$6(B.property)&&q.report({node:B.property,messageId:"noFocusedTests",fix:F=>$?F.removeRange([B.property.range[0]-1,B.property.range[1]]):null}),B.type==="TaggedTemplateExpression"){const F=B.tag.type==="MemberExpression"?B.tag.object:null;if(!F)return;F.type==="MemberExpression"&&n$2(F.object)&&a$6(F.property)&&q.report({node:F.property,messageId:"noFocusedTests",fix:W=>$?W.removeRange([F.property.range[0]-1,F.property.range[1]]):null})}}},CallExpression(Y){if(Y.callee.type==="CallExpression"){const{callee:B}=Y.callee;if(B.type==="MemberExpression"&&B.object.type==="MemberExpression"&&n$2(B.object.object)&&a$6(B.object.property)&&B.property.type==="Identifier"&&B.property.name==="each"){const F=B.object.property;q.report({node:B.object.property,messageId:"noFocusedTests",fix:W=>$?W.removeRange([F.range[0]-1,F.range[1]]):null})}}}}}}),RULE_NAME$12="no-conditional-tests",xe=createEslintRule({name:RULE_NAME$12,meta:{type:"problem",docs:{description:"disallow conditional tests",recommended:!1},schema:[],messages:{noConditionalTests:"Avoid using if conditions in a test"}},defaultOptions:[],create(q){return{Identifier:function($){["test","it","describe"].includes($.name)&&$.parent?.parent?.parent?.parent?.type==="IfStatement"&&q.report({node:$,messageId:"noConditionalTests"})}}}}),i$2={typecheck:!1};function parsePluginSettings(q){const $=typeof q.vitest!="object"||q.vitest===null?{}:q.vitest;return{...i$2,...$}}const RULE_NAME$11="expect-expect",ve=createEslintRule({name:RULE_NAME$11,meta:{type:"suggestion",docs:{description:"enforce having expectation in test body",recommended:!1},schema:[{type:"object",properties:{assertFunctionNames:{type:"array",items:{type:"string"}},additionalTestBlockFunctions:{type:"array",items:{type:"string"}}},addit