diff --git a/crates/oxc_linter/data/vitest_compatible_jest_rules.json b/crates/oxc_linter/data/vitest_compatible_jest_rules.json index 80f615091fd88..4d6c5ab4d31fd 100644 --- a/crates/oxc_linter/data/vitest_compatible_jest_rules.json +++ b/crates/oxc_linter/data/vitest_compatible_jest_rules.json @@ -20,6 +20,7 @@ "no-standalone-expect", "no-test-prefixes", "no-test-return-statement", + "no-unneeded-async-expect-function", "prefer-called-with", "prefer-comparison-matcher", "prefer-each", diff --git a/crates/oxc_linter/src/generated/rule_runner_impls.rs b/crates/oxc_linter/src/generated/rule_runner_impls.rs index 70846aa2a1e07..3c87e3fcd64aa 100644 --- a/crates/oxc_linter/src/generated/rule_runner_impls.rs +++ b/crates/oxc_linter/src/generated/rule_runner_impls.rs @@ -2056,6 +2056,13 @@ impl RuleRunner for crate::rules::jest::no_test_return_statement::NoTestReturnSt const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::Run; } +impl RuleRunner + for crate::rules::jest::no_unneeded_async_expect_function::NoUnneededAsyncExpectFunction +{ + const NODE_TYPES: Option<&AstTypesBitset> = None; + const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnJestNode; +} + impl RuleRunner for crate::rules::jest::no_untyped_mock_factory::NoUntypedMockFactory { const NODE_TYPES: Option<&AstTypesBitset> = None; const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnJestNode; @@ -4054,13 +4061,6 @@ impl RuleRunner for crate::rules::vitest::no_import_node_test::NoImportNodeTest const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnce; } -impl RuleRunner - for crate::rules::vitest::no_unneeded_async_expect_function::NoUnneededAsyncExpectFunction -{ - const NODE_TYPES: Option<&AstTypesBitset> = None; - const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnJestNode; -} - impl RuleRunner for crate::rules::vitest::prefer_called_once::PreferCalledOnce { const NODE_TYPES: Option<&AstTypesBitset> = None; const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnJestNode; diff --git a/crates/oxc_linter/src/generated/rules_enum.rs b/crates/oxc_linter/src/generated/rules_enum.rs index 2367cb700331d..bff4a47c38735 100644 --- a/crates/oxc_linter/src/generated/rules_enum.rs +++ b/crates/oxc_linter/src/generated/rules_enum.rs @@ -230,6 +230,7 @@ pub use crate::rules::jest::no_restricted_matchers::NoRestrictedMatchers as Jest pub use crate::rules::jest::no_standalone_expect::NoStandaloneExpect as JestNoStandaloneExpect; pub use crate::rules::jest::no_test_prefixes::NoTestPrefixes as JestNoTestPrefixes; pub use crate::rules::jest::no_test_return_statement::NoTestReturnStatement as JestNoTestReturnStatement; +pub use crate::rules::jest::no_unneeded_async_expect_function::NoUnneededAsyncExpectFunction as JestNoUnneededAsyncExpectFunction; pub use crate::rules::jest::no_untyped_mock_factory::NoUntypedMockFactory as JestNoUntypedMockFactory; pub use crate::rules::jest::padding_around_test_blocks::PaddingAroundTestBlocks as JestPaddingAroundTestBlocks; pub use crate::rules::jest::prefer_called_with::PreferCalledWith as JestPreferCalledWith; @@ -643,7 +644,6 @@ pub use crate::rules::vitest::consistent_vitest_vi::ConsistentVitestVi as Vitest pub use crate::rules::vitest::hoisted_apis_on_top::HoistedApisOnTop as VitestHoistedApisOnTop; pub use crate::rules::vitest::no_conditional_tests::NoConditionalTests as VitestNoConditionalTests; pub use crate::rules::vitest::no_import_node_test::NoImportNodeTest as VitestNoImportNodeTest; -pub use crate::rules::vitest::no_unneeded_async_expect_function::NoUnneededAsyncExpectFunction as VitestNoUnneededAsyncExpectFunction; pub use crate::rules::vitest::prefer_called_once::PreferCalledOnce as VitestPreferCalledOnce; pub use crate::rules::vitest::prefer_called_times::PreferCalledTimes as VitestPreferCalledTimes; pub use crate::rules::vitest::prefer_describe_function_title::PreferDescribeFunctionTitle as VitestPreferDescribeFunctionTitle; @@ -994,6 +994,7 @@ pub enum RuleEnum { JestNoStandaloneExpect(JestNoStandaloneExpect), JestNoTestPrefixes(JestNoTestPrefixes), JestNoTestReturnStatement(JestNoTestReturnStatement), + JestNoUnneededAsyncExpectFunction(JestNoUnneededAsyncExpectFunction), JestNoUntypedMockFactory(JestNoUntypedMockFactory), JestPaddingAroundTestBlocks(JestPaddingAroundTestBlocks), JestPreferCalledWith(JestPreferCalledWith), @@ -1314,7 +1315,6 @@ pub enum RuleEnum { VitestHoistedApisOnTop(VitestHoistedApisOnTop), VitestNoConditionalTests(VitestNoConditionalTests), VitestNoImportNodeTest(VitestNoImportNodeTest), - VitestNoUnneededAsyncExpectFunction(VitestNoUnneededAsyncExpectFunction), VitestPreferCalledOnce(VitestPreferCalledOnce), VitestPreferCalledTimes(VitestPreferCalledTimes), VitestPreferDescribeFunctionTitle(VitestPreferDescribeFunctionTitle), @@ -1664,327 +1664,327 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => 311usize, Self::JestNoTestPrefixes(_) => 312usize, Self::JestNoTestReturnStatement(_) => 313usize, - Self::JestNoUntypedMockFactory(_) => 314usize, - Self::JestPaddingAroundTestBlocks(_) => 315usize, - Self::JestPreferCalledWith(_) => 316usize, - Self::JestPreferComparisonMatcher(_) => 317usize, - Self::JestPreferEach(_) => 318usize, - Self::JestPreferEqualityMatcher(_) => 319usize, - Self::JestPreferExpectResolves(_) => 320usize, - Self::JestPreferHooksInOrder(_) => 321usize, - Self::JestPreferHooksOnTop(_) => 322usize, - Self::JestPreferJestMocked(_) => 323usize, - Self::JestPreferLowercaseTitle(_) => 324usize, - Self::JestPreferMockPromiseShorthand(_) => 325usize, - Self::JestPreferSpyOn(_) => 326usize, - Self::JestPreferStrictEqual(_) => 327usize, - Self::JestPreferToBe(_) => 328usize, - Self::JestPreferToContain(_) => 329usize, - Self::JestPreferToHaveBeenCalled(_) => 330usize, - Self::JestPreferToHaveBeenCalledTimes(_) => 331usize, - Self::JestPreferToHaveLength(_) => 332usize, - Self::JestPreferTodo(_) => 333usize, - Self::JestRequireHook(_) => 334usize, - Self::JestRequireToThrowMessage(_) => 335usize, - Self::JestRequireTopLevelDescribe(_) => 336usize, - Self::JestValidDescribeCallback(_) => 337usize, - Self::JestValidExpect(_) => 338usize, - Self::JestValidTitle(_) => 339usize, - Self::ReactButtonHasType(_) => 340usize, - Self::ReactCheckedRequiresOnchangeOrReadonly(_) => 341usize, - Self::ReactDisplayName(_) => 342usize, - Self::ReactExhaustiveDeps(_) => 343usize, - Self::ReactForbidDomProps(_) => 344usize, - Self::ReactForbidElements(_) => 345usize, - Self::ReactForwardRefUsesRef(_) => 346usize, - Self::ReactIframeMissingSandbox(_) => 347usize, - Self::ReactJsxBooleanValue(_) => 348usize, - Self::ReactJsxCurlyBracePresence(_) => 349usize, - Self::ReactJsxFilenameExtension(_) => 350usize, - Self::ReactJsxFragments(_) => 351usize, - Self::ReactJsxHandlerNames(_) => 352usize, - Self::ReactJsxKey(_) => 353usize, - Self::ReactJsxMaxDepth(_) => 354usize, - Self::ReactJsxNoCommentTextnodes(_) => 355usize, - Self::ReactJsxNoDuplicateProps(_) => 356usize, - Self::ReactJsxNoScriptUrl(_) => 357usize, - Self::ReactJsxNoTargetBlank(_) => 358usize, - Self::ReactJsxNoUndef(_) => 359usize, - Self::ReactJsxNoUselessFragment(_) => 360usize, - Self::ReactJsxPascalCase(_) => 361usize, - Self::ReactJsxPropsNoSpreadMulti(_) => 362usize, - Self::ReactJsxPropsNoSpreading(_) => 363usize, - Self::ReactNoArrayIndexKey(_) => 364usize, - Self::ReactNoChildrenProp(_) => 365usize, - Self::ReactNoDanger(_) => 366usize, - Self::ReactNoDangerWithChildren(_) => 367usize, - Self::ReactNoDidMountSetState(_) => 368usize, - Self::ReactNoDirectMutationState(_) => 369usize, - Self::ReactNoFindDomNode(_) => 370usize, - Self::ReactNoIsMounted(_) => 371usize, - Self::ReactNoNamespace(_) => 372usize, - Self::ReactNoRedundantShouldComponentUpdate(_) => 373usize, - Self::ReactNoRenderReturnValue(_) => 374usize, - Self::ReactNoSetState(_) => 375usize, - Self::ReactNoStringRefs(_) => 376usize, - Self::ReactNoThisInSfc(_) => 377usize, - Self::ReactNoUnescapedEntities(_) => 378usize, - Self::ReactNoUnknownProperty(_) => 379usize, - Self::ReactNoUnsafe(_) => 380usize, - Self::ReactNoWillUpdateSetState(_) => 381usize, - Self::ReactOnlyExportComponents(_) => 382usize, - Self::ReactPreferEs6Class(_) => 383usize, - Self::ReactReactInJsxScope(_) => 384usize, - Self::ReactRequireRenderReturn(_) => 385usize, - Self::ReactRulesOfHooks(_) => 386usize, - Self::ReactSelfClosingComp(_) => 387usize, - Self::ReactStateInConstructor(_) => 388usize, - Self::ReactStylePropObject(_) => 389usize, - Self::ReactVoidDomElementsNoChildren(_) => 390usize, - Self::ReactPerfJsxNoJsxAsProp(_) => 391usize, - Self::ReactPerfJsxNoNewArrayAsProp(_) => 392usize, - Self::ReactPerfJsxNoNewFunctionAsProp(_) => 393usize, - Self::ReactPerfJsxNoNewObjectAsProp(_) => 394usize, - Self::UnicornCatchErrorName(_) => 395usize, - Self::UnicornConsistentAssert(_) => 396usize, - Self::UnicornConsistentDateClone(_) => 397usize, - Self::UnicornConsistentEmptyArraySpread(_) => 398usize, - Self::UnicornConsistentExistenceIndexCheck(_) => 399usize, - Self::UnicornConsistentFunctionScoping(_) => 400usize, - Self::UnicornEmptyBraceSpaces(_) => 401usize, - Self::UnicornErrorMessage(_) => 402usize, - Self::UnicornEscapeCase(_) => 403usize, - Self::UnicornExplicitLengthCheck(_) => 404usize, - Self::UnicornFilenameCase(_) => 405usize, - Self::UnicornNewForBuiltins(_) => 406usize, - Self::UnicornNoAbusiveEslintDisable(_) => 407usize, - Self::UnicornNoAccessorRecursion(_) => 408usize, - Self::UnicornNoAnonymousDefaultExport(_) => 409usize, - Self::UnicornNoArrayCallbackReference(_) => 410usize, - Self::UnicornNoArrayForEach(_) => 411usize, - Self::UnicornNoArrayMethodThisArgument(_) => 412usize, - Self::UnicornNoArrayReduce(_) => 413usize, - Self::UnicornNoArrayReverse(_) => 414usize, - Self::UnicornNoArraySort(_) => 415usize, - Self::UnicornNoAwaitExpressionMember(_) => 416usize, - Self::UnicornNoAwaitInPromiseMethods(_) => 417usize, - Self::UnicornNoConsoleSpaces(_) => 418usize, - Self::UnicornNoDocumentCookie(_) => 419usize, - Self::UnicornNoEmptyFile(_) => 420usize, - Self::UnicornNoHexEscape(_) => 421usize, - Self::UnicornNoImmediateMutation(_) => 422usize, - Self::UnicornNoInstanceofArray(_) => 423usize, - Self::UnicornNoInstanceofBuiltins(_) => 424usize, - Self::UnicornNoInvalidFetchOptions(_) => 425usize, - Self::UnicornNoInvalidRemoveEventListener(_) => 426usize, - Self::UnicornNoLengthAsSliceEnd(_) => 427usize, - Self::UnicornNoLonelyIf(_) => 428usize, - Self::UnicornNoMagicArrayFlatDepth(_) => 429usize, - Self::UnicornNoNegationInEqualityCheck(_) => 430usize, - Self::UnicornNoNestedTernary(_) => 431usize, - Self::UnicornNoNewArray(_) => 432usize, - Self::UnicornNoNewBuffer(_) => 433usize, - Self::UnicornNoNull(_) => 434usize, - Self::UnicornNoObjectAsDefaultParameter(_) => 435usize, - Self::UnicornNoProcessExit(_) => 436usize, - Self::UnicornNoSinglePromiseInPromiseMethods(_) => 437usize, - Self::UnicornNoStaticOnlyClass(_) => 438usize, - Self::UnicornNoThenable(_) => 439usize, - Self::UnicornNoThisAssignment(_) => 440usize, - Self::UnicornNoTypeofUndefined(_) => 441usize, - Self::UnicornNoUnnecessaryArrayFlatDepth(_) => 442usize, - Self::UnicornNoUnnecessaryArraySpliceCount(_) => 443usize, - Self::UnicornNoUnnecessaryAwait(_) => 444usize, - Self::UnicornNoUnnecessarySliceEnd(_) => 445usize, - Self::UnicornNoUnreadableArrayDestructuring(_) => 446usize, - Self::UnicornNoUnreadableIife(_) => 447usize, - Self::UnicornNoUselessCollectionArgument(_) => 448usize, - Self::UnicornNoUselessErrorCaptureStackTrace(_) => 449usize, - Self::UnicornNoUselessFallbackInSpread(_) => 450usize, - Self::UnicornNoUselessLengthCheck(_) => 451usize, - Self::UnicornNoUselessPromiseResolveReject(_) => 452usize, - Self::UnicornNoUselessSpread(_) => 453usize, - Self::UnicornNoUselessSwitchCase(_) => 454usize, - Self::UnicornNoUselessUndefined(_) => 455usize, - Self::UnicornNoZeroFractions(_) => 456usize, - Self::UnicornNumberLiteralCase(_) => 457usize, - Self::UnicornNumericSeparatorsStyle(_) => 458usize, - Self::UnicornPreferAddEventListener(_) => 459usize, - Self::UnicornPreferArrayFind(_) => 460usize, - Self::UnicornPreferArrayFlat(_) => 461usize, - Self::UnicornPreferArrayFlatMap(_) => 462usize, - Self::UnicornPreferArrayIndexOf(_) => 463usize, - Self::UnicornPreferArraySome(_) => 464usize, - Self::UnicornPreferAt(_) => 465usize, - Self::UnicornPreferBigintLiterals(_) => 466usize, - Self::UnicornPreferBlobReadingMethods(_) => 467usize, - Self::UnicornPreferClassFields(_) => 468usize, - Self::UnicornPreferClasslistToggle(_) => 469usize, - Self::UnicornPreferCodePoint(_) => 470usize, - Self::UnicornPreferDateNow(_) => 471usize, - Self::UnicornPreferDefaultParameters(_) => 472usize, - Self::UnicornPreferDomNodeAppend(_) => 473usize, - Self::UnicornPreferDomNodeDataset(_) => 474usize, - Self::UnicornPreferDomNodeRemove(_) => 475usize, - Self::UnicornPreferDomNodeTextContent(_) => 476usize, - Self::UnicornPreferEventTarget(_) => 477usize, - Self::UnicornPreferGlobalThis(_) => 478usize, - Self::UnicornPreferIncludes(_) => 479usize, - Self::UnicornPreferKeyboardEventKey(_) => 480usize, - Self::UnicornPreferLogicalOperatorOverTernary(_) => 481usize, - Self::UnicornPreferMathMinMax(_) => 482usize, - Self::UnicornPreferMathTrunc(_) => 483usize, - Self::UnicornPreferModernDomApis(_) => 484usize, - Self::UnicornPreferModernMathApis(_) => 485usize, - Self::UnicornPreferNativeCoercionFunctions(_) => 486usize, - Self::UnicornPreferNegativeIndex(_) => 487usize, - Self::UnicornPreferNodeProtocol(_) => 488usize, - Self::UnicornPreferNumberProperties(_) => 489usize, - Self::UnicornPreferObjectFromEntries(_) => 490usize, - Self::UnicornPreferOptionalCatchBinding(_) => 491usize, - Self::UnicornPreferPrototypeMethods(_) => 492usize, - Self::UnicornPreferQuerySelector(_) => 493usize, - Self::UnicornPreferReflectApply(_) => 494usize, - Self::UnicornPreferRegexpTest(_) => 495usize, - Self::UnicornPreferResponseStaticJson(_) => 496usize, - Self::UnicornPreferSetHas(_) => 497usize, - Self::UnicornPreferSetSize(_) => 498usize, - Self::UnicornPreferSpread(_) => 499usize, - Self::UnicornPreferStringRaw(_) => 500usize, - Self::UnicornPreferStringReplaceAll(_) => 501usize, - Self::UnicornPreferStringSlice(_) => 502usize, - Self::UnicornPreferStringStartsEndsWith(_) => 503usize, - Self::UnicornPreferStringTrimStartEnd(_) => 504usize, - Self::UnicornPreferStructuredClone(_) => 505usize, - Self::UnicornPreferTopLevelAwait(_) => 506usize, - Self::UnicornPreferTypeError(_) => 507usize, - Self::UnicornRequireArrayJoinSeparator(_) => 508usize, - Self::UnicornRequireModuleAttributes(_) => 509usize, - Self::UnicornRequireModuleSpecifiers(_) => 510usize, - Self::UnicornRequireNumberToFixedDigitsArgument(_) => 511usize, - Self::UnicornRequirePostMessageTargetOrigin(_) => 512usize, - Self::UnicornSwitchCaseBraces(_) => 513usize, - Self::UnicornTextEncodingIdentifierCase(_) => 514usize, - Self::UnicornThrowNewError(_) => 515usize, - Self::JsxA11YAltText(_) => 516usize, - Self::JsxA11YAnchorAmbiguousText(_) => 517usize, - Self::JsxA11YAnchorHasContent(_) => 518usize, - Self::JsxA11YAnchorIsValid(_) => 519usize, - Self::JsxA11YAriaActivedescendantHasTabindex(_) => 520usize, - Self::JsxA11YAriaProps(_) => 521usize, - Self::JsxA11YAriaProptypes(_) => 522usize, - Self::JsxA11YAriaRole(_) => 523usize, - Self::JsxA11YAriaUnsupportedElements(_) => 524usize, - Self::JsxA11YAutocompleteValid(_) => 525usize, - Self::JsxA11YClickEventsHaveKeyEvents(_) => 526usize, - Self::JsxA11YHeadingHasContent(_) => 527usize, - Self::JsxA11YHtmlHasLang(_) => 528usize, - Self::JsxA11YIframeHasTitle(_) => 529usize, - Self::JsxA11YImgRedundantAlt(_) => 530usize, - Self::JsxA11YLabelHasAssociatedControl(_) => 531usize, - Self::JsxA11YLang(_) => 532usize, - Self::JsxA11YMediaHasCaption(_) => 533usize, - Self::JsxA11YMouseEventsHaveKeyEvents(_) => 534usize, - Self::JsxA11YNoAccessKey(_) => 535usize, - Self::JsxA11YNoAriaHiddenOnFocusable(_) => 536usize, - Self::JsxA11YNoAutofocus(_) => 537usize, - Self::JsxA11YNoDistractingElements(_) => 538usize, - Self::JsxA11YNoNoninteractiveTabindex(_) => 539usize, - Self::JsxA11YNoRedundantRoles(_) => 540usize, - Self::JsxA11YNoStaticElementInteractions(_) => 541usize, - Self::JsxA11YPreferTagOverRole(_) => 542usize, - Self::JsxA11YRoleHasRequiredAriaProps(_) => 543usize, - Self::JsxA11YRoleSupportsAriaProps(_) => 544usize, - Self::JsxA11YScope(_) => 545usize, - Self::JsxA11YTabindexNoPositive(_) => 546usize, - Self::OxcApproxConstant(_) => 547usize, - Self::OxcBadArrayMethodOnArguments(_) => 548usize, - Self::OxcBadBitwiseOperator(_) => 549usize, - Self::OxcBadCharAtComparison(_) => 550usize, - Self::OxcBadComparisonSequence(_) => 551usize, - Self::OxcBadMinMaxFunc(_) => 552usize, - Self::OxcBadObjectLiteralComparison(_) => 553usize, - Self::OxcBadReplaceAllArg(_) => 554usize, - Self::OxcBranchesSharingCode(_) => 555usize, - Self::OxcConstComparisons(_) => 556usize, - Self::OxcDoubleComparisons(_) => 557usize, - Self::OxcErasingOp(_) => 558usize, - Self::OxcMisrefactoredAssignOp(_) => 559usize, - Self::OxcMissingThrow(_) => 560usize, - Self::OxcNoAccumulatingSpread(_) => 561usize, - Self::OxcNoAsyncAwait(_) => 562usize, - Self::OxcNoAsyncEndpointHandlers(_) => 563usize, - Self::OxcNoBarrelFile(_) => 564usize, - Self::OxcNoConstEnum(_) => 565usize, - Self::OxcNoMapSpread(_) => 566usize, - Self::OxcNoOptionalChaining(_) => 567usize, - Self::OxcNoRestSpreadProperties(_) => 568usize, - Self::OxcNoThisInExportedFunction(_) => 569usize, - Self::OxcNumberArgOutOfRange(_) => 570usize, - Self::OxcOnlyUsedInRecursion(_) => 571usize, - Self::OxcUninvokedArrayCallback(_) => 572usize, - Self::NextjsGoogleFontDisplay(_) => 573usize, - Self::NextjsGoogleFontPreconnect(_) => 574usize, - Self::NextjsInlineScriptId(_) => 575usize, - Self::NextjsNextScriptForGa(_) => 576usize, - Self::NextjsNoAssignModuleVariable(_) => 577usize, - Self::NextjsNoAsyncClientComponent(_) => 578usize, - Self::NextjsNoBeforeInteractiveScriptOutsideDocument(_) => 579usize, - Self::NextjsNoCssTags(_) => 580usize, - Self::NextjsNoDocumentImportInPage(_) => 581usize, - Self::NextjsNoDuplicateHead(_) => 582usize, - Self::NextjsNoHeadElement(_) => 583usize, - Self::NextjsNoHeadImportInDocument(_) => 584usize, - Self::NextjsNoHtmlLinkForPages(_) => 585usize, - Self::NextjsNoImgElement(_) => 586usize, - Self::NextjsNoPageCustomFont(_) => 587usize, - Self::NextjsNoScriptComponentInHead(_) => 588usize, - Self::NextjsNoStyledJsxInDocument(_) => 589usize, - Self::NextjsNoSyncScripts(_) => 590usize, - Self::NextjsNoTitleInDocumentHead(_) => 591usize, - Self::NextjsNoTypos(_) => 592usize, - Self::NextjsNoUnwantedPolyfillio(_) => 593usize, - Self::JsdocCheckAccess(_) => 594usize, - Self::JsdocCheckPropertyNames(_) => 595usize, - Self::JsdocCheckTagNames(_) => 596usize, - Self::JsdocEmptyTags(_) => 597usize, - Self::JsdocImplementsOnClasses(_) => 598usize, - Self::JsdocNoDefaults(_) => 599usize, - Self::JsdocRequireParam(_) => 600usize, - Self::JsdocRequireParamDescription(_) => 601usize, - Self::JsdocRequireParamName(_) => 602usize, - Self::JsdocRequireParamType(_) => 603usize, - Self::JsdocRequireProperty(_) => 604usize, - Self::JsdocRequirePropertyDescription(_) => 605usize, - Self::JsdocRequirePropertyName(_) => 606usize, - Self::JsdocRequirePropertyType(_) => 607usize, - Self::JsdocRequireReturns(_) => 608usize, - Self::JsdocRequireReturnsDescription(_) => 609usize, - Self::JsdocRequireReturnsType(_) => 610usize, - Self::JsdocRequireYields(_) => 611usize, - Self::PromiseAlwaysReturn(_) => 612usize, - Self::PromiseAvoidNew(_) => 613usize, - Self::PromiseCatchOrReturn(_) => 614usize, - Self::PromiseNoCallbackInPromise(_) => 615usize, - Self::PromiseNoMultipleResolved(_) => 616usize, - Self::PromiseNoNesting(_) => 617usize, - Self::PromiseNoNewStatics(_) => 618usize, - Self::PromiseNoPromiseInCallback(_) => 619usize, - Self::PromiseNoReturnInFinally(_) => 620usize, - Self::PromiseNoReturnWrap(_) => 621usize, - Self::PromiseParamNames(_) => 622usize, - Self::PromisePreferAwaitToCallbacks(_) => 623usize, - Self::PromisePreferAwaitToThen(_) => 624usize, - Self::PromisePreferCatch(_) => 625usize, - Self::PromiseSpecOnly(_) => 626usize, - Self::PromiseValidParams(_) => 627usize, - Self::VitestConsistentEachFor(_) => 628usize, - Self::VitestConsistentTestFilename(_) => 629usize, - Self::VitestConsistentVitestVi(_) => 630usize, - Self::VitestHoistedApisOnTop(_) => 631usize, - Self::VitestNoConditionalTests(_) => 632usize, - Self::VitestNoImportNodeTest(_) => 633usize, - Self::VitestNoUnneededAsyncExpectFunction(_) => 634usize, + Self::JestNoUnneededAsyncExpectFunction(_) => 314usize, + Self::JestNoUntypedMockFactory(_) => 315usize, + Self::JestPaddingAroundTestBlocks(_) => 316usize, + Self::JestPreferCalledWith(_) => 317usize, + Self::JestPreferComparisonMatcher(_) => 318usize, + Self::JestPreferEach(_) => 319usize, + Self::JestPreferEqualityMatcher(_) => 320usize, + Self::JestPreferExpectResolves(_) => 321usize, + Self::JestPreferHooksInOrder(_) => 322usize, + Self::JestPreferHooksOnTop(_) => 323usize, + Self::JestPreferJestMocked(_) => 324usize, + Self::JestPreferLowercaseTitle(_) => 325usize, + Self::JestPreferMockPromiseShorthand(_) => 326usize, + Self::JestPreferSpyOn(_) => 327usize, + Self::JestPreferStrictEqual(_) => 328usize, + Self::JestPreferToBe(_) => 329usize, + Self::JestPreferToContain(_) => 330usize, + Self::JestPreferToHaveBeenCalled(_) => 331usize, + Self::JestPreferToHaveBeenCalledTimes(_) => 332usize, + Self::JestPreferToHaveLength(_) => 333usize, + Self::JestPreferTodo(_) => 334usize, + Self::JestRequireHook(_) => 335usize, + Self::JestRequireToThrowMessage(_) => 336usize, + Self::JestRequireTopLevelDescribe(_) => 337usize, + Self::JestValidDescribeCallback(_) => 338usize, + Self::JestValidExpect(_) => 339usize, + Self::JestValidTitle(_) => 340usize, + Self::ReactButtonHasType(_) => 341usize, + Self::ReactCheckedRequiresOnchangeOrReadonly(_) => 342usize, + Self::ReactDisplayName(_) => 343usize, + Self::ReactExhaustiveDeps(_) => 344usize, + Self::ReactForbidDomProps(_) => 345usize, + Self::ReactForbidElements(_) => 346usize, + Self::ReactForwardRefUsesRef(_) => 347usize, + Self::ReactIframeMissingSandbox(_) => 348usize, + Self::ReactJsxBooleanValue(_) => 349usize, + Self::ReactJsxCurlyBracePresence(_) => 350usize, + Self::ReactJsxFilenameExtension(_) => 351usize, + Self::ReactJsxFragments(_) => 352usize, + Self::ReactJsxHandlerNames(_) => 353usize, + Self::ReactJsxKey(_) => 354usize, + Self::ReactJsxMaxDepth(_) => 355usize, + Self::ReactJsxNoCommentTextnodes(_) => 356usize, + Self::ReactJsxNoDuplicateProps(_) => 357usize, + Self::ReactJsxNoScriptUrl(_) => 358usize, + Self::ReactJsxNoTargetBlank(_) => 359usize, + Self::ReactJsxNoUndef(_) => 360usize, + Self::ReactJsxNoUselessFragment(_) => 361usize, + Self::ReactJsxPascalCase(_) => 362usize, + Self::ReactJsxPropsNoSpreadMulti(_) => 363usize, + Self::ReactJsxPropsNoSpreading(_) => 364usize, + Self::ReactNoArrayIndexKey(_) => 365usize, + Self::ReactNoChildrenProp(_) => 366usize, + Self::ReactNoDanger(_) => 367usize, + Self::ReactNoDangerWithChildren(_) => 368usize, + Self::ReactNoDidMountSetState(_) => 369usize, + Self::ReactNoDirectMutationState(_) => 370usize, + Self::ReactNoFindDomNode(_) => 371usize, + Self::ReactNoIsMounted(_) => 372usize, + Self::ReactNoNamespace(_) => 373usize, + Self::ReactNoRedundantShouldComponentUpdate(_) => 374usize, + Self::ReactNoRenderReturnValue(_) => 375usize, + Self::ReactNoSetState(_) => 376usize, + Self::ReactNoStringRefs(_) => 377usize, + Self::ReactNoThisInSfc(_) => 378usize, + Self::ReactNoUnescapedEntities(_) => 379usize, + Self::ReactNoUnknownProperty(_) => 380usize, + Self::ReactNoUnsafe(_) => 381usize, + Self::ReactNoWillUpdateSetState(_) => 382usize, + Self::ReactOnlyExportComponents(_) => 383usize, + Self::ReactPreferEs6Class(_) => 384usize, + Self::ReactReactInJsxScope(_) => 385usize, + Self::ReactRequireRenderReturn(_) => 386usize, + Self::ReactRulesOfHooks(_) => 387usize, + Self::ReactSelfClosingComp(_) => 388usize, + Self::ReactStateInConstructor(_) => 389usize, + Self::ReactStylePropObject(_) => 390usize, + Self::ReactVoidDomElementsNoChildren(_) => 391usize, + Self::ReactPerfJsxNoJsxAsProp(_) => 392usize, + Self::ReactPerfJsxNoNewArrayAsProp(_) => 393usize, + Self::ReactPerfJsxNoNewFunctionAsProp(_) => 394usize, + Self::ReactPerfJsxNoNewObjectAsProp(_) => 395usize, + Self::UnicornCatchErrorName(_) => 396usize, + Self::UnicornConsistentAssert(_) => 397usize, + Self::UnicornConsistentDateClone(_) => 398usize, + Self::UnicornConsistentEmptyArraySpread(_) => 399usize, + Self::UnicornConsistentExistenceIndexCheck(_) => 400usize, + Self::UnicornConsistentFunctionScoping(_) => 401usize, + Self::UnicornEmptyBraceSpaces(_) => 402usize, + Self::UnicornErrorMessage(_) => 403usize, + Self::UnicornEscapeCase(_) => 404usize, + Self::UnicornExplicitLengthCheck(_) => 405usize, + Self::UnicornFilenameCase(_) => 406usize, + Self::UnicornNewForBuiltins(_) => 407usize, + Self::UnicornNoAbusiveEslintDisable(_) => 408usize, + Self::UnicornNoAccessorRecursion(_) => 409usize, + Self::UnicornNoAnonymousDefaultExport(_) => 410usize, + Self::UnicornNoArrayCallbackReference(_) => 411usize, + Self::UnicornNoArrayForEach(_) => 412usize, + Self::UnicornNoArrayMethodThisArgument(_) => 413usize, + Self::UnicornNoArrayReduce(_) => 414usize, + Self::UnicornNoArrayReverse(_) => 415usize, + Self::UnicornNoArraySort(_) => 416usize, + Self::UnicornNoAwaitExpressionMember(_) => 417usize, + Self::UnicornNoAwaitInPromiseMethods(_) => 418usize, + Self::UnicornNoConsoleSpaces(_) => 419usize, + Self::UnicornNoDocumentCookie(_) => 420usize, + Self::UnicornNoEmptyFile(_) => 421usize, + Self::UnicornNoHexEscape(_) => 422usize, + Self::UnicornNoImmediateMutation(_) => 423usize, + Self::UnicornNoInstanceofArray(_) => 424usize, + Self::UnicornNoInstanceofBuiltins(_) => 425usize, + Self::UnicornNoInvalidFetchOptions(_) => 426usize, + Self::UnicornNoInvalidRemoveEventListener(_) => 427usize, + Self::UnicornNoLengthAsSliceEnd(_) => 428usize, + Self::UnicornNoLonelyIf(_) => 429usize, + Self::UnicornNoMagicArrayFlatDepth(_) => 430usize, + Self::UnicornNoNegationInEqualityCheck(_) => 431usize, + Self::UnicornNoNestedTernary(_) => 432usize, + Self::UnicornNoNewArray(_) => 433usize, + Self::UnicornNoNewBuffer(_) => 434usize, + Self::UnicornNoNull(_) => 435usize, + Self::UnicornNoObjectAsDefaultParameter(_) => 436usize, + Self::UnicornNoProcessExit(_) => 437usize, + Self::UnicornNoSinglePromiseInPromiseMethods(_) => 438usize, + Self::UnicornNoStaticOnlyClass(_) => 439usize, + Self::UnicornNoThenable(_) => 440usize, + Self::UnicornNoThisAssignment(_) => 441usize, + Self::UnicornNoTypeofUndefined(_) => 442usize, + Self::UnicornNoUnnecessaryArrayFlatDepth(_) => 443usize, + Self::UnicornNoUnnecessaryArraySpliceCount(_) => 444usize, + Self::UnicornNoUnnecessaryAwait(_) => 445usize, + Self::UnicornNoUnnecessarySliceEnd(_) => 446usize, + Self::UnicornNoUnreadableArrayDestructuring(_) => 447usize, + Self::UnicornNoUnreadableIife(_) => 448usize, + Self::UnicornNoUselessCollectionArgument(_) => 449usize, + Self::UnicornNoUselessErrorCaptureStackTrace(_) => 450usize, + Self::UnicornNoUselessFallbackInSpread(_) => 451usize, + Self::UnicornNoUselessLengthCheck(_) => 452usize, + Self::UnicornNoUselessPromiseResolveReject(_) => 453usize, + Self::UnicornNoUselessSpread(_) => 454usize, + Self::UnicornNoUselessSwitchCase(_) => 455usize, + Self::UnicornNoUselessUndefined(_) => 456usize, + Self::UnicornNoZeroFractions(_) => 457usize, + Self::UnicornNumberLiteralCase(_) => 458usize, + Self::UnicornNumericSeparatorsStyle(_) => 459usize, + Self::UnicornPreferAddEventListener(_) => 460usize, + Self::UnicornPreferArrayFind(_) => 461usize, + Self::UnicornPreferArrayFlat(_) => 462usize, + Self::UnicornPreferArrayFlatMap(_) => 463usize, + Self::UnicornPreferArrayIndexOf(_) => 464usize, + Self::UnicornPreferArraySome(_) => 465usize, + Self::UnicornPreferAt(_) => 466usize, + Self::UnicornPreferBigintLiterals(_) => 467usize, + Self::UnicornPreferBlobReadingMethods(_) => 468usize, + Self::UnicornPreferClassFields(_) => 469usize, + Self::UnicornPreferClasslistToggle(_) => 470usize, + Self::UnicornPreferCodePoint(_) => 471usize, + Self::UnicornPreferDateNow(_) => 472usize, + Self::UnicornPreferDefaultParameters(_) => 473usize, + Self::UnicornPreferDomNodeAppend(_) => 474usize, + Self::UnicornPreferDomNodeDataset(_) => 475usize, + Self::UnicornPreferDomNodeRemove(_) => 476usize, + Self::UnicornPreferDomNodeTextContent(_) => 477usize, + Self::UnicornPreferEventTarget(_) => 478usize, + Self::UnicornPreferGlobalThis(_) => 479usize, + Self::UnicornPreferIncludes(_) => 480usize, + Self::UnicornPreferKeyboardEventKey(_) => 481usize, + Self::UnicornPreferLogicalOperatorOverTernary(_) => 482usize, + Self::UnicornPreferMathMinMax(_) => 483usize, + Self::UnicornPreferMathTrunc(_) => 484usize, + Self::UnicornPreferModernDomApis(_) => 485usize, + Self::UnicornPreferModernMathApis(_) => 486usize, + Self::UnicornPreferNativeCoercionFunctions(_) => 487usize, + Self::UnicornPreferNegativeIndex(_) => 488usize, + Self::UnicornPreferNodeProtocol(_) => 489usize, + Self::UnicornPreferNumberProperties(_) => 490usize, + Self::UnicornPreferObjectFromEntries(_) => 491usize, + Self::UnicornPreferOptionalCatchBinding(_) => 492usize, + Self::UnicornPreferPrototypeMethods(_) => 493usize, + Self::UnicornPreferQuerySelector(_) => 494usize, + Self::UnicornPreferReflectApply(_) => 495usize, + Self::UnicornPreferRegexpTest(_) => 496usize, + Self::UnicornPreferResponseStaticJson(_) => 497usize, + Self::UnicornPreferSetHas(_) => 498usize, + Self::UnicornPreferSetSize(_) => 499usize, + Self::UnicornPreferSpread(_) => 500usize, + Self::UnicornPreferStringRaw(_) => 501usize, + Self::UnicornPreferStringReplaceAll(_) => 502usize, + Self::UnicornPreferStringSlice(_) => 503usize, + Self::UnicornPreferStringStartsEndsWith(_) => 504usize, + Self::UnicornPreferStringTrimStartEnd(_) => 505usize, + Self::UnicornPreferStructuredClone(_) => 506usize, + Self::UnicornPreferTopLevelAwait(_) => 507usize, + Self::UnicornPreferTypeError(_) => 508usize, + Self::UnicornRequireArrayJoinSeparator(_) => 509usize, + Self::UnicornRequireModuleAttributes(_) => 510usize, + Self::UnicornRequireModuleSpecifiers(_) => 511usize, + Self::UnicornRequireNumberToFixedDigitsArgument(_) => 512usize, + Self::UnicornRequirePostMessageTargetOrigin(_) => 513usize, + Self::UnicornSwitchCaseBraces(_) => 514usize, + Self::UnicornTextEncodingIdentifierCase(_) => 515usize, + Self::UnicornThrowNewError(_) => 516usize, + Self::JsxA11YAltText(_) => 517usize, + Self::JsxA11YAnchorAmbiguousText(_) => 518usize, + Self::JsxA11YAnchorHasContent(_) => 519usize, + Self::JsxA11YAnchorIsValid(_) => 520usize, + Self::JsxA11YAriaActivedescendantHasTabindex(_) => 521usize, + Self::JsxA11YAriaProps(_) => 522usize, + Self::JsxA11YAriaProptypes(_) => 523usize, + Self::JsxA11YAriaRole(_) => 524usize, + Self::JsxA11YAriaUnsupportedElements(_) => 525usize, + Self::JsxA11YAutocompleteValid(_) => 526usize, + Self::JsxA11YClickEventsHaveKeyEvents(_) => 527usize, + Self::JsxA11YHeadingHasContent(_) => 528usize, + Self::JsxA11YHtmlHasLang(_) => 529usize, + Self::JsxA11YIframeHasTitle(_) => 530usize, + Self::JsxA11YImgRedundantAlt(_) => 531usize, + Self::JsxA11YLabelHasAssociatedControl(_) => 532usize, + Self::JsxA11YLang(_) => 533usize, + Self::JsxA11YMediaHasCaption(_) => 534usize, + Self::JsxA11YMouseEventsHaveKeyEvents(_) => 535usize, + Self::JsxA11YNoAccessKey(_) => 536usize, + Self::JsxA11YNoAriaHiddenOnFocusable(_) => 537usize, + Self::JsxA11YNoAutofocus(_) => 538usize, + Self::JsxA11YNoDistractingElements(_) => 539usize, + Self::JsxA11YNoNoninteractiveTabindex(_) => 540usize, + Self::JsxA11YNoRedundantRoles(_) => 541usize, + Self::JsxA11YNoStaticElementInteractions(_) => 542usize, + Self::JsxA11YPreferTagOverRole(_) => 543usize, + Self::JsxA11YRoleHasRequiredAriaProps(_) => 544usize, + Self::JsxA11YRoleSupportsAriaProps(_) => 545usize, + Self::JsxA11YScope(_) => 546usize, + Self::JsxA11YTabindexNoPositive(_) => 547usize, + Self::OxcApproxConstant(_) => 548usize, + Self::OxcBadArrayMethodOnArguments(_) => 549usize, + Self::OxcBadBitwiseOperator(_) => 550usize, + Self::OxcBadCharAtComparison(_) => 551usize, + Self::OxcBadComparisonSequence(_) => 552usize, + Self::OxcBadMinMaxFunc(_) => 553usize, + Self::OxcBadObjectLiteralComparison(_) => 554usize, + Self::OxcBadReplaceAllArg(_) => 555usize, + Self::OxcBranchesSharingCode(_) => 556usize, + Self::OxcConstComparisons(_) => 557usize, + Self::OxcDoubleComparisons(_) => 558usize, + Self::OxcErasingOp(_) => 559usize, + Self::OxcMisrefactoredAssignOp(_) => 560usize, + Self::OxcMissingThrow(_) => 561usize, + Self::OxcNoAccumulatingSpread(_) => 562usize, + Self::OxcNoAsyncAwait(_) => 563usize, + Self::OxcNoAsyncEndpointHandlers(_) => 564usize, + Self::OxcNoBarrelFile(_) => 565usize, + Self::OxcNoConstEnum(_) => 566usize, + Self::OxcNoMapSpread(_) => 567usize, + Self::OxcNoOptionalChaining(_) => 568usize, + Self::OxcNoRestSpreadProperties(_) => 569usize, + Self::OxcNoThisInExportedFunction(_) => 570usize, + Self::OxcNumberArgOutOfRange(_) => 571usize, + Self::OxcOnlyUsedInRecursion(_) => 572usize, + Self::OxcUninvokedArrayCallback(_) => 573usize, + Self::NextjsGoogleFontDisplay(_) => 574usize, + Self::NextjsGoogleFontPreconnect(_) => 575usize, + Self::NextjsInlineScriptId(_) => 576usize, + Self::NextjsNextScriptForGa(_) => 577usize, + Self::NextjsNoAssignModuleVariable(_) => 578usize, + Self::NextjsNoAsyncClientComponent(_) => 579usize, + Self::NextjsNoBeforeInteractiveScriptOutsideDocument(_) => 580usize, + Self::NextjsNoCssTags(_) => 581usize, + Self::NextjsNoDocumentImportInPage(_) => 582usize, + Self::NextjsNoDuplicateHead(_) => 583usize, + Self::NextjsNoHeadElement(_) => 584usize, + Self::NextjsNoHeadImportInDocument(_) => 585usize, + Self::NextjsNoHtmlLinkForPages(_) => 586usize, + Self::NextjsNoImgElement(_) => 587usize, + Self::NextjsNoPageCustomFont(_) => 588usize, + Self::NextjsNoScriptComponentInHead(_) => 589usize, + Self::NextjsNoStyledJsxInDocument(_) => 590usize, + Self::NextjsNoSyncScripts(_) => 591usize, + Self::NextjsNoTitleInDocumentHead(_) => 592usize, + Self::NextjsNoTypos(_) => 593usize, + Self::NextjsNoUnwantedPolyfillio(_) => 594usize, + Self::JsdocCheckAccess(_) => 595usize, + Self::JsdocCheckPropertyNames(_) => 596usize, + Self::JsdocCheckTagNames(_) => 597usize, + Self::JsdocEmptyTags(_) => 598usize, + Self::JsdocImplementsOnClasses(_) => 599usize, + Self::JsdocNoDefaults(_) => 600usize, + Self::JsdocRequireParam(_) => 601usize, + Self::JsdocRequireParamDescription(_) => 602usize, + Self::JsdocRequireParamName(_) => 603usize, + Self::JsdocRequireParamType(_) => 604usize, + Self::JsdocRequireProperty(_) => 605usize, + Self::JsdocRequirePropertyDescription(_) => 606usize, + Self::JsdocRequirePropertyName(_) => 607usize, + Self::JsdocRequirePropertyType(_) => 608usize, + Self::JsdocRequireReturns(_) => 609usize, + Self::JsdocRequireReturnsDescription(_) => 610usize, + Self::JsdocRequireReturnsType(_) => 611usize, + Self::JsdocRequireYields(_) => 612usize, + Self::PromiseAlwaysReturn(_) => 613usize, + Self::PromiseAvoidNew(_) => 614usize, + Self::PromiseCatchOrReturn(_) => 615usize, + Self::PromiseNoCallbackInPromise(_) => 616usize, + Self::PromiseNoMultipleResolved(_) => 617usize, + Self::PromiseNoNesting(_) => 618usize, + Self::PromiseNoNewStatics(_) => 619usize, + Self::PromiseNoPromiseInCallback(_) => 620usize, + Self::PromiseNoReturnInFinally(_) => 621usize, + Self::PromiseNoReturnWrap(_) => 622usize, + Self::PromiseParamNames(_) => 623usize, + Self::PromisePreferAwaitToCallbacks(_) => 624usize, + Self::PromisePreferAwaitToThen(_) => 625usize, + Self::PromisePreferCatch(_) => 626usize, + Self::PromiseSpecOnly(_) => 627usize, + Self::PromiseValidParams(_) => 628usize, + Self::VitestConsistentEachFor(_) => 629usize, + Self::VitestConsistentTestFilename(_) => 630usize, + Self::VitestConsistentVitestVi(_) => 631usize, + Self::VitestHoistedApisOnTop(_) => 632usize, + Self::VitestNoConditionalTests(_) => 633usize, + Self::VitestNoImportNodeTest(_) => 634usize, Self::VitestPreferCalledOnce(_) => 635usize, Self::VitestPreferCalledTimes(_) => 636usize, Self::VitestPreferDescribeFunctionTitle(_) => 637usize, @@ -2384,6 +2384,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => JestNoStandaloneExpect::NAME, Self::JestNoTestPrefixes(_) => JestNoTestPrefixes::NAME, Self::JestNoTestReturnStatement(_) => JestNoTestReturnStatement::NAME, + Self::JestNoUnneededAsyncExpectFunction(_) => JestNoUnneededAsyncExpectFunction::NAME, Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::NAME, Self::JestPaddingAroundTestBlocks(_) => JestPaddingAroundTestBlocks::NAME, Self::JestPreferCalledWith(_) => JestPreferCalledWith::NAME, @@ -2734,9 +2735,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => VitestHoistedApisOnTop::NAME, Self::VitestNoConditionalTests(_) => VitestNoConditionalTests::NAME, Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::NAME, - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::NAME - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::NAME, Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::NAME, Self::VitestPreferDescribeFunctionTitle(_) => VitestPreferDescribeFunctionTitle::NAME, @@ -3158,6 +3156,9 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => JestNoStandaloneExpect::CATEGORY, Self::JestNoTestPrefixes(_) => JestNoTestPrefixes::CATEGORY, Self::JestNoTestReturnStatement(_) => JestNoTestReturnStatement::CATEGORY, + Self::JestNoUnneededAsyncExpectFunction(_) => { + JestNoUnneededAsyncExpectFunction::CATEGORY + } Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::CATEGORY, Self::JestPaddingAroundTestBlocks(_) => JestPaddingAroundTestBlocks::CATEGORY, Self::JestPreferCalledWith(_) => JestPreferCalledWith::CATEGORY, @@ -3524,9 +3525,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => VitestHoistedApisOnTop::CATEGORY, Self::VitestNoConditionalTests(_) => VitestNoConditionalTests::CATEGORY, Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::CATEGORY, - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::CATEGORY - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::CATEGORY, Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::CATEGORY, Self::VitestPreferDescribeFunctionTitle(_) => { @@ -3933,6 +3931,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => JestNoStandaloneExpect::FIX, Self::JestNoTestPrefixes(_) => JestNoTestPrefixes::FIX, Self::JestNoTestReturnStatement(_) => JestNoTestReturnStatement::FIX, + Self::JestNoUnneededAsyncExpectFunction(_) => JestNoUnneededAsyncExpectFunction::FIX, Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::FIX, Self::JestPaddingAroundTestBlocks(_) => JestPaddingAroundTestBlocks::FIX, Self::JestPreferCalledWith(_) => JestPreferCalledWith::FIX, @@ -4283,9 +4282,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => VitestHoistedApisOnTop::FIX, Self::VitestNoConditionalTests(_) => VitestNoConditionalTests::FIX, Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::FIX, - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::FIX - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::FIX, Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::FIX, Self::VitestPreferDescribeFunctionTitle(_) => VitestPreferDescribeFunctionTitle::FIX, @@ -4764,6 +4760,9 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => JestNoStandaloneExpect::documentation(), Self::JestNoTestPrefixes(_) => JestNoTestPrefixes::documentation(), Self::JestNoTestReturnStatement(_) => JestNoTestReturnStatement::documentation(), + Self::JestNoUnneededAsyncExpectFunction(_) => { + JestNoUnneededAsyncExpectFunction::documentation() + } Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::documentation(), Self::JestPaddingAroundTestBlocks(_) => JestPaddingAroundTestBlocks::documentation(), Self::JestPreferCalledWith(_) => JestPreferCalledWith::documentation(), @@ -5212,9 +5211,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => VitestHoistedApisOnTop::documentation(), Self::VitestNoConditionalTests(_) => VitestNoConditionalTests::documentation(), Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::documentation(), - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::documentation() - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::documentation(), Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::documentation(), Self::VitestPreferDescribeFunctionTitle(_) => { @@ -6130,6 +6126,10 @@ impl RuleEnum { JestNoTestReturnStatement::config_schema(generator) .or_else(|| JestNoTestReturnStatement::schema(generator)) } + Self::JestNoUnneededAsyncExpectFunction(_) => { + JestNoUnneededAsyncExpectFunction::config_schema(generator) + .or_else(|| JestNoUnneededAsyncExpectFunction::schema(generator)) + } Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::config_schema(generator) .or_else(|| JestNoUntypedMockFactory::schema(generator)), Self::JestPaddingAroundTestBlocks(_) => { @@ -7042,10 +7042,6 @@ impl RuleEnum { .or_else(|| VitestNoConditionalTests::schema(generator)), Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::config_schema(generator) .or_else(|| VitestNoImportNodeTest::schema(generator)), - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::config_schema(generator) - .or_else(|| VitestNoUnneededAsyncExpectFunction::schema(generator)) - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::config_schema(generator) .or_else(|| VitestPreferCalledOnce::schema(generator)), Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::config_schema(generator) @@ -7445,6 +7441,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => "jest", Self::JestNoTestPrefixes(_) => "jest", Self::JestNoTestReturnStatement(_) => "jest", + Self::JestNoUnneededAsyncExpectFunction(_) => "jest", Self::JestNoUntypedMockFactory(_) => "jest", Self::JestPaddingAroundTestBlocks(_) => "jest", Self::JestPreferCalledWith(_) => "jest", @@ -7765,7 +7762,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => "vitest", Self::VitestNoConditionalTests(_) => "vitest", Self::VitestNoImportNodeTest(_) => "vitest", - Self::VitestNoUnneededAsyncExpectFunction(_) => "vitest", Self::VitestPreferCalledOnce(_) => "vitest", Self::VitestPreferCalledTimes(_) => "vitest", Self::VitestPreferDescribeFunctionTitle(_) => "vitest", @@ -8808,6 +8804,11 @@ impl RuleEnum { Self::JestNoTestReturnStatement(_) => Ok(Self::JestNoTestReturnStatement( JestNoTestReturnStatement::from_configuration(value)?, )), + Self::JestNoUnneededAsyncExpectFunction(_) => { + Ok(Self::JestNoUnneededAsyncExpectFunction( + JestNoUnneededAsyncExpectFunction::from_configuration(value)?, + )) + } Self::JestNoUntypedMockFactory(_) => Ok(Self::JestNoUntypedMockFactory( JestNoUntypedMockFactory::from_configuration(value)?, )), @@ -9822,11 +9823,6 @@ impl RuleEnum { Self::VitestNoImportNodeTest(_) => { Ok(Self::VitestNoImportNodeTest(VitestNoImportNodeTest::from_configuration(value)?)) } - Self::VitestNoUnneededAsyncExpectFunction(_) => { - Ok(Self::VitestNoUnneededAsyncExpectFunction( - VitestNoUnneededAsyncExpectFunction::from_configuration(value)?, - )) - } Self::VitestPreferCalledOnce(_) => { Ok(Self::VitestPreferCalledOnce(VitestPreferCalledOnce::from_configuration(value)?)) } @@ -10238,6 +10234,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.to_configuration(), Self::JestNoTestPrefixes(rule) => rule.to_configuration(), Self::JestNoTestReturnStatement(rule) => rule.to_configuration(), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.to_configuration(), Self::JestNoUntypedMockFactory(rule) => rule.to_configuration(), Self::JestPaddingAroundTestBlocks(rule) => rule.to_configuration(), Self::JestPreferCalledWith(rule) => rule.to_configuration(), @@ -10558,7 +10555,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.to_configuration(), Self::VitestNoConditionalTests(rule) => rule.to_configuration(), Self::VitestNoImportNodeTest(rule) => rule.to_configuration(), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.to_configuration(), Self::VitestPreferCalledOnce(rule) => rule.to_configuration(), Self::VitestPreferCalledTimes(rule) => rule.to_configuration(), Self::VitestPreferDescribeFunctionTitle(rule) => rule.to_configuration(), @@ -10908,6 +10904,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.run(node, ctx), Self::JestNoTestPrefixes(rule) => rule.run(node, ctx), Self::JestNoTestReturnStatement(rule) => rule.run(node, ctx), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.run(node, ctx), Self::JestNoUntypedMockFactory(rule) => rule.run(node, ctx), Self::JestPaddingAroundTestBlocks(rule) => rule.run(node, ctx), Self::JestPreferCalledWith(rule) => rule.run(node, ctx), @@ -11228,7 +11225,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.run(node, ctx), Self::VitestNoConditionalTests(rule) => rule.run(node, ctx), Self::VitestNoImportNodeTest(rule) => rule.run(node, ctx), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.run(node, ctx), Self::VitestPreferCalledOnce(rule) => rule.run(node, ctx), Self::VitestPreferCalledTimes(rule) => rule.run(node, ctx), Self::VitestPreferDescribeFunctionTitle(rule) => rule.run(node, ctx), @@ -11576,6 +11572,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.run_once(ctx), Self::JestNoTestPrefixes(rule) => rule.run_once(ctx), Self::JestNoTestReturnStatement(rule) => rule.run_once(ctx), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.run_once(ctx), Self::JestNoUntypedMockFactory(rule) => rule.run_once(ctx), Self::JestPaddingAroundTestBlocks(rule) => rule.run_once(ctx), Self::JestPreferCalledWith(rule) => rule.run_once(ctx), @@ -11896,7 +11893,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.run_once(ctx), Self::VitestNoConditionalTests(rule) => rule.run_once(ctx), Self::VitestNoImportNodeTest(rule) => rule.run_once(ctx), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.run_once(ctx), Self::VitestPreferCalledOnce(rule) => rule.run_once(ctx), Self::VitestPreferCalledTimes(rule) => rule.run_once(ctx), Self::VitestPreferDescribeFunctionTitle(rule) => rule.run_once(ctx), @@ -12300,6 +12296,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.run_on_jest_node(jest_node, ctx), Self::JestNoTestPrefixes(rule) => rule.run_on_jest_node(jest_node, ctx), Self::JestNoTestReturnStatement(rule) => rule.run_on_jest_node(jest_node, ctx), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.run_on_jest_node(jest_node, ctx), Self::JestNoUntypedMockFactory(rule) => rule.run_on_jest_node(jest_node, ctx), Self::JestPaddingAroundTestBlocks(rule) => rule.run_on_jest_node(jest_node, ctx), Self::JestPreferCalledWith(rule) => rule.run_on_jest_node(jest_node, ctx), @@ -12650,9 +12647,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.run_on_jest_node(jest_node, ctx), Self::VitestNoConditionalTests(rule) => rule.run_on_jest_node(jest_node, ctx), Self::VitestNoImportNodeTest(rule) => rule.run_on_jest_node(jest_node, ctx), - Self::VitestNoUnneededAsyncExpectFunction(rule) => { - rule.run_on_jest_node(jest_node, ctx) - } Self::VitestPreferCalledOnce(rule) => rule.run_on_jest_node(jest_node, ctx), Self::VitestPreferCalledTimes(rule) => rule.run_on_jest_node(jest_node, ctx), Self::VitestPreferDescribeFunctionTitle(rule) => rule.run_on_jest_node(jest_node, ctx), @@ -13002,6 +12996,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.should_run(ctx), Self::JestNoTestPrefixes(rule) => rule.should_run(ctx), Self::JestNoTestReturnStatement(rule) => rule.should_run(ctx), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.should_run(ctx), Self::JestNoUntypedMockFactory(rule) => rule.should_run(ctx), Self::JestPaddingAroundTestBlocks(rule) => rule.should_run(ctx), Self::JestPreferCalledWith(rule) => rule.should_run(ctx), @@ -13322,7 +13317,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.should_run(ctx), Self::VitestNoConditionalTests(rule) => rule.should_run(ctx), Self::VitestNoImportNodeTest(rule) => rule.should_run(ctx), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.should_run(ctx), Self::VitestPreferCalledOnce(rule) => rule.should_run(ctx), Self::VitestPreferCalledTimes(rule) => rule.should_run(ctx), Self::VitestPreferDescribeFunctionTitle(rule) => rule.should_run(ctx), @@ -13798,6 +13792,9 @@ impl RuleEnum { Self::JestNoStandaloneExpect(_) => JestNoStandaloneExpect::IS_TSGOLINT_RULE, Self::JestNoTestPrefixes(_) => JestNoTestPrefixes::IS_TSGOLINT_RULE, Self::JestNoTestReturnStatement(_) => JestNoTestReturnStatement::IS_TSGOLINT_RULE, + Self::JestNoUnneededAsyncExpectFunction(_) => { + JestNoUnneededAsyncExpectFunction::IS_TSGOLINT_RULE + } Self::JestNoUntypedMockFactory(_) => JestNoUntypedMockFactory::IS_TSGOLINT_RULE, Self::JestPaddingAroundTestBlocks(_) => JestPaddingAroundTestBlocks::IS_TSGOLINT_RULE, Self::JestPreferCalledWith(_) => JestPreferCalledWith::IS_TSGOLINT_RULE, @@ -14246,9 +14243,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(_) => VitestHoistedApisOnTop::IS_TSGOLINT_RULE, Self::VitestNoConditionalTests(_) => VitestNoConditionalTests::IS_TSGOLINT_RULE, Self::VitestNoImportNodeTest(_) => VitestNoImportNodeTest::IS_TSGOLINT_RULE, - Self::VitestNoUnneededAsyncExpectFunction(_) => { - VitestNoUnneededAsyncExpectFunction::IS_TSGOLINT_RULE - } Self::VitestPreferCalledOnce(_) => VitestPreferCalledOnce::IS_TSGOLINT_RULE, Self::VitestPreferCalledTimes(_) => VitestPreferCalledTimes::IS_TSGOLINT_RULE, Self::VitestPreferDescribeFunctionTitle(_) => { @@ -14602,6 +14596,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.types_info(), Self::JestNoTestPrefixes(rule) => rule.types_info(), Self::JestNoTestReturnStatement(rule) => rule.types_info(), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.types_info(), Self::JestNoUntypedMockFactory(rule) => rule.types_info(), Self::JestPaddingAroundTestBlocks(rule) => rule.types_info(), Self::JestPreferCalledWith(rule) => rule.types_info(), @@ -14922,7 +14917,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.types_info(), Self::VitestNoConditionalTests(rule) => rule.types_info(), Self::VitestNoImportNodeTest(rule) => rule.types_info(), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.types_info(), Self::VitestPreferCalledOnce(rule) => rule.types_info(), Self::VitestPreferCalledTimes(rule) => rule.types_info(), Self::VitestPreferDescribeFunctionTitle(rule) => rule.types_info(), @@ -15270,6 +15264,7 @@ impl RuleEnum { Self::JestNoStandaloneExpect(rule) => rule.run_info(), Self::JestNoTestPrefixes(rule) => rule.run_info(), Self::JestNoTestReturnStatement(rule) => rule.run_info(), + Self::JestNoUnneededAsyncExpectFunction(rule) => rule.run_info(), Self::JestNoUntypedMockFactory(rule) => rule.run_info(), Self::JestPaddingAroundTestBlocks(rule) => rule.run_info(), Self::JestPreferCalledWith(rule) => rule.run_info(), @@ -15590,7 +15585,6 @@ impl RuleEnum { Self::VitestHoistedApisOnTop(rule) => rule.run_info(), Self::VitestNoConditionalTests(rule) => rule.run_info(), Self::VitestNoImportNodeTest(rule) => rule.run_info(), - Self::VitestNoUnneededAsyncExpectFunction(rule) => rule.run_info(), Self::VitestPreferCalledOnce(rule) => rule.run_info(), Self::VitestPreferCalledTimes(rule) => rule.run_info(), Self::VitestPreferDescribeFunctionTitle(rule) => rule.run_info(), @@ -16012,6 +16006,7 @@ pub static RULES: std::sync::LazyLock> = std::sync::LazyLock::new( RuleEnum::JestNoStandaloneExpect(JestNoStandaloneExpect::default()), RuleEnum::JestNoTestPrefixes(JestNoTestPrefixes::default()), RuleEnum::JestNoTestReturnStatement(JestNoTestReturnStatement::default()), + RuleEnum::JestNoUnneededAsyncExpectFunction(JestNoUnneededAsyncExpectFunction::default()), RuleEnum::JestNoUntypedMockFactory(JestNoUntypedMockFactory::default()), RuleEnum::JestPaddingAroundTestBlocks(JestPaddingAroundTestBlocks::default()), RuleEnum::JestPreferCalledWith(JestPreferCalledWith::default()), @@ -16362,9 +16357,6 @@ pub static RULES: std::sync::LazyLock> = std::sync::LazyLock::new( RuleEnum::VitestHoistedApisOnTop(VitestHoistedApisOnTop::default()), RuleEnum::VitestNoConditionalTests(VitestNoConditionalTests::default()), RuleEnum::VitestNoImportNodeTest(VitestNoImportNodeTest::default()), - RuleEnum::VitestNoUnneededAsyncExpectFunction( - VitestNoUnneededAsyncExpectFunction::default(), - ), RuleEnum::VitestPreferCalledOnce(VitestPreferCalledOnce::default()), RuleEnum::VitestPreferCalledTimes(VitestPreferCalledTimes::default()), RuleEnum::VitestPreferDescribeFunctionTitle(VitestPreferDescribeFunctionTitle::default()), diff --git a/crates/oxc_linter/src/rules.rs b/crates/oxc_linter/src/rules.rs index 4ff57a4ab33fd..4346f13b6b539 100644 --- a/crates/oxc_linter/src/rules.rs +++ b/crates/oxc_linter/src/rules.rs @@ -328,6 +328,7 @@ pub(crate) mod jest { pub mod no_standalone_expect; pub mod no_test_prefixes; pub mod no_test_return_statement; + pub mod no_unneeded_async_expect_function; pub mod no_untyped_mock_factory; pub mod padding_around_test_blocks; pub mod prefer_called_with; @@ -676,7 +677,6 @@ pub(crate) mod vitest { pub mod hoisted_apis_on_top; pub mod no_conditional_tests; pub mod no_import_node_test; - pub mod no_unneeded_async_expect_function; pub mod prefer_called_once; pub mod prefer_called_times; pub mod prefer_describe_function_title; diff --git a/crates/oxc_linter/src/rules/vitest/no_unneeded_async_expect_function.rs b/crates/oxc_linter/src/rules/jest/no_unneeded_async_expect_function.rs similarity index 94% rename from crates/oxc_linter/src/rules/vitest/no_unneeded_async_expect_function.rs rename to crates/oxc_linter/src/rules/jest/no_unneeded_async_expect_function.rs index 35658d4af229b..a40bb6bc07e7c 100644 --- a/crates/oxc_linter/src/rules/vitest/no_unneeded_async_expect_function.rs +++ b/crates/oxc_linter/src/rules/jest/no_unneeded_async_expect_function.rs @@ -47,8 +47,19 @@ declare_oxc_lint!( /// ```js /// await expect(doSomethingAsync()).rejects.toThrow(); /// ``` + /// + /// This rule is compatible with [eslint-plugin-vitest](https://github.com/vitest-dev/eslint-plugin-vitest/blob/main/docs/rules/no-unneeded-async-expect-function.md), + /// to use it, add the following configuration to your `.oxlintrc.json`: + /// + /// ```json + /// { + /// "rules": { + /// "vitest/no-unneeded-async-expect-function": "error" + /// } + /// } + /// ``` NoUnneededAsyncExpectFunction, - vitest, + jest, style, fix ); @@ -154,7 +165,7 @@ fn get_awaited_call_span_from_block(body: &oxc_ast::ast::FunctionBody) -> Option fn test() { use crate::tester::Tester; - let pass = vec![ + let mut pass = vec![ "expect.hasAssertions()", " it('pass', async () => { @@ -179,12 +190,6 @@ fn test() { }).rejects.toThrow(); }) ", - " - import { expect as pleaseExpect } from 'vitest'; - it('pass', async () => { - await pleaseExpect(doSomethingAsync()).rejects.toThrow(); - }) - ", " it('pass', async () => { await expect(async () => { @@ -237,6 +242,11 @@ fn test() { await expect(async() => [await Promise.reject(2)]).rejects.toThrow(2); }) ", + " + import { expect as pleaseExpect } from '@jest/globals'; + it('pass', async () => { + await pleaseExpect(doSomethingAsync()).rejects.toThrow(); + })", ]; let fail = vec![ @@ -369,12 +379,25 @@ fn test() { }) ", None) ]; + + let pass_vitest = vec![ + " + import { expect as pleaseExpect } from 'vitest'; + it('pass', async () => { + await pleaseExpect(doSomethingAsync()).rejects.toThrow(); + }) + ", + ]; + + pass.extend(pass_vitest); + Tester::new( NoUnneededAsyncExpectFunction::NAME, NoUnneededAsyncExpectFunction::PLUGIN, pass, fail, ) + .with_jest_plugin(true) .with_vitest_plugin(true) .expect_fix(fix) .test_and_snapshot(); diff --git a/crates/oxc_linter/src/snapshots/vitest_no_unneeded_async_expect_function.snap b/crates/oxc_linter/src/snapshots/jest_no_unneeded_async_expect_function.snap similarity index 82% rename from crates/oxc_linter/src/snapshots/vitest_no_unneeded_async_expect_function.snap rename to crates/oxc_linter/src/snapshots/jest_no_unneeded_async_expect_function.snap index 0d75261998081..3ddd6f3d602f6 100644 --- a/crates/oxc_linter/src/snapshots/vitest_no_unneeded_async_expect_function.snap +++ b/crates/oxc_linter/src/snapshots/jest_no_unneeded_async_expect_function.snap @@ -1,7 +1,7 @@ --- source: crates/oxc_linter/src/tester.rs --- - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:25] 2 │ it('should be fixed', async () => { 3 │ ╭─▶ await expect(async () => { @@ -11,7 +11,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:25] 2 │ it('should be fixed', async () => { 3 │ await expect(async () => await doSomethingAsync()).rejects.toThrow(); @@ -20,7 +20,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:25] 2 │ it('should be fixed', async () => { 3 │ ╭─▶ await expect(async function () { @@ -30,7 +30,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:27] 2 │ it('should be fixed for async arrow function', async () => { 3 │ ╭─▶ await expect(async () => { @@ -40,7 +40,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:27] 2 │ it('should be fixed for async normal function', async () => { 3 │ ╭─▶ await expect(async function () { @@ -50,7 +50,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:3:27] 2 │ it('should be fixed for Promise.all', async () => { 3 │ ╭─▶ await expect(async function () { @@ -60,7 +60,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Remove the async wrapper and pass the promise directly to expect - ⚠ eslint-plugin-vitest(no-unneeded-async-expect-function): Unnecessary async function wrapper + ⚠ eslint-plugin-jest(no-unneeded-async-expect-function): Unnecessary async function wrapper ╭─[no_unneeded_async_expect_function.tsx:4:27] 3 │ const a = async () => { await doSomethingAsync() }; 4 │ ╭─▶ await expect(async () => { diff --git a/crates/oxc_linter/src/utils/mod.rs b/crates/oxc_linter/src/utils/mod.rs index 7c22cf03321fa..2a2e625061af8 100644 --- a/crates/oxc_linter/src/utils/mod.rs +++ b/crates/oxc_linter/src/utils/mod.rs @@ -36,7 +36,7 @@ pub use self::{ // the crates/oxc_linter/data/vitest_compatible_jest_rules.json // file is also updated. The JSON file is used by the oxlint-migrate // and eslint-plugin-oxlint repos to keep everything synced. -const VITEST_COMPATIBLE_JEST_RULES: [&str; 41] = [ +const VITEST_COMPATIBLE_JEST_RULES: [&str; 42] = [ "consistent-test-it", "expect-expect", "max-expects", @@ -58,6 +58,7 @@ const VITEST_COMPATIBLE_JEST_RULES: [&str; 41] = [ "no-standalone-expect", "no-test-prefixes", "no-test-return-statement", + "no-unneeded-async-expect-function", "prefer-called-with", "prefer-comparison-matcher", "prefer-each",