From 69b9bfd3b8c29ac1f8a9afa74f0282f0de6b24e1 Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Sun, 25 Jan 2026 10:47:39 +0100 Subject: [PATCH 1/6] feat(linter): implement import/no-relative-parent-imports rule --- .../src/generated/rule_runner_impls.rs | 5 + crates/oxc_linter/src/generated/rules_enum.rs | 1350 +++++++++-------- crates/oxc_linter/src/rules.rs | 1 + .../import/no_relative_parent_imports.rs | 178 +++ .../import_no_relative_parent_imports.snap | 114 ++ 5 files changed, 987 insertions(+), 661 deletions(-) create mode 100644 crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs create mode 100644 crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap diff --git a/crates/oxc_linter/src/generated/rule_runner_impls.rs b/crates/oxc_linter/src/generated/rule_runner_impls.rs index 2767cedd6b8e8..a8228135ad156 100644 --- a/crates/oxc_linter/src/generated/rule_runner_impls.rs +++ b/crates/oxc_linter/src/generated/rule_runner_impls.rs @@ -8,6 +8,11 @@ use oxc_semantic::AstTypesBitset; use crate::rule::{RuleRunFunctionsImplemented, RuleRunner}; +impl RuleRunner for crate::rules::import::no_relative_parent_imports::NoRelativeParentImports { + const NODE_TYPES: Option<&AstTypesBitset> = None; + const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::Run; +} + impl RuleRunner for crate::rules::import::consistent_type_specifier_style::ConsistentTypeSpecifierStyle { diff --git a/crates/oxc_linter/src/generated/rules_enum.rs b/crates/oxc_linter/src/generated/rules_enum.rs index e988513f6aba1..9ed109107af64 100644 --- a/crates/oxc_linter/src/generated/rules_enum.rs +++ b/crates/oxc_linter/src/generated/rules_enum.rs @@ -196,6 +196,7 @@ pub use crate::rules::import::no_named_as_default_member::NoNamedAsDefaultMember pub use crate::rules::import::no_named_default::NoNamedDefault as ImportNoNamedDefault; pub use crate::rules::import::no_named_export::NoNamedExport as ImportNoNamedExport; pub use crate::rules::import::no_namespace::NoNamespace as ImportNoNamespace; +pub use crate::rules::import::no_relative_parent_imports::NoRelativeParentImports as ImportNoRelativeParentImports; pub use crate::rules::import::no_self_import::NoSelfImport as ImportNoSelfImport; pub use crate::rules::import::no_unassigned_import::NoUnassignedImport as ImportNoUnassignedImport; pub use crate::rules::import::no_webpack_loader_syntax::NoWebpackLoaderSyntax as ImportNoWebpackLoaderSyntax; @@ -675,6 +676,7 @@ use crate::{ use oxc_semantic::AstTypesBitset; #[derive(Debug, Clone)] pub enum RuleEnum { + ImportNoRelativeParentImports(ImportNoRelativeParentImports), ImportConsistentTypeSpecifierStyle(ImportConsistentTypeSpecifierStyle), ImportDefault(ImportDefault), ImportExport(ImportExport), @@ -1344,671 +1346,673 @@ pub enum RuleEnum { impl RuleEnum { pub fn id(&self) -> usize { match self { - Self::ImportConsistentTypeSpecifierStyle(_) => 0usize, - Self::ImportDefault(_) => 1usize, - Self::ImportExport(_) => 2usize, - Self::ImportExportsLast(_) => 3usize, - Self::ImportExtensions(_) => 4usize, - Self::ImportFirst(_) => 5usize, - Self::ImportGroupExports(_) => 6usize, - Self::ImportMaxDependencies(_) => 7usize, - Self::ImportNamed(_) => 8usize, - Self::ImportNamespace(_) => 9usize, - Self::ImportNoAbsolutePath(_) => 10usize, - Self::ImportNoAmd(_) => 11usize, - Self::ImportNoAnonymousDefaultExport(_) => 12usize, - Self::ImportNoCommonjs(_) => 13usize, - Self::ImportNoCycle(_) => 14usize, - Self::ImportNoDefaultExport(_) => 15usize, - Self::ImportNoDuplicates(_) => 16usize, - Self::ImportNoDynamicRequire(_) => 17usize, - Self::ImportNoEmptyNamedBlocks(_) => 18usize, - Self::ImportNoMutableExports(_) => 19usize, - Self::ImportNoNamedAsDefault(_) => 20usize, - Self::ImportNoNamedAsDefaultMember(_) => 21usize, - Self::ImportNoNamedDefault(_) => 22usize, - Self::ImportNoNamedExport(_) => 23usize, - Self::ImportNoNamespace(_) => 24usize, - Self::ImportNoSelfImport(_) => 25usize, - Self::ImportNoUnassignedImport(_) => 26usize, - Self::ImportNoWebpackLoaderSyntax(_) => 27usize, - Self::ImportPreferDefaultExport(_) => 28usize, - Self::ImportUnambiguous(_) => 29usize, - Self::EslintAccessorPairs(_) => 30usize, - Self::EslintArrayCallbackReturn(_) => 31usize, - Self::EslintArrowBodyStyle(_) => 32usize, - Self::EslintBlockScopedVar(_) => 33usize, - Self::EslintCapitalizedComments(_) => 34usize, - Self::EslintClassMethodsUseThis(_) => 35usize, - Self::EslintComplexity(_) => 36usize, - Self::EslintConstructorSuper(_) => 37usize, - Self::EslintCurly(_) => 38usize, - Self::EslintDefaultCase(_) => 39usize, - Self::EslintDefaultCaseLast(_) => 40usize, - Self::EslintDefaultParamLast(_) => 41usize, - Self::EslintEqeqeq(_) => 42usize, - Self::EslintForDirection(_) => 43usize, - Self::EslintFuncNames(_) => 44usize, - Self::EslintFuncStyle(_) => 45usize, - Self::EslintGetterReturn(_) => 46usize, - Self::EslintGroupedAccessorPairs(_) => 47usize, - Self::EslintGuardForIn(_) => 48usize, - Self::EslintIdLength(_) => 49usize, - Self::EslintInitDeclarations(_) => 50usize, - Self::EslintMaxClassesPerFile(_) => 51usize, - Self::EslintMaxDepth(_) => 52usize, - Self::EslintMaxLines(_) => 53usize, - Self::EslintMaxLinesPerFunction(_) => 54usize, - Self::EslintMaxNestedCallbacks(_) => 55usize, - Self::EslintMaxParams(_) => 56usize, - Self::EslintMaxStatements(_) => 57usize, - Self::EslintNewCap(_) => 58usize, - Self::EslintNoAlert(_) => 59usize, - Self::EslintNoArrayConstructor(_) => 60usize, - Self::EslintNoAsyncPromiseExecutor(_) => 61usize, - Self::EslintNoAwaitInLoop(_) => 62usize, - Self::EslintNoBitwise(_) => 63usize, - Self::EslintNoCaller(_) => 64usize, - Self::EslintNoCaseDeclarations(_) => 65usize, - Self::EslintNoClassAssign(_) => 66usize, - Self::EslintNoCompareNegZero(_) => 67usize, - Self::EslintNoCondAssign(_) => 68usize, - Self::EslintNoConsole(_) => 69usize, - Self::EslintNoConstAssign(_) => 70usize, - Self::EslintNoConstantBinaryExpression(_) => 71usize, - Self::EslintNoConstantCondition(_) => 72usize, - Self::EslintNoConstructorReturn(_) => 73usize, - Self::EslintNoContinue(_) => 74usize, - Self::EslintNoControlRegex(_) => 75usize, - Self::EslintNoDebugger(_) => 76usize, - Self::EslintNoDeleteVar(_) => 77usize, - Self::EslintNoDivRegex(_) => 78usize, - Self::EslintNoDupeClassMembers(_) => 79usize, - Self::EslintNoDupeElseIf(_) => 80usize, - Self::EslintNoDupeKeys(_) => 81usize, - Self::EslintNoDuplicateCase(_) => 82usize, - Self::EslintNoDuplicateImports(_) => 83usize, - Self::EslintNoElseReturn(_) => 84usize, - Self::EslintNoEmpty(_) => 85usize, - Self::EslintNoEmptyCharacterClass(_) => 86usize, - Self::EslintNoEmptyFunction(_) => 87usize, - Self::EslintNoEmptyPattern(_) => 88usize, - Self::EslintNoEmptyStaticBlock(_) => 89usize, - Self::EslintNoEqNull(_) => 90usize, - Self::EslintNoEval(_) => 91usize, - Self::EslintNoExAssign(_) => 92usize, - Self::EslintNoExtendNative(_) => 93usize, - Self::EslintNoExtraBind(_) => 94usize, - Self::EslintNoExtraBooleanCast(_) => 95usize, - Self::EslintNoExtraLabel(_) => 96usize, - Self::EslintNoFallthrough(_) => 97usize, - Self::EslintNoFuncAssign(_) => 98usize, - Self::EslintNoGlobalAssign(_) => 99usize, - Self::EslintNoImplicitCoercion(_) => 100usize, - Self::EslintNoImportAssign(_) => 101usize, - Self::EslintNoInlineComments(_) => 102usize, - Self::EslintNoInnerDeclarations(_) => 103usize, - Self::EslintNoInvalidRegexp(_) => 104usize, - Self::EslintNoIrregularWhitespace(_) => 105usize, - Self::EslintNoIterator(_) => 106usize, - Self::EslintNoLabelVar(_) => 107usize, - Self::EslintNoLabels(_) => 108usize, - Self::EslintNoLoneBlocks(_) => 109usize, - Self::EslintNoLonelyIf(_) => 110usize, - Self::EslintNoLoopFunc(_) => 111usize, - Self::EslintNoLossOfPrecision(_) => 112usize, - Self::EslintNoMagicNumbers(_) => 113usize, - Self::EslintNoMisleadingCharacterClass(_) => 114usize, - Self::EslintNoMultiAssign(_) => 115usize, - Self::EslintNoMultiStr(_) => 116usize, - Self::EslintNoNegatedCondition(_) => 117usize, - Self::EslintNoNestedTernary(_) => 118usize, - Self::EslintNoNew(_) => 119usize, - Self::EslintNoNewFunc(_) => 120usize, - Self::EslintNoNewNativeNonconstructor(_) => 121usize, - Self::EslintNoNewWrappers(_) => 122usize, - Self::EslintNoNonoctalDecimalEscape(_) => 123usize, - Self::EslintNoObjCalls(_) => 124usize, - Self::EslintNoObjectConstructor(_) => 125usize, - Self::EslintNoParamReassign(_) => 126usize, - Self::EslintNoPlusplus(_) => 127usize, - Self::EslintNoPromiseExecutorReturn(_) => 128usize, - Self::EslintNoProto(_) => 129usize, - Self::EslintNoPrototypeBuiltins(_) => 130usize, - Self::EslintNoRedeclare(_) => 131usize, - Self::EslintNoRegexSpaces(_) => 132usize, - Self::EslintNoRestrictedGlobals(_) => 133usize, - Self::EslintNoRestrictedImports(_) => 134usize, - Self::EslintNoReturnAssign(_) => 135usize, - Self::EslintNoScriptUrl(_) => 136usize, - Self::EslintNoSelfAssign(_) => 137usize, - Self::EslintNoSelfCompare(_) => 138usize, - Self::EslintNoSequences(_) => 139usize, - Self::EslintNoSetterReturn(_) => 140usize, - Self::EslintNoShadowRestrictedNames(_) => 141usize, - Self::EslintNoSparseArrays(_) => 142usize, - Self::EslintNoTemplateCurlyInString(_) => 143usize, - Self::EslintNoTernary(_) => 144usize, - Self::EslintNoThisBeforeSuper(_) => 145usize, - Self::EslintNoThrowLiteral(_) => 146usize, - Self::EslintNoUnassignedVars(_) => 147usize, - Self::EslintNoUndef(_) => 148usize, - Self::EslintNoUndefined(_) => 149usize, - Self::EslintNoUnexpectedMultiline(_) => 150usize, - Self::EslintNoUnneededTernary(_) => 151usize, - Self::EslintNoUnreachable(_) => 152usize, - Self::EslintNoUnsafeFinally(_) => 153usize, - Self::EslintNoUnsafeNegation(_) => 154usize, - Self::EslintNoUnsafeOptionalChaining(_) => 155usize, - Self::EslintNoUnusedExpressions(_) => 156usize, - Self::EslintNoUnusedLabels(_) => 157usize, - Self::EslintNoUnusedPrivateClassMembers(_) => 158usize, - Self::EslintNoUnusedVars(_) => 159usize, - Self::EslintNoUselessBackreference(_) => 160usize, - Self::EslintNoUselessCall(_) => 161usize, - Self::EslintNoUselessCatch(_) => 162usize, - Self::EslintNoUselessComputedKey(_) => 163usize, - Self::EslintNoUselessConcat(_) => 164usize, - Self::EslintNoUselessConstructor(_) => 165usize, - Self::EslintNoUselessEscape(_) => 166usize, - Self::EslintNoUselessRename(_) => 167usize, - Self::EslintNoUselessReturn(_) => 168usize, - Self::EslintNoVar(_) => 169usize, - Self::EslintNoVoid(_) => 170usize, - Self::EslintNoWarningComments(_) => 171usize, - Self::EslintNoWith(_) => 172usize, - Self::EslintOperatorAssignment(_) => 173usize, - Self::EslintPreferDestructuring(_) => 174usize, - Self::EslintPreferExponentiationOperator(_) => 175usize, - Self::EslintPreferNumericLiterals(_) => 176usize, - Self::EslintPreferObjectHasOwn(_) => 177usize, - Self::EslintPreferObjectSpread(_) => 178usize, - Self::EslintPreferPromiseRejectErrors(_) => 179usize, - Self::EslintPreferRestParams(_) => 180usize, - Self::EslintPreferSpread(_) => 181usize, - Self::EslintPreferTemplate(_) => 182usize, - Self::EslintPreserveCaughtError(_) => 183usize, - Self::EslintRadix(_) => 184usize, - Self::EslintRequireAwait(_) => 185usize, - Self::EslintRequireYield(_) => 186usize, - Self::EslintSortImports(_) => 187usize, - Self::EslintSortKeys(_) => 188usize, - Self::EslintSortVars(_) => 189usize, - Self::EslintSymbolDescription(_) => 190usize, - Self::EslintUnicodeBom(_) => 191usize, - Self::EslintUseIsnan(_) => 192usize, - Self::EslintValidTypeof(_) => 193usize, - Self::EslintVarsOnTop(_) => 194usize, - Self::EslintYoda(_) => 195usize, - Self::TypescriptAdjacentOverloadSignatures(_) => 196usize, - Self::TypescriptArrayType(_) => 197usize, - Self::TypescriptAwaitThenable(_) => 198usize, - Self::TypescriptBanTsComment(_) => 199usize, - Self::TypescriptBanTslintComment(_) => 200usize, - Self::TypescriptBanTypes(_) => 201usize, - Self::TypescriptConsistentGenericConstructors(_) => 202usize, - Self::TypescriptConsistentIndexedObjectStyle(_) => 203usize, - Self::TypescriptConsistentTypeDefinitions(_) => 204usize, - Self::TypescriptConsistentTypeImports(_) => 205usize, - Self::TypescriptExplicitFunctionReturnType(_) => 206usize, - Self::TypescriptExplicitModuleBoundaryTypes(_) => 207usize, - Self::TypescriptNoArrayDelete(_) => 208usize, - Self::TypescriptNoBaseToString(_) => 209usize, - Self::TypescriptNoConfusingNonNullAssertion(_) => 210usize, - Self::TypescriptNoConfusingVoidExpression(_) => 211usize, - Self::TypescriptNoDeprecated(_) => 212usize, - Self::TypescriptNoDuplicateEnumValues(_) => 213usize, - Self::TypescriptNoDuplicateTypeConstituents(_) => 214usize, - Self::TypescriptNoDynamicDelete(_) => 215usize, - Self::TypescriptNoEmptyInterface(_) => 216usize, - Self::TypescriptNoEmptyObjectType(_) => 217usize, - Self::TypescriptNoExplicitAny(_) => 218usize, - Self::TypescriptNoExtraNonNullAssertion(_) => 219usize, - Self::TypescriptNoExtraneousClass(_) => 220usize, - Self::TypescriptNoFloatingPromises(_) => 221usize, - Self::TypescriptNoForInArray(_) => 222usize, - Self::TypescriptNoImpliedEval(_) => 223usize, - Self::TypescriptNoImportTypeSideEffects(_) => 224usize, - Self::TypescriptNoInferrableTypes(_) => 225usize, - Self::TypescriptNoMeaninglessVoidOperator(_) => 226usize, - Self::TypescriptNoMisusedNew(_) => 227usize, - Self::TypescriptNoMisusedPromises(_) => 228usize, - Self::TypescriptNoMisusedSpread(_) => 229usize, - Self::TypescriptNoMixedEnums(_) => 230usize, - Self::TypescriptNoNamespace(_) => 231usize, - Self::TypescriptNoNonNullAssertedNullishCoalescing(_) => 232usize, - Self::TypescriptNoNonNullAssertedOptionalChain(_) => 233usize, - Self::TypescriptNoNonNullAssertion(_) => 234usize, - Self::TypescriptNoRedundantTypeConstituents(_) => 235usize, - Self::TypescriptNoRequireImports(_) => 236usize, - Self::TypescriptNoRestrictedTypes(_) => 237usize, - Self::TypescriptNoThisAlias(_) => 238usize, - Self::TypescriptNoUnnecessaryBooleanLiteralCompare(_) => 239usize, - Self::TypescriptNoUnnecessaryParameterPropertyAssignment(_) => 240usize, - Self::TypescriptNoUnnecessaryTemplateExpression(_) => 241usize, - Self::TypescriptNoUnnecessaryTypeArguments(_) => 242usize, - Self::TypescriptNoUnnecessaryTypeAssertion(_) => 243usize, - Self::TypescriptNoUnnecessaryTypeConstraint(_) => 244usize, - Self::TypescriptNoUnsafeArgument(_) => 245usize, - Self::TypescriptNoUnsafeAssignment(_) => 246usize, - Self::TypescriptNoUnsafeCall(_) => 247usize, - Self::TypescriptNoUnsafeDeclarationMerging(_) => 248usize, - Self::TypescriptNoUnsafeEnumComparison(_) => 249usize, - Self::TypescriptNoUnsafeFunctionType(_) => 250usize, - Self::TypescriptNoUnsafeMemberAccess(_) => 251usize, - Self::TypescriptNoUnsafeReturn(_) => 252usize, - Self::TypescriptNoUnsafeTypeAssertion(_) => 253usize, - Self::TypescriptNoUnsafeUnaryMinus(_) => 254usize, - Self::TypescriptNoUselessEmptyExport(_) => 255usize, - Self::TypescriptNoVarRequires(_) => 256usize, - Self::TypescriptNoWrapperObjectTypes(_) => 257usize, - Self::TypescriptNonNullableTypeAssertionStyle(_) => 258usize, - Self::TypescriptOnlyThrowError(_) => 259usize, - Self::TypescriptPreferAsConst(_) => 260usize, - Self::TypescriptPreferEnumInitializers(_) => 261usize, - Self::TypescriptPreferForOf(_) => 262usize, - Self::TypescriptPreferFunctionType(_) => 263usize, - Self::TypescriptPreferIncludes(_) => 264usize, - Self::TypescriptPreferLiteralEnumMember(_) => 265usize, - Self::TypescriptPreferNamespaceKeyword(_) => 266usize, - Self::TypescriptPreferNullishCoalescing(_) => 267usize, - Self::TypescriptPreferOptionalChain(_) => 268usize, - Self::TypescriptPreferPromiseRejectErrors(_) => 269usize, - Self::TypescriptPreferReduceTypeParameter(_) => 270usize, - Self::TypescriptPreferReturnThisType(_) => 271usize, - Self::TypescriptPreferTsExpectError(_) => 272usize, - Self::TypescriptPromiseFunctionAsync(_) => 273usize, - Self::TypescriptRelatedGetterSetterPairs(_) => 274usize, - Self::TypescriptRequireArraySortCompare(_) => 275usize, - Self::TypescriptRequireAwait(_) => 276usize, - Self::TypescriptRestrictPlusOperands(_) => 277usize, - Self::TypescriptRestrictTemplateExpressions(_) => 278usize, - Self::TypescriptReturnAwait(_) => 279usize, - Self::TypescriptStrictBooleanExpressions(_) => 280usize, - Self::TypescriptSwitchExhaustivenessCheck(_) => 281usize, - Self::TypescriptTripleSlashReference(_) => 282usize, - Self::TypescriptUnboundMethod(_) => 283usize, - Self::TypescriptUseUnknownInCatchCallbackVariable(_) => 284usize, - Self::JestConsistentTestIt(_) => 285usize, - Self::JestExpectExpect(_) => 286usize, - Self::JestMaxExpects(_) => 287usize, - Self::JestMaxNestedDescribe(_) => 288usize, - Self::JestNoAliasMethods(_) => 289usize, - Self::JestNoCommentedOutTests(_) => 290usize, - Self::JestNoConditionalExpect(_) => 291usize, - Self::JestNoConditionalInTest(_) => 292usize, - Self::JestNoConfusingSetTimeout(_) => 293usize, - Self::JestNoDeprecatedFunctions(_) => 294usize, - Self::JestNoDisabledTests(_) => 295usize, - Self::JestNoDoneCallback(_) => 296usize, - Self::JestNoDuplicateHooks(_) => 297usize, - Self::JestNoExport(_) => 298usize, - Self::JestNoFocusedTests(_) => 299usize, - Self::JestNoHooks(_) => 300usize, - Self::JestNoIdenticalTitle(_) => 301usize, - Self::JestNoInterpolationInSnapshots(_) => 302usize, - Self::JestNoJasmineGlobals(_) => 303usize, - Self::JestNoLargeSnapshots(_) => 304usize, - Self::JestNoMocksImport(_) => 305usize, - Self::JestNoRestrictedJestMethods(_) => 306usize, - Self::JestNoRestrictedMatchers(_) => 307usize, - Self::JestNoStandaloneExpect(_) => 308usize, - Self::JestNoTestPrefixes(_) => 309usize, - Self::JestNoTestReturnStatement(_) => 310usize, - Self::JestNoUntypedMockFactory(_) => 311usize, - Self::JestPaddingAroundTestBlocks(_) => 312usize, - Self::JestPreferCalledWith(_) => 313usize, - Self::JestPreferComparisonMatcher(_) => 314usize, - Self::JestPreferEach(_) => 315usize, - Self::JestPreferEqualityMatcher(_) => 316usize, - Self::JestPreferExpectResolves(_) => 317usize, - Self::JestPreferHooksInOrder(_) => 318usize, - Self::JestPreferHooksOnTop(_) => 319usize, - Self::JestPreferJestMocked(_) => 320usize, - Self::JestPreferLowercaseTitle(_) => 321usize, - Self::JestPreferMockPromiseShorthand(_) => 322usize, - Self::JestPreferSpyOn(_) => 323usize, - Self::JestPreferStrictEqual(_) => 324usize, - Self::JestPreferToBe(_) => 325usize, - Self::JestPreferToContain(_) => 326usize, - Self::JestPreferToHaveBeenCalled(_) => 327usize, - Self::JestPreferToHaveBeenCalledTimes(_) => 328usize, - Self::JestPreferToHaveLength(_) => 329usize, - Self::JestPreferTodo(_) => 330usize, - Self::JestRequireHook(_) => 331usize, - Self::JestRequireToThrowMessage(_) => 332usize, - Self::JestRequireTopLevelDescribe(_) => 333usize, - Self::JestValidDescribeCallback(_) => 334usize, - Self::JestValidExpect(_) => 335usize, - Self::JestValidTitle(_) => 336usize, - Self::ReactButtonHasType(_) => 337usize, - Self::ReactCheckedRequiresOnchangeOrReadonly(_) => 338usize, - Self::ReactDisplayName(_) => 339usize, - Self::ReactExhaustiveDeps(_) => 340usize, - Self::ReactForbidDomProps(_) => 341usize, - Self::ReactForbidElements(_) => 342usize, - Self::ReactForwardRefUsesRef(_) => 343usize, - Self::ReactIframeMissingSandbox(_) => 344usize, - Self::ReactJsxBooleanValue(_) => 345usize, - Self::ReactJsxCurlyBracePresence(_) => 346usize, - Self::ReactJsxFilenameExtension(_) => 347usize, - Self::ReactJsxFragments(_) => 348usize, - Self::ReactJsxHandlerNames(_) => 349usize, - Self::ReactJsxKey(_) => 350usize, - Self::ReactJsxMaxDepth(_) => 351usize, - Self::ReactJsxNoCommentTextnodes(_) => 352usize, - Self::ReactJsxNoDuplicateProps(_) => 353usize, - Self::ReactJsxNoScriptUrl(_) => 354usize, - Self::ReactJsxNoTargetBlank(_) => 355usize, - Self::ReactJsxNoUndef(_) => 356usize, - Self::ReactJsxNoUselessFragment(_) => 357usize, - Self::ReactJsxPascalCase(_) => 358usize, - Self::ReactJsxPropsNoSpreadMulti(_) => 359usize, - Self::ReactJsxPropsNoSpreading(_) => 360usize, - Self::ReactNoArrayIndexKey(_) => 361usize, - Self::ReactNoChildrenProp(_) => 362usize, - Self::ReactNoDanger(_) => 363usize, - Self::ReactNoDangerWithChildren(_) => 364usize, - Self::ReactNoDidMountSetState(_) => 365usize, - Self::ReactNoDirectMutationState(_) => 366usize, - Self::ReactNoFindDomNode(_) => 367usize, - Self::ReactNoIsMounted(_) => 368usize, - Self::ReactNoNamespace(_) => 369usize, - Self::ReactNoRedundantShouldComponentUpdate(_) => 370usize, - Self::ReactNoRenderReturnValue(_) => 371usize, - Self::ReactNoSetState(_) => 372usize, - Self::ReactNoStringRefs(_) => 373usize, - Self::ReactNoThisInSfc(_) => 374usize, - Self::ReactNoUnescapedEntities(_) => 375usize, - Self::ReactNoUnknownProperty(_) => 376usize, - Self::ReactNoUnsafe(_) => 377usize, - Self::ReactNoWillUpdateSetState(_) => 378usize, - Self::ReactOnlyExportComponents(_) => 379usize, - Self::ReactPreferEs6Class(_) => 380usize, - Self::ReactReactInJsxScope(_) => 381usize, - Self::ReactRequireRenderReturn(_) => 382usize, - Self::ReactRulesOfHooks(_) => 383usize, - Self::ReactSelfClosingComp(_) => 384usize, - Self::ReactStateInConstructor(_) => 385usize, - Self::ReactStylePropObject(_) => 386usize, - Self::ReactVoidDomElementsNoChildren(_) => 387usize, - Self::ReactPerfJsxNoJsxAsProp(_) => 388usize, - Self::ReactPerfJsxNoNewArrayAsProp(_) => 389usize, - Self::ReactPerfJsxNoNewFunctionAsProp(_) => 390usize, - Self::ReactPerfJsxNoNewObjectAsProp(_) => 391usize, - Self::UnicornCatchErrorName(_) => 392usize, - Self::UnicornConsistentAssert(_) => 393usize, - Self::UnicornConsistentDateClone(_) => 394usize, - Self::UnicornConsistentEmptyArraySpread(_) => 395usize, - Self::UnicornConsistentExistenceIndexCheck(_) => 396usize, - Self::UnicornConsistentFunctionScoping(_) => 397usize, - Self::UnicornEmptyBraceSpaces(_) => 398usize, - Self::UnicornErrorMessage(_) => 399usize, - Self::UnicornEscapeCase(_) => 400usize, - Self::UnicornExplicitLengthCheck(_) => 401usize, - Self::UnicornFilenameCase(_) => 402usize, - Self::UnicornNewForBuiltins(_) => 403usize, - Self::UnicornNoAbusiveEslintDisable(_) => 404usize, - Self::UnicornNoAccessorRecursion(_) => 405usize, - Self::UnicornNoAnonymousDefaultExport(_) => 406usize, - Self::UnicornNoArrayCallbackReference(_) => 407usize, - Self::UnicornNoArrayForEach(_) => 408usize, - Self::UnicornNoArrayMethodThisArgument(_) => 409usize, - Self::UnicornNoArrayReduce(_) => 410usize, - Self::UnicornNoArrayReverse(_) => 411usize, - Self::UnicornNoArraySort(_) => 412usize, - Self::UnicornNoAwaitExpressionMember(_) => 413usize, - Self::UnicornNoAwaitInPromiseMethods(_) => 414usize, - Self::UnicornNoConsoleSpaces(_) => 415usize, - Self::UnicornNoDocumentCookie(_) => 416usize, - Self::UnicornNoEmptyFile(_) => 417usize, - Self::UnicornNoHexEscape(_) => 418usize, - Self::UnicornNoImmediateMutation(_) => 419usize, - Self::UnicornNoInstanceofArray(_) => 420usize, - Self::UnicornNoInstanceofBuiltins(_) => 421usize, - Self::UnicornNoInvalidFetchOptions(_) => 422usize, - Self::UnicornNoInvalidRemoveEventListener(_) => 423usize, - Self::UnicornNoLengthAsSliceEnd(_) => 424usize, - Self::UnicornNoLonelyIf(_) => 425usize, - Self::UnicornNoMagicArrayFlatDepth(_) => 426usize, - Self::UnicornNoNegationInEqualityCheck(_) => 427usize, - Self::UnicornNoNestedTernary(_) => 428usize, - Self::UnicornNoNewArray(_) => 429usize, - Self::UnicornNoNewBuffer(_) => 430usize, - Self::UnicornNoNull(_) => 431usize, - Self::UnicornNoObjectAsDefaultParameter(_) => 432usize, - Self::UnicornNoProcessExit(_) => 433usize, - Self::UnicornNoSinglePromiseInPromiseMethods(_) => 434usize, - Self::UnicornNoStaticOnlyClass(_) => 435usize, - Self::UnicornNoThenable(_) => 436usize, - Self::UnicornNoThisAssignment(_) => 437usize, - Self::UnicornNoTypeofUndefined(_) => 438usize, - Self::UnicornNoUnnecessaryArrayFlatDepth(_) => 439usize, - Self::UnicornNoUnnecessaryArraySpliceCount(_) => 440usize, - Self::UnicornNoUnnecessaryAwait(_) => 441usize, - Self::UnicornNoUnnecessarySliceEnd(_) => 442usize, - Self::UnicornNoUnreadableArrayDestructuring(_) => 443usize, - Self::UnicornNoUnreadableIife(_) => 444usize, - Self::UnicornNoUselessCollectionArgument(_) => 445usize, - Self::UnicornNoUselessErrorCaptureStackTrace(_) => 446usize, - Self::UnicornNoUselessFallbackInSpread(_) => 447usize, - Self::UnicornNoUselessLengthCheck(_) => 448usize, - Self::UnicornNoUselessPromiseResolveReject(_) => 449usize, - Self::UnicornNoUselessSpread(_) => 450usize, - Self::UnicornNoUselessSwitchCase(_) => 451usize, - Self::UnicornNoUselessUndefined(_) => 452usize, - Self::UnicornNoZeroFractions(_) => 453usize, - Self::UnicornNumberLiteralCase(_) => 454usize, - Self::UnicornNumericSeparatorsStyle(_) => 455usize, - Self::UnicornPreferAddEventListener(_) => 456usize, - Self::UnicornPreferArrayFind(_) => 457usize, - Self::UnicornPreferArrayFlat(_) => 458usize, - Self::UnicornPreferArrayFlatMap(_) => 459usize, - Self::UnicornPreferArrayIndexOf(_) => 460usize, - Self::UnicornPreferArraySome(_) => 461usize, - Self::UnicornPreferAt(_) => 462usize, - Self::UnicornPreferBigintLiterals(_) => 463usize, - Self::UnicornPreferBlobReadingMethods(_) => 464usize, - Self::UnicornPreferClassFields(_) => 465usize, - Self::UnicornPreferClasslistToggle(_) => 466usize, - Self::UnicornPreferCodePoint(_) => 467usize, - Self::UnicornPreferDateNow(_) => 468usize, - Self::UnicornPreferDefaultParameters(_) => 469usize, - Self::UnicornPreferDomNodeAppend(_) => 470usize, - Self::UnicornPreferDomNodeDataset(_) => 471usize, - Self::UnicornPreferDomNodeRemove(_) => 472usize, - Self::UnicornPreferDomNodeTextContent(_) => 473usize, - Self::UnicornPreferEventTarget(_) => 474usize, - Self::UnicornPreferGlobalThis(_) => 475usize, - Self::UnicornPreferIncludes(_) => 476usize, - Self::UnicornPreferKeyboardEventKey(_) => 477usize, - Self::UnicornPreferLogicalOperatorOverTernary(_) => 478usize, - Self::UnicornPreferMathMinMax(_) => 479usize, - Self::UnicornPreferMathTrunc(_) => 480usize, - Self::UnicornPreferModernDomApis(_) => 481usize, - Self::UnicornPreferModernMathApis(_) => 482usize, - Self::UnicornPreferNativeCoercionFunctions(_) => 483usize, - Self::UnicornPreferNegativeIndex(_) => 484usize, - Self::UnicornPreferNodeProtocol(_) => 485usize, - Self::UnicornPreferNumberProperties(_) => 486usize, - Self::UnicornPreferObjectFromEntries(_) => 487usize, - Self::UnicornPreferOptionalCatchBinding(_) => 488usize, - Self::UnicornPreferPrototypeMethods(_) => 489usize, - Self::UnicornPreferQuerySelector(_) => 490usize, - Self::UnicornPreferReflectApply(_) => 491usize, - Self::UnicornPreferRegexpTest(_) => 492usize, - Self::UnicornPreferResponseStaticJson(_) => 493usize, - Self::UnicornPreferSetHas(_) => 494usize, - Self::UnicornPreferSetSize(_) => 495usize, - Self::UnicornPreferSpread(_) => 496usize, - Self::UnicornPreferStringRaw(_) => 497usize, - Self::UnicornPreferStringReplaceAll(_) => 498usize, - Self::UnicornPreferStringSlice(_) => 499usize, - Self::UnicornPreferStringStartsEndsWith(_) => 500usize, - Self::UnicornPreferStringTrimStartEnd(_) => 501usize, - Self::UnicornPreferStructuredClone(_) => 502usize, - Self::UnicornPreferTopLevelAwait(_) => 503usize, - Self::UnicornPreferTypeError(_) => 504usize, - Self::UnicornRequireArrayJoinSeparator(_) => 505usize, - Self::UnicornRequireModuleAttributes(_) => 506usize, - Self::UnicornRequireModuleSpecifiers(_) => 507usize, - Self::UnicornRequireNumberToFixedDigitsArgument(_) => 508usize, - Self::UnicornRequirePostMessageTargetOrigin(_) => 509usize, - Self::UnicornSwitchCaseBraces(_) => 510usize, - Self::UnicornTextEncodingIdentifierCase(_) => 511usize, - Self::UnicornThrowNewError(_) => 512usize, - Self::JsxA11YAltText(_) => 513usize, - Self::JsxA11YAnchorAmbiguousText(_) => 514usize, - Self::JsxA11YAnchorHasContent(_) => 515usize, - Self::JsxA11YAnchorIsValid(_) => 516usize, - Self::JsxA11YAriaActivedescendantHasTabindex(_) => 517usize, - Self::JsxA11YAriaProps(_) => 518usize, - Self::JsxA11YAriaProptypes(_) => 519usize, - Self::JsxA11YAriaRole(_) => 520usize, - Self::JsxA11YAriaUnsupportedElements(_) => 521usize, - Self::JsxA11YAutocompleteValid(_) => 522usize, - Self::JsxA11YClickEventsHaveKeyEvents(_) => 523usize, - Self::JsxA11YHeadingHasContent(_) => 524usize, - Self::JsxA11YHtmlHasLang(_) => 525usize, - Self::JsxA11YIframeHasTitle(_) => 526usize, - Self::JsxA11YImgRedundantAlt(_) => 527usize, - Self::JsxA11YLabelHasAssociatedControl(_) => 528usize, - Self::JsxA11YLang(_) => 529usize, - Self::JsxA11YMediaHasCaption(_) => 530usize, - Self::JsxA11YMouseEventsHaveKeyEvents(_) => 531usize, - Self::JsxA11YNoAccessKey(_) => 532usize, - Self::JsxA11YNoAriaHiddenOnFocusable(_) => 533usize, - Self::JsxA11YNoAutofocus(_) => 534usize, - Self::JsxA11YNoDistractingElements(_) => 535usize, - Self::JsxA11YNoNoninteractiveTabindex(_) => 536usize, - Self::JsxA11YNoRedundantRoles(_) => 537usize, - Self::JsxA11YNoStaticElementInteractions(_) => 538usize, - Self::JsxA11YPreferTagOverRole(_) => 539usize, - Self::JsxA11YRoleHasRequiredAriaProps(_) => 540usize, - Self::JsxA11YRoleSupportsAriaProps(_) => 541usize, - Self::JsxA11YScope(_) => 542usize, - Self::JsxA11YTabindexNoPositive(_) => 543usize, - Self::OxcApproxConstant(_) => 544usize, - Self::OxcBadArrayMethodOnArguments(_) => 545usize, - Self::OxcBadBitwiseOperator(_) => 546usize, - Self::OxcBadCharAtComparison(_) => 547usize, - Self::OxcBadComparisonSequence(_) => 548usize, - Self::OxcBadMinMaxFunc(_) => 549usize, - Self::OxcBadObjectLiteralComparison(_) => 550usize, - Self::OxcBadReplaceAllArg(_) => 551usize, - Self::OxcBranchesSharingCode(_) => 552usize, - Self::OxcConstComparisons(_) => 553usize, - Self::OxcDoubleComparisons(_) => 554usize, - Self::OxcErasingOp(_) => 555usize, - Self::OxcMisrefactoredAssignOp(_) => 556usize, - Self::OxcMissingThrow(_) => 557usize, - Self::OxcNoAccumulatingSpread(_) => 558usize, - Self::OxcNoAsyncAwait(_) => 559usize, - Self::OxcNoAsyncEndpointHandlers(_) => 560usize, - Self::OxcNoBarrelFile(_) => 561usize, - Self::OxcNoConstEnum(_) => 562usize, - Self::OxcNoMapSpread(_) => 563usize, - Self::OxcNoOptionalChaining(_) => 564usize, - Self::OxcNoRestSpreadProperties(_) => 565usize, - Self::OxcNoThisInExportedFunction(_) => 566usize, - Self::OxcNumberArgOutOfRange(_) => 567usize, - Self::OxcOnlyUsedInRecursion(_) => 568usize, - Self::OxcUninvokedArrayCallback(_) => 569usize, - Self::NextjsGoogleFontDisplay(_) => 570usize, - Self::NextjsGoogleFontPreconnect(_) => 571usize, - Self::NextjsInlineScriptId(_) => 572usize, - Self::NextjsNextScriptForGa(_) => 573usize, - Self::NextjsNoAssignModuleVariable(_) => 574usize, - Self::NextjsNoAsyncClientComponent(_) => 575usize, - Self::NextjsNoBeforeInteractiveScriptOutsideDocument(_) => 576usize, - Self::NextjsNoCssTags(_) => 577usize, - Self::NextjsNoDocumentImportInPage(_) => 578usize, - Self::NextjsNoDuplicateHead(_) => 579usize, - Self::NextjsNoHeadElement(_) => 580usize, - Self::NextjsNoHeadImportInDocument(_) => 581usize, - Self::NextjsNoHtmlLinkForPages(_) => 582usize, - Self::NextjsNoImgElement(_) => 583usize, - Self::NextjsNoPageCustomFont(_) => 584usize, - Self::NextjsNoScriptComponentInHead(_) => 585usize, - Self::NextjsNoStyledJsxInDocument(_) => 586usize, - Self::NextjsNoSyncScripts(_) => 587usize, - Self::NextjsNoTitleInDocumentHead(_) => 588usize, - Self::NextjsNoTypos(_) => 589usize, - Self::NextjsNoUnwantedPolyfillio(_) => 590usize, - Self::JsdocCheckAccess(_) => 591usize, - Self::JsdocCheckPropertyNames(_) => 592usize, - Self::JsdocCheckTagNames(_) => 593usize, - Self::JsdocEmptyTags(_) => 594usize, - Self::JsdocImplementsOnClasses(_) => 595usize, - Self::JsdocNoDefaults(_) => 596usize, - Self::JsdocRequireParam(_) => 597usize, - Self::JsdocRequireParamDescription(_) => 598usize, - Self::JsdocRequireParamName(_) => 599usize, - Self::JsdocRequireParamType(_) => 600usize, - Self::JsdocRequireProperty(_) => 601usize, - Self::JsdocRequirePropertyDescription(_) => 602usize, - Self::JsdocRequirePropertyName(_) => 603usize, - Self::JsdocRequirePropertyType(_) => 604usize, - Self::JsdocRequireReturns(_) => 605usize, - Self::JsdocRequireReturnsDescription(_) => 606usize, - Self::JsdocRequireReturnsType(_) => 607usize, - Self::JsdocRequireYields(_) => 608usize, - Self::PromiseAlwaysReturn(_) => 609usize, - Self::PromiseAvoidNew(_) => 610usize, - Self::PromiseCatchOrReturn(_) => 611usize, - Self::PromiseNoCallbackInPromise(_) => 612usize, - Self::PromiseNoMultipleResolved(_) => 613usize, - Self::PromiseNoNesting(_) => 614usize, - Self::PromiseNoNewStatics(_) => 615usize, - Self::PromiseNoPromiseInCallback(_) => 616usize, - Self::PromiseNoReturnInFinally(_) => 617usize, - Self::PromiseNoReturnWrap(_) => 618usize, - Self::PromiseParamNames(_) => 619usize, - Self::PromisePreferAwaitToCallbacks(_) => 620usize, - Self::PromisePreferAwaitToThen(_) => 621usize, - Self::PromisePreferCatch(_) => 622usize, - Self::PromiseSpecOnly(_) => 623usize, - Self::PromiseValidParams(_) => 624usize, - Self::VitestConsistentEachFor(_) => 625usize, - Self::VitestConsistentTestFilename(_) => 626usize, - Self::VitestConsistentVitestVi(_) => 627usize, - Self::VitestHoistedApisOnTop(_) => 628usize, - Self::VitestNoConditionalTests(_) => 629usize, - Self::VitestNoImportNodeTest(_) => 630usize, - Self::VitestNoUnneededAsyncExpectFunction(_) => 631usize, - Self::VitestPreferCalledOnce(_) => 632usize, - Self::VitestPreferCalledTimes(_) => 633usize, - Self::VitestPreferDescribeFunctionTitle(_) => 634usize, - Self::VitestPreferToBeFalsy(_) => 635usize, - Self::VitestPreferToBeObject(_) => 636usize, - Self::VitestPreferToBeTruthy(_) => 637usize, - Self::VitestRequireLocalTestContextForConcurrentSnapshots(_) => 638usize, - Self::VitestWarnTodo(_) => 639usize, - Self::NodeGlobalRequire(_) => 640usize, - Self::NodeNoExportsAssign(_) => 641usize, - Self::NodeNoNewRequire(_) => 642usize, - Self::NodeNoProcessEnv(_) => 643usize, - Self::VueDefineEmitsDeclaration(_) => 644usize, - Self::VueDefinePropsDeclaration(_) => 645usize, - Self::VueDefinePropsDestructuring(_) => 646usize, - Self::VueMaxProps(_) => 647usize, - Self::VueNoArrowFunctionsInWatch(_) => 648usize, - Self::VueNoDeprecatedDestroyedLifecycle(_) => 649usize, - Self::VueNoExportInScriptSetup(_) => 650usize, - Self::VueNoImportCompilerMacros(_) => 651usize, - Self::VueNoLifecycleAfterAwait(_) => 652usize, - Self::VueNoMultipleSlotArgs(_) => 653usize, - Self::VueNoRequiredPropWithDefault(_) => 654usize, - Self::VueNoThisInBeforeRouteEnter(_) => 655usize, - Self::VuePreferImportFromVue(_) => 656usize, - Self::VueRequireDefaultExport(_) => 657usize, - Self::VueRequireTypedRef(_) => 658usize, - Self::VueValidDefineEmits(_) => 659usize, - Self::VueValidDefineProps(_) => 660usize, + Self::ImportNoRelativeParentImports(_) => 0usize, + Self::ImportConsistentTypeSpecifierStyle(_) => 1usize, + Self::ImportDefault(_) => 2usize, + Self::ImportExport(_) => 3usize, + Self::ImportExportsLast(_) => 4usize, + Self::ImportExtensions(_) => 5usize, + Self::ImportFirst(_) => 6usize, + Self::ImportGroupExports(_) => 7usize, + Self::ImportMaxDependencies(_) => 8usize, + Self::ImportNamed(_) => 9usize, + Self::ImportNamespace(_) => 10usize, + Self::ImportNoAbsolutePath(_) => 11usize, + Self::ImportNoAmd(_) => 12usize, + Self::ImportNoAnonymousDefaultExport(_) => 13usize, + Self::ImportNoCommonjs(_) => 14usize, + Self::ImportNoCycle(_) => 15usize, + Self::ImportNoDefaultExport(_) => 16usize, + Self::ImportNoDuplicates(_) => 17usize, + Self::ImportNoDynamicRequire(_) => 18usize, + Self::ImportNoEmptyNamedBlocks(_) => 19usize, + Self::ImportNoMutableExports(_) => 20usize, + Self::ImportNoNamedAsDefault(_) => 21usize, + Self::ImportNoNamedAsDefaultMember(_) => 22usize, + Self::ImportNoNamedDefault(_) => 23usize, + Self::ImportNoNamedExport(_) => 24usize, + Self::ImportNoNamespace(_) => 25usize, + Self::ImportNoSelfImport(_) => 26usize, + Self::ImportNoUnassignedImport(_) => 27usize, + Self::ImportNoWebpackLoaderSyntax(_) => 28usize, + Self::ImportPreferDefaultExport(_) => 29usize, + Self::ImportUnambiguous(_) => 30usize, + Self::EslintAccessorPairs(_) => 31usize, + Self::EslintArrayCallbackReturn(_) => 32usize, + Self::EslintArrowBodyStyle(_) => 33usize, + Self::EslintBlockScopedVar(_) => 34usize, + Self::EslintCapitalizedComments(_) => 35usize, + Self::EslintClassMethodsUseThis(_) => 36usize, + Self::EslintComplexity(_) => 37usize, + Self::EslintConstructorSuper(_) => 38usize, + Self::EslintCurly(_) => 39usize, + Self::EslintDefaultCase(_) => 40usize, + Self::EslintDefaultCaseLast(_) => 41usize, + Self::EslintDefaultParamLast(_) => 42usize, + Self::EslintEqeqeq(_) => 43usize, + Self::EslintForDirection(_) => 44usize, + Self::EslintFuncNames(_) => 45usize, + Self::EslintFuncStyle(_) => 46usize, + Self::EslintGetterReturn(_) => 47usize, + Self::EslintGroupedAccessorPairs(_) => 48usize, + Self::EslintGuardForIn(_) => 49usize, + Self::EslintIdLength(_) => 50usize, + Self::EslintInitDeclarations(_) => 51usize, + Self::EslintMaxClassesPerFile(_) => 52usize, + Self::EslintMaxDepth(_) => 53usize, + Self::EslintMaxLines(_) => 54usize, + Self::EslintMaxLinesPerFunction(_) => 55usize, + Self::EslintMaxNestedCallbacks(_) => 56usize, + Self::EslintMaxParams(_) => 57usize, + Self::EslintMaxStatements(_) => 58usize, + Self::EslintNewCap(_) => 59usize, + Self::EslintNoAlert(_) => 60usize, + Self::EslintNoArrayConstructor(_) => 61usize, + Self::EslintNoAsyncPromiseExecutor(_) => 62usize, + Self::EslintNoAwaitInLoop(_) => 63usize, + Self::EslintNoBitwise(_) => 64usize, + Self::EslintNoCaller(_) => 65usize, + Self::EslintNoCaseDeclarations(_) => 66usize, + Self::EslintNoClassAssign(_) => 67usize, + Self::EslintNoCompareNegZero(_) => 68usize, + Self::EslintNoCondAssign(_) => 69usize, + Self::EslintNoConsole(_) => 70usize, + Self::EslintNoConstAssign(_) => 71usize, + Self::EslintNoConstantBinaryExpression(_) => 72usize, + Self::EslintNoConstantCondition(_) => 73usize, + Self::EslintNoConstructorReturn(_) => 74usize, + Self::EslintNoContinue(_) => 75usize, + Self::EslintNoControlRegex(_) => 76usize, + Self::EslintNoDebugger(_) => 77usize, + Self::EslintNoDeleteVar(_) => 78usize, + Self::EslintNoDivRegex(_) => 79usize, + Self::EslintNoDupeClassMembers(_) => 80usize, + Self::EslintNoDupeElseIf(_) => 81usize, + Self::EslintNoDupeKeys(_) => 82usize, + Self::EslintNoDuplicateCase(_) => 83usize, + Self::EslintNoDuplicateImports(_) => 84usize, + Self::EslintNoElseReturn(_) => 85usize, + Self::EslintNoEmpty(_) => 86usize, + Self::EslintNoEmptyCharacterClass(_) => 87usize, + Self::EslintNoEmptyFunction(_) => 88usize, + Self::EslintNoEmptyPattern(_) => 89usize, + Self::EslintNoEmptyStaticBlock(_) => 90usize, + Self::EslintNoEqNull(_) => 91usize, + Self::EslintNoEval(_) => 92usize, + Self::EslintNoExAssign(_) => 93usize, + Self::EslintNoExtendNative(_) => 94usize, + Self::EslintNoExtraBind(_) => 95usize, + Self::EslintNoExtraBooleanCast(_) => 96usize, + Self::EslintNoExtraLabel(_) => 97usize, + Self::EslintNoFallthrough(_) => 98usize, + Self::EslintNoFuncAssign(_) => 99usize, + Self::EslintNoGlobalAssign(_) => 100usize, + Self::EslintNoImplicitCoercion(_) => 101usize, + Self::EslintNoImportAssign(_) => 102usize, + Self::EslintNoInlineComments(_) => 103usize, + Self::EslintNoInnerDeclarations(_) => 104usize, + Self::EslintNoInvalidRegexp(_) => 105usize, + Self::EslintNoIrregularWhitespace(_) => 106usize, + Self::EslintNoIterator(_) => 107usize, + Self::EslintNoLabelVar(_) => 108usize, + Self::EslintNoLabels(_) => 109usize, + Self::EslintNoLoneBlocks(_) => 110usize, + Self::EslintNoLonelyIf(_) => 111usize, + Self::EslintNoLoopFunc(_) => 112usize, + Self::EslintNoLossOfPrecision(_) => 113usize, + Self::EslintNoMagicNumbers(_) => 114usize, + Self::EslintNoMisleadingCharacterClass(_) => 115usize, + Self::EslintNoMultiAssign(_) => 116usize, + Self::EslintNoMultiStr(_) => 117usize, + Self::EslintNoNegatedCondition(_) => 118usize, + Self::EslintNoNestedTernary(_) => 119usize, + Self::EslintNoNew(_) => 120usize, + Self::EslintNoNewFunc(_) => 121usize, + Self::EslintNoNewNativeNonconstructor(_) => 122usize, + Self::EslintNoNewWrappers(_) => 123usize, + Self::EslintNoNonoctalDecimalEscape(_) => 124usize, + Self::EslintNoObjCalls(_) => 125usize, + Self::EslintNoObjectConstructor(_) => 126usize, + Self::EslintNoParamReassign(_) => 127usize, + Self::EslintNoPlusplus(_) => 128usize, + Self::EslintNoPromiseExecutorReturn(_) => 129usize, + Self::EslintNoProto(_) => 130usize, + Self::EslintNoPrototypeBuiltins(_) => 131usize, + Self::EslintNoRedeclare(_) => 132usize, + Self::EslintNoRegexSpaces(_) => 133usize, + Self::EslintNoRestrictedGlobals(_) => 134usize, + Self::EslintNoRestrictedImports(_) => 135usize, + Self::EslintNoReturnAssign(_) => 136usize, + Self::EslintNoScriptUrl(_) => 137usize, + Self::EslintNoSelfAssign(_) => 138usize, + Self::EslintNoSelfCompare(_) => 139usize, + Self::EslintNoSequences(_) => 140usize, + Self::EslintNoSetterReturn(_) => 141usize, + Self::EslintNoShadowRestrictedNames(_) => 142usize, + Self::EslintNoSparseArrays(_) => 143usize, + Self::EslintNoTemplateCurlyInString(_) => 144usize, + Self::EslintNoTernary(_) => 145usize, + Self::EslintNoThisBeforeSuper(_) => 146usize, + Self::EslintNoThrowLiteral(_) => 147usize, + Self::EslintNoUnassignedVars(_) => 148usize, + Self::EslintNoUndef(_) => 149usize, + Self::EslintNoUndefined(_) => 150usize, + Self::EslintNoUnexpectedMultiline(_) => 151usize, + Self::EslintNoUnneededTernary(_) => 152usize, + Self::EslintNoUnreachable(_) => 153usize, + Self::EslintNoUnsafeFinally(_) => 154usize, + Self::EslintNoUnsafeNegation(_) => 155usize, + Self::EslintNoUnsafeOptionalChaining(_) => 156usize, + Self::EslintNoUnusedExpressions(_) => 157usize, + Self::EslintNoUnusedLabels(_) => 158usize, + Self::EslintNoUnusedPrivateClassMembers(_) => 159usize, + Self::EslintNoUnusedVars(_) => 160usize, + Self::EslintNoUselessBackreference(_) => 161usize, + Self::EslintNoUselessCall(_) => 162usize, + Self::EslintNoUselessCatch(_) => 163usize, + Self::EslintNoUselessComputedKey(_) => 164usize, + Self::EslintNoUselessConcat(_) => 165usize, + Self::EslintNoUselessConstructor(_) => 166usize, + Self::EslintNoUselessEscape(_) => 167usize, + Self::EslintNoUselessRename(_) => 168usize, + Self::EslintNoUselessReturn(_) => 169usize, + Self::EslintNoVar(_) => 170usize, + Self::EslintNoVoid(_) => 171usize, + Self::EslintNoWarningComments(_) => 172usize, + Self::EslintNoWith(_) => 173usize, + Self::EslintOperatorAssignment(_) => 174usize, + Self::EslintPreferDestructuring(_) => 175usize, + Self::EslintPreferExponentiationOperator(_) => 176usize, + Self::EslintPreferNumericLiterals(_) => 177usize, + Self::EslintPreferObjectHasOwn(_) => 178usize, + Self::EslintPreferObjectSpread(_) => 179usize, + Self::EslintPreferPromiseRejectErrors(_) => 180usize, + Self::EslintPreferRestParams(_) => 181usize, + Self::EslintPreferSpread(_) => 182usize, + Self::EslintPreferTemplate(_) => 183usize, + Self::EslintPreserveCaughtError(_) => 184usize, + Self::EslintRadix(_) => 185usize, + Self::EslintRequireAwait(_) => 186usize, + Self::EslintRequireYield(_) => 187usize, + Self::EslintSortImports(_) => 188usize, + Self::EslintSortKeys(_) => 189usize, + Self::EslintSortVars(_) => 190usize, + Self::EslintSymbolDescription(_) => 191usize, + Self::EslintUnicodeBom(_) => 192usize, + Self::EslintUseIsnan(_) => 193usize, + Self::EslintValidTypeof(_) => 194usize, + Self::EslintVarsOnTop(_) => 195usize, + Self::EslintYoda(_) => 196usize, + Self::TypescriptAdjacentOverloadSignatures(_) => 197usize, + Self::TypescriptArrayType(_) => 198usize, + Self::TypescriptAwaitThenable(_) => 199usize, + Self::TypescriptBanTsComment(_) => 200usize, + Self::TypescriptBanTslintComment(_) => 201usize, + Self::TypescriptBanTypes(_) => 202usize, + Self::TypescriptConsistentGenericConstructors(_) => 203usize, + Self::TypescriptConsistentIndexedObjectStyle(_) => 204usize, + Self::TypescriptConsistentTypeDefinitions(_) => 205usize, + Self::TypescriptConsistentTypeImports(_) => 206usize, + Self::TypescriptExplicitFunctionReturnType(_) => 207usize, + Self::TypescriptExplicitModuleBoundaryTypes(_) => 208usize, + Self::TypescriptNoArrayDelete(_) => 209usize, + Self::TypescriptNoBaseToString(_) => 210usize, + Self::TypescriptNoConfusingNonNullAssertion(_) => 211usize, + Self::TypescriptNoConfusingVoidExpression(_) => 212usize, + Self::TypescriptNoDeprecated(_) => 213usize, + Self::TypescriptNoDuplicateEnumValues(_) => 214usize, + Self::TypescriptNoDuplicateTypeConstituents(_) => 215usize, + Self::TypescriptNoDynamicDelete(_) => 216usize, + Self::TypescriptNoEmptyInterface(_) => 217usize, + Self::TypescriptNoEmptyObjectType(_) => 218usize, + Self::TypescriptNoExplicitAny(_) => 219usize, + Self::TypescriptNoExtraNonNullAssertion(_) => 220usize, + Self::TypescriptNoExtraneousClass(_) => 221usize, + Self::TypescriptNoFloatingPromises(_) => 222usize, + Self::TypescriptNoForInArray(_) => 223usize, + Self::TypescriptNoImpliedEval(_) => 224usize, + Self::TypescriptNoImportTypeSideEffects(_) => 225usize, + Self::TypescriptNoInferrableTypes(_) => 226usize, + Self::TypescriptNoMeaninglessVoidOperator(_) => 227usize, + Self::TypescriptNoMisusedNew(_) => 228usize, + Self::TypescriptNoMisusedPromises(_) => 229usize, + Self::TypescriptNoMisusedSpread(_) => 230usize, + Self::TypescriptNoMixedEnums(_) => 231usize, + Self::TypescriptNoNamespace(_) => 232usize, + Self::TypescriptNoNonNullAssertedNullishCoalescing(_) => 233usize, + Self::TypescriptNoNonNullAssertedOptionalChain(_) => 234usize, + Self::TypescriptNoNonNullAssertion(_) => 235usize, + Self::TypescriptNoRedundantTypeConstituents(_) => 236usize, + Self::TypescriptNoRequireImports(_) => 237usize, + Self::TypescriptNoRestrictedTypes(_) => 238usize, + Self::TypescriptNoThisAlias(_) => 239usize, + Self::TypescriptNoUnnecessaryBooleanLiteralCompare(_) => 240usize, + Self::TypescriptNoUnnecessaryParameterPropertyAssignment(_) => 241usize, + Self::TypescriptNoUnnecessaryTemplateExpression(_) => 242usize, + Self::TypescriptNoUnnecessaryTypeArguments(_) => 243usize, + Self::TypescriptNoUnnecessaryTypeAssertion(_) => 244usize, + Self::TypescriptNoUnnecessaryTypeConstraint(_) => 245usize, + Self::TypescriptNoUnsafeArgument(_) => 246usize, + Self::TypescriptNoUnsafeAssignment(_) => 247usize, + Self::TypescriptNoUnsafeCall(_) => 248usize, + Self::TypescriptNoUnsafeDeclarationMerging(_) => 249usize, + Self::TypescriptNoUnsafeEnumComparison(_) => 250usize, + Self::TypescriptNoUnsafeFunctionType(_) => 251usize, + Self::TypescriptNoUnsafeMemberAccess(_) => 252usize, + Self::TypescriptNoUnsafeReturn(_) => 253usize, + Self::TypescriptNoUnsafeTypeAssertion(_) => 254usize, + Self::TypescriptNoUnsafeUnaryMinus(_) => 255usize, + Self::TypescriptNoUselessEmptyExport(_) => 256usize, + Self::TypescriptNoVarRequires(_) => 257usize, + Self::TypescriptNoWrapperObjectTypes(_) => 258usize, + Self::TypescriptNonNullableTypeAssertionStyle(_) => 259usize, + Self::TypescriptOnlyThrowError(_) => 260usize, + Self::TypescriptPreferAsConst(_) => 261usize, + Self::TypescriptPreferEnumInitializers(_) => 262usize, + Self::TypescriptPreferForOf(_) => 263usize, + Self::TypescriptPreferFunctionType(_) => 264usize, + Self::TypescriptPreferIncludes(_) => 265usize, + Self::TypescriptPreferLiteralEnumMember(_) => 266usize, + Self::TypescriptPreferNamespaceKeyword(_) => 267usize, + Self::TypescriptPreferNullishCoalescing(_) => 268usize, + Self::TypescriptPreferOptionalChain(_) => 269usize, + Self::TypescriptPreferPromiseRejectErrors(_) => 270usize, + Self::TypescriptPreferReduceTypeParameter(_) => 271usize, + Self::TypescriptPreferReturnThisType(_) => 272usize, + Self::TypescriptPreferTsExpectError(_) => 273usize, + Self::TypescriptPromiseFunctionAsync(_) => 274usize, + Self::TypescriptRelatedGetterSetterPairs(_) => 275usize, + Self::TypescriptRequireArraySortCompare(_) => 276usize, + Self::TypescriptRequireAwait(_) => 277usize, + Self::TypescriptRestrictPlusOperands(_) => 278usize, + Self::TypescriptRestrictTemplateExpressions(_) => 279usize, + Self::TypescriptReturnAwait(_) => 280usize, + Self::TypescriptStrictBooleanExpressions(_) => 281usize, + Self::TypescriptSwitchExhaustivenessCheck(_) => 282usize, + Self::TypescriptTripleSlashReference(_) => 283usize, + Self::TypescriptUnboundMethod(_) => 284usize, + Self::TypescriptUseUnknownInCatchCallbackVariable(_) => 285usize, + Self::JestConsistentTestIt(_) => 286usize, + Self::JestExpectExpect(_) => 287usize, + Self::JestMaxExpects(_) => 288usize, + Self::JestMaxNestedDescribe(_) => 289usize, + Self::JestNoAliasMethods(_) => 290usize, + Self::JestNoCommentedOutTests(_) => 291usize, + Self::JestNoConditionalExpect(_) => 292usize, + Self::JestNoConditionalInTest(_) => 293usize, + Self::JestNoConfusingSetTimeout(_) => 294usize, + Self::JestNoDeprecatedFunctions(_) => 295usize, + Self::JestNoDisabledTests(_) => 296usize, + Self::JestNoDoneCallback(_) => 297usize, + Self::JestNoDuplicateHooks(_) => 298usize, + Self::JestNoExport(_) => 299usize, + Self::JestNoFocusedTests(_) => 300usize, + Self::JestNoHooks(_) => 301usize, + Self::JestNoIdenticalTitle(_) => 302usize, + Self::JestNoInterpolationInSnapshots(_) => 303usize, + Self::JestNoJasmineGlobals(_) => 304usize, + Self::JestNoLargeSnapshots(_) => 305usize, + Self::JestNoMocksImport(_) => 306usize, + Self::JestNoRestrictedJestMethods(_) => 307usize, + Self::JestNoRestrictedMatchers(_) => 308usize, + Self::JestNoStandaloneExpect(_) => 309usize, + Self::JestNoTestPrefixes(_) => 310usize, + Self::JestNoTestReturnStatement(_) => 311usize, + Self::JestNoUntypedMockFactory(_) => 312usize, + Self::JestPaddingAroundTestBlocks(_) => 313usize, + Self::JestPreferCalledWith(_) => 314usize, + Self::JestPreferComparisonMatcher(_) => 315usize, + Self::JestPreferEach(_) => 316usize, + Self::JestPreferEqualityMatcher(_) => 317usize, + Self::JestPreferExpectResolves(_) => 318usize, + Self::JestPreferHooksInOrder(_) => 319usize, + Self::JestPreferHooksOnTop(_) => 320usize, + Self::JestPreferJestMocked(_) => 321usize, + Self::JestPreferLowercaseTitle(_) => 322usize, + Self::JestPreferMockPromiseShorthand(_) => 323usize, + Self::JestPreferSpyOn(_) => 324usize, + Self::JestPreferStrictEqual(_) => 325usize, + Self::JestPreferToBe(_) => 326usize, + Self::JestPreferToContain(_) => 327usize, + Self::JestPreferToHaveBeenCalled(_) => 328usize, + Self::JestPreferToHaveBeenCalledTimes(_) => 329usize, + Self::JestPreferToHaveLength(_) => 330usize, + Self::JestPreferTodo(_) => 331usize, + Self::JestRequireHook(_) => 332usize, + Self::JestRequireToThrowMessage(_) => 333usize, + Self::JestRequireTopLevelDescribe(_) => 334usize, + Self::JestValidDescribeCallback(_) => 335usize, + Self::JestValidExpect(_) => 336usize, + Self::JestValidTitle(_) => 337usize, + Self::ReactButtonHasType(_) => 338usize, + Self::ReactCheckedRequiresOnchangeOrReadonly(_) => 339usize, + Self::ReactDisplayName(_) => 340usize, + Self::ReactExhaustiveDeps(_) => 341usize, + Self::ReactForbidDomProps(_) => 342usize, + Self::ReactForbidElements(_) => 343usize, + Self::ReactForwardRefUsesRef(_) => 344usize, + Self::ReactIframeMissingSandbox(_) => 345usize, + Self::ReactJsxBooleanValue(_) => 346usize, + Self::ReactJsxCurlyBracePresence(_) => 347usize, + Self::ReactJsxFilenameExtension(_) => 348usize, + Self::ReactJsxFragments(_) => 349usize, + Self::ReactJsxHandlerNames(_) => 350usize, + Self::ReactJsxKey(_) => 351usize, + Self::ReactJsxMaxDepth(_) => 352usize, + Self::ReactJsxNoCommentTextnodes(_) => 353usize, + Self::ReactJsxNoDuplicateProps(_) => 354usize, + Self::ReactJsxNoScriptUrl(_) => 355usize, + Self::ReactJsxNoTargetBlank(_) => 356usize, + Self::ReactJsxNoUndef(_) => 357usize, + Self::ReactJsxNoUselessFragment(_) => 358usize, + Self::ReactJsxPascalCase(_) => 359usize, + Self::ReactJsxPropsNoSpreadMulti(_) => 360usize, + Self::ReactJsxPropsNoSpreading(_) => 361usize, + Self::ReactNoArrayIndexKey(_) => 362usize, + Self::ReactNoChildrenProp(_) => 363usize, + Self::ReactNoDanger(_) => 364usize, + Self::ReactNoDangerWithChildren(_) => 365usize, + Self::ReactNoDidMountSetState(_) => 366usize, + Self::ReactNoDirectMutationState(_) => 367usize, + Self::ReactNoFindDomNode(_) => 368usize, + Self::ReactNoIsMounted(_) => 369usize, + Self::ReactNoNamespace(_) => 370usize, + Self::ReactNoRedundantShouldComponentUpdate(_) => 371usize, + Self::ReactNoRenderReturnValue(_) => 372usize, + Self::ReactNoSetState(_) => 373usize, + Self::ReactNoStringRefs(_) => 374usize, + Self::ReactNoThisInSfc(_) => 375usize, + Self::ReactNoUnescapedEntities(_) => 376usize, + Self::ReactNoUnknownProperty(_) => 377usize, + Self::ReactNoUnsafe(_) => 378usize, + Self::ReactNoWillUpdateSetState(_) => 379usize, + Self::ReactOnlyExportComponents(_) => 380usize, + Self::ReactPreferEs6Class(_) => 381usize, + Self::ReactReactInJsxScope(_) => 382usize, + Self::ReactRequireRenderReturn(_) => 383usize, + Self::ReactRulesOfHooks(_) => 384usize, + Self::ReactSelfClosingComp(_) => 385usize, + Self::ReactStateInConstructor(_) => 386usize, + Self::ReactStylePropObject(_) => 387usize, + Self::ReactVoidDomElementsNoChildren(_) => 388usize, + Self::ReactPerfJsxNoJsxAsProp(_) => 389usize, + Self::ReactPerfJsxNoNewArrayAsProp(_) => 390usize, + Self::ReactPerfJsxNoNewFunctionAsProp(_) => 391usize, + Self::ReactPerfJsxNoNewObjectAsProp(_) => 392usize, + Self::UnicornCatchErrorName(_) => 393usize, + Self::UnicornConsistentAssert(_) => 394usize, + Self::UnicornConsistentDateClone(_) => 395usize, + Self::UnicornConsistentEmptyArraySpread(_) => 396usize, + Self::UnicornConsistentExistenceIndexCheck(_) => 397usize, + Self::UnicornConsistentFunctionScoping(_) => 398usize, + Self::UnicornEmptyBraceSpaces(_) => 399usize, + Self::UnicornErrorMessage(_) => 400usize, + Self::UnicornEscapeCase(_) => 401usize, + Self::UnicornExplicitLengthCheck(_) => 402usize, + Self::UnicornFilenameCase(_) => 403usize, + Self::UnicornNewForBuiltins(_) => 404usize, + Self::UnicornNoAbusiveEslintDisable(_) => 405usize, + Self::UnicornNoAccessorRecursion(_) => 406usize, + Self::UnicornNoAnonymousDefaultExport(_) => 407usize, + Self::UnicornNoArrayCallbackReference(_) => 408usize, + Self::UnicornNoArrayForEach(_) => 409usize, + Self::UnicornNoArrayMethodThisArgument(_) => 410usize, + Self::UnicornNoArrayReduce(_) => 411usize, + Self::UnicornNoArrayReverse(_) => 412usize, + Self::UnicornNoArraySort(_) => 413usize, + Self::UnicornNoAwaitExpressionMember(_) => 414usize, + Self::UnicornNoAwaitInPromiseMethods(_) => 415usize, + Self::UnicornNoConsoleSpaces(_) => 416usize, + Self::UnicornNoDocumentCookie(_) => 417usize, + Self::UnicornNoEmptyFile(_) => 418usize, + Self::UnicornNoHexEscape(_) => 419usize, + Self::UnicornNoImmediateMutation(_) => 420usize, + Self::UnicornNoInstanceofArray(_) => 421usize, + Self::UnicornNoInstanceofBuiltins(_) => 422usize, + Self::UnicornNoInvalidFetchOptions(_) => 423usize, + Self::UnicornNoInvalidRemoveEventListener(_) => 424usize, + Self::UnicornNoLengthAsSliceEnd(_) => 425usize, + Self::UnicornNoLonelyIf(_) => 426usize, + Self::UnicornNoMagicArrayFlatDepth(_) => 427usize, + Self::UnicornNoNegationInEqualityCheck(_) => 428usize, + Self::UnicornNoNestedTernary(_) => 429usize, + Self::UnicornNoNewArray(_) => 430usize, + Self::UnicornNoNewBuffer(_) => 431usize, + Self::UnicornNoNull(_) => 432usize, + Self::UnicornNoObjectAsDefaultParameter(_) => 433usize, + Self::UnicornNoProcessExit(_) => 434usize, + Self::UnicornNoSinglePromiseInPromiseMethods(_) => 435usize, + Self::UnicornNoStaticOnlyClass(_) => 436usize, + Self::UnicornNoThenable(_) => 437usize, + Self::UnicornNoThisAssignment(_) => 438usize, + Self::UnicornNoTypeofUndefined(_) => 439usize, + Self::UnicornNoUnnecessaryArrayFlatDepth(_) => 440usize, + Self::UnicornNoUnnecessaryArraySpliceCount(_) => 441usize, + Self::UnicornNoUnnecessaryAwait(_) => 442usize, + Self::UnicornNoUnnecessarySliceEnd(_) => 443usize, + Self::UnicornNoUnreadableArrayDestructuring(_) => 444usize, + Self::UnicornNoUnreadableIife(_) => 445usize, + Self::UnicornNoUselessCollectionArgument(_) => 446usize, + Self::UnicornNoUselessErrorCaptureStackTrace(_) => 447usize, + Self::UnicornNoUselessFallbackInSpread(_) => 448usize, + Self::UnicornNoUselessLengthCheck(_) => 449usize, + Self::UnicornNoUselessPromiseResolveReject(_) => 450usize, + Self::UnicornNoUselessSpread(_) => 451usize, + Self::UnicornNoUselessSwitchCase(_) => 452usize, + Self::UnicornNoUselessUndefined(_) => 453usize, + Self::UnicornNoZeroFractions(_) => 454usize, + Self::UnicornNumberLiteralCase(_) => 455usize, + Self::UnicornNumericSeparatorsStyle(_) => 456usize, + Self::UnicornPreferAddEventListener(_) => 457usize, + Self::UnicornPreferArrayFind(_) => 458usize, + Self::UnicornPreferArrayFlat(_) => 459usize, + Self::UnicornPreferArrayFlatMap(_) => 460usize, + Self::UnicornPreferArrayIndexOf(_) => 461usize, + Self::UnicornPreferArraySome(_) => 462usize, + Self::UnicornPreferAt(_) => 463usize, + Self::UnicornPreferBigintLiterals(_) => 464usize, + Self::UnicornPreferBlobReadingMethods(_) => 465usize, + Self::UnicornPreferClassFields(_) => 466usize, + Self::UnicornPreferClasslistToggle(_) => 467usize, + Self::UnicornPreferCodePoint(_) => 468usize, + Self::UnicornPreferDateNow(_) => 469usize, + Self::UnicornPreferDefaultParameters(_) => 470usize, + Self::UnicornPreferDomNodeAppend(_) => 471usize, + Self::UnicornPreferDomNodeDataset(_) => 472usize, + Self::UnicornPreferDomNodeRemove(_) => 473usize, + Self::UnicornPreferDomNodeTextContent(_) => 474usize, + Self::UnicornPreferEventTarget(_) => 475usize, + Self::UnicornPreferGlobalThis(_) => 476usize, + Self::UnicornPreferIncludes(_) => 477usize, + Self::UnicornPreferKeyboardEventKey(_) => 478usize, + Self::UnicornPreferLogicalOperatorOverTernary(_) => 479usize, + Self::UnicornPreferMathMinMax(_) => 480usize, + Self::UnicornPreferMathTrunc(_) => 481usize, + Self::UnicornPreferModernDomApis(_) => 482usize, + Self::UnicornPreferModernMathApis(_) => 483usize, + Self::UnicornPreferNativeCoercionFunctions(_) => 484usize, + Self::UnicornPreferNegativeIndex(_) => 485usize, + Self::UnicornPreferNodeProtocol(_) => 486usize, + Self::UnicornPreferNumberProperties(_) => 487usize, + Self::UnicornPreferObjectFromEntries(_) => 488usize, + Self::UnicornPreferOptionalCatchBinding(_) => 489usize, + Self::UnicornPreferPrototypeMethods(_) => 490usize, + Self::UnicornPreferQuerySelector(_) => 491usize, + Self::UnicornPreferReflectApply(_) => 492usize, + Self::UnicornPreferRegexpTest(_) => 493usize, + Self::UnicornPreferResponseStaticJson(_) => 494usize, + Self::UnicornPreferSetHas(_) => 495usize, + Self::UnicornPreferSetSize(_) => 496usize, + Self::UnicornPreferSpread(_) => 497usize, + Self::UnicornPreferStringRaw(_) => 498usize, + Self::UnicornPreferStringReplaceAll(_) => 499usize, + Self::UnicornPreferStringSlice(_) => 500usize, + Self::UnicornPreferStringStartsEndsWith(_) => 501usize, + Self::UnicornPreferStringTrimStartEnd(_) => 502usize, + Self::UnicornPreferStructuredClone(_) => 503usize, + Self::UnicornPreferTopLevelAwait(_) => 504usize, + Self::UnicornPreferTypeError(_) => 505usize, + Self::UnicornRequireArrayJoinSeparator(_) => 506usize, + Self::UnicornRequireModuleAttributes(_) => 507usize, + Self::UnicornRequireModuleSpecifiers(_) => 508usize, + Self::UnicornRequireNumberToFixedDigitsArgument(_) => 509usize, + Self::UnicornRequirePostMessageTargetOrigin(_) => 510usize, + Self::UnicornSwitchCaseBraces(_) => 511usize, + Self::UnicornTextEncodingIdentifierCase(_) => 512usize, + Self::UnicornThrowNewError(_) => 513usize, + Self::JsxA11YAltText(_) => 514usize, + Self::JsxA11YAnchorAmbiguousText(_) => 515usize, + Self::JsxA11YAnchorHasContent(_) => 516usize, + Self::JsxA11YAnchorIsValid(_) => 517usize, + Self::JsxA11YAriaActivedescendantHasTabindex(_) => 518usize, + Self::JsxA11YAriaProps(_) => 519usize, + Self::JsxA11YAriaProptypes(_) => 520usize, + Self::JsxA11YAriaRole(_) => 521usize, + Self::JsxA11YAriaUnsupportedElements(_) => 522usize, + Self::JsxA11YAutocompleteValid(_) => 523usize, + Self::JsxA11YClickEventsHaveKeyEvents(_) => 524usize, + Self::JsxA11YHeadingHasContent(_) => 525usize, + Self::JsxA11YHtmlHasLang(_) => 526usize, + Self::JsxA11YIframeHasTitle(_) => 527usize, + Self::JsxA11YImgRedundantAlt(_) => 528usize, + Self::JsxA11YLabelHasAssociatedControl(_) => 529usize, + Self::JsxA11YLang(_) => 530usize, + Self::JsxA11YMediaHasCaption(_) => 531usize, + Self::JsxA11YMouseEventsHaveKeyEvents(_) => 532usize, + Self::JsxA11YNoAccessKey(_) => 533usize, + Self::JsxA11YNoAriaHiddenOnFocusable(_) => 534usize, + Self::JsxA11YNoAutofocus(_) => 535usize, + Self::JsxA11YNoDistractingElements(_) => 536usize, + Self::JsxA11YNoNoninteractiveTabindex(_) => 537usize, + Self::JsxA11YNoRedundantRoles(_) => 538usize, + Self::JsxA11YNoStaticElementInteractions(_) => 539usize, + Self::JsxA11YPreferTagOverRole(_) => 540usize, + Self::JsxA11YRoleHasRequiredAriaProps(_) => 541usize, + Self::JsxA11YRoleSupportsAriaProps(_) => 542usize, + Self::JsxA11YScope(_) => 543usize, + Self::JsxA11YTabindexNoPositive(_) => 544usize, + Self::OxcApproxConstant(_) => 545usize, + Self::OxcBadArrayMethodOnArguments(_) => 546usize, + Self::OxcBadBitwiseOperator(_) => 547usize, + Self::OxcBadCharAtComparison(_) => 548usize, + Self::OxcBadComparisonSequence(_) => 549usize, + Self::OxcBadMinMaxFunc(_) => 550usize, + Self::OxcBadObjectLiteralComparison(_) => 551usize, + Self::OxcBadReplaceAllArg(_) => 552usize, + Self::OxcBranchesSharingCode(_) => 553usize, + Self::OxcConstComparisons(_) => 554usize, + Self::OxcDoubleComparisons(_) => 555usize, + Self::OxcErasingOp(_) => 556usize, + Self::OxcMisrefactoredAssignOp(_) => 557usize, + Self::OxcMissingThrow(_) => 558usize, + Self::OxcNoAccumulatingSpread(_) => 559usize, + Self::OxcNoAsyncAwait(_) => 560usize, + Self::OxcNoAsyncEndpointHandlers(_) => 561usize, + Self::OxcNoBarrelFile(_) => 562usize, + Self::OxcNoConstEnum(_) => 563usize, + Self::OxcNoMapSpread(_) => 564usize, + Self::OxcNoOptionalChaining(_) => 565usize, + Self::OxcNoRestSpreadProperties(_) => 566usize, + Self::OxcNoThisInExportedFunction(_) => 567usize, + Self::OxcNumberArgOutOfRange(_) => 568usize, + Self::OxcOnlyUsedInRecursion(_) => 569usize, + Self::OxcUninvokedArrayCallback(_) => 570usize, + Self::NextjsGoogleFontDisplay(_) => 571usize, + Self::NextjsGoogleFontPreconnect(_) => 572usize, + Self::NextjsInlineScriptId(_) => 573usize, + Self::NextjsNextScriptForGa(_) => 574usize, + Self::NextjsNoAssignModuleVariable(_) => 575usize, + Self::NextjsNoAsyncClientComponent(_) => 576usize, + Self::NextjsNoBeforeInteractiveScriptOutsideDocument(_) => 577usize, + Self::NextjsNoCssTags(_) => 578usize, + Self::NextjsNoDocumentImportInPage(_) => 579usize, + Self::NextjsNoDuplicateHead(_) => 580usize, + Self::NextjsNoHeadElement(_) => 581usize, + Self::NextjsNoHeadImportInDocument(_) => 582usize, + Self::NextjsNoHtmlLinkForPages(_) => 583usize, + Self::NextjsNoImgElement(_) => 584usize, + Self::NextjsNoPageCustomFont(_) => 585usize, + Self::NextjsNoScriptComponentInHead(_) => 586usize, + Self::NextjsNoStyledJsxInDocument(_) => 587usize, + Self::NextjsNoSyncScripts(_) => 588usize, + Self::NextjsNoTitleInDocumentHead(_) => 589usize, + Self::NextjsNoTypos(_) => 590usize, + Self::NextjsNoUnwantedPolyfillio(_) => 591usize, + Self::JsdocCheckAccess(_) => 592usize, + Self::JsdocCheckPropertyNames(_) => 593usize, + Self::JsdocCheckTagNames(_) => 594usize, + Self::JsdocEmptyTags(_) => 595usize, + Self::JsdocImplementsOnClasses(_) => 596usize, + Self::JsdocNoDefaults(_) => 597usize, + Self::JsdocRequireParam(_) => 598usize, + Self::JsdocRequireParamDescription(_) => 599usize, + Self::JsdocRequireParamName(_) => 600usize, + Self::JsdocRequireParamType(_) => 601usize, + Self::JsdocRequireProperty(_) => 602usize, + Self::JsdocRequirePropertyDescription(_) => 603usize, + Self::JsdocRequirePropertyName(_) => 604usize, + Self::JsdocRequirePropertyType(_) => 605usize, + Self::JsdocRequireReturns(_) => 606usize, + Self::JsdocRequireReturnsDescription(_) => 607usize, + Self::JsdocRequireReturnsType(_) => 608usize, + Self::JsdocRequireYields(_) => 609usize, + Self::PromiseAlwaysReturn(_) => 610usize, + Self::PromiseAvoidNew(_) => 611usize, + Self::PromiseCatchOrReturn(_) => 612usize, + Self::PromiseNoCallbackInPromise(_) => 613usize, + Self::PromiseNoMultipleResolved(_) => 614usize, + Self::PromiseNoNesting(_) => 615usize, + Self::PromiseNoNewStatics(_) => 616usize, + Self::PromiseNoPromiseInCallback(_) => 617usize, + Self::PromiseNoReturnInFinally(_) => 618usize, + Self::PromiseNoReturnWrap(_) => 619usize, + Self::PromiseParamNames(_) => 620usize, + Self::PromisePreferAwaitToCallbacks(_) => 621usize, + Self::PromisePreferAwaitToThen(_) => 622usize, + Self::PromisePreferCatch(_) => 623usize, + Self::PromiseSpecOnly(_) => 624usize, + Self::PromiseValidParams(_) => 625usize, + Self::VitestConsistentEachFor(_) => 626usize, + Self::VitestConsistentTestFilename(_) => 627usize, + Self::VitestConsistentVitestVi(_) => 628usize, + Self::VitestHoistedApisOnTop(_) => 629usize, + Self::VitestNoConditionalTests(_) => 630usize, + Self::VitestNoImportNodeTest(_) => 631usize, + Self::VitestNoUnneededAsyncExpectFunction(_) => 632usize, + Self::VitestPreferCalledOnce(_) => 633usize, + Self::VitestPreferCalledTimes(_) => 634usize, + Self::VitestPreferDescribeFunctionTitle(_) => 635usize, + Self::VitestPreferToBeFalsy(_) => 636usize, + Self::VitestPreferToBeObject(_) => 637usize, + Self::VitestPreferToBeTruthy(_) => 638usize, + Self::VitestRequireLocalTestContextForConcurrentSnapshots(_) => 639usize, + Self::VitestWarnTodo(_) => 640usize, + Self::NodeGlobalRequire(_) => 641usize, + Self::NodeNoExportsAssign(_) => 642usize, + Self::NodeNoNewRequire(_) => 643usize, + Self::NodeNoProcessEnv(_) => 644usize, + Self::VueDefineEmitsDeclaration(_) => 645usize, + Self::VueDefinePropsDeclaration(_) => 646usize, + Self::VueDefinePropsDestructuring(_) => 647usize, + Self::VueMaxProps(_) => 648usize, + Self::VueNoArrowFunctionsInWatch(_) => 649usize, + Self::VueNoDeprecatedDestroyedLifecycle(_) => 650usize, + Self::VueNoExportInScriptSetup(_) => 651usize, + Self::VueNoImportCompilerMacros(_) => 652usize, + Self::VueNoLifecycleAfterAwait(_) => 653usize, + Self::VueNoMultipleSlotArgs(_) => 654usize, + Self::VueNoRequiredPropWithDefault(_) => 655usize, + Self::VueNoThisInBeforeRouteEnter(_) => 656usize, + Self::VuePreferImportFromVue(_) => 657usize, + Self::VueRequireDefaultExport(_) => 658usize, + Self::VueRequireTypedRef(_) => 659usize, + Self::VueValidDefineEmits(_) => 660usize, + Self::VueValidDefineProps(_) => 661usize, } } pub fn name(&self) -> &'static str { match self { + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::NAME, Self::ImportConsistentTypeSpecifierStyle(_) => ImportConsistentTypeSpecifierStyle::NAME, Self::ImportDefault(_) => ImportDefault::NAME, Self::ImportExport(_) => ImportExport::NAME, @@ -2760,6 +2764,7 @@ impl RuleEnum { } pub fn category(&self) -> RuleCategory { match self { + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::CATEGORY, Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::CATEGORY } @@ -3552,6 +3557,7 @@ impl RuleEnum { #[doc = r" This [`Rule`]'s auto-fix capabilities."] pub fn fix(&self) -> RuleFixMeta { match self { + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::FIX, Self::ImportConsistentTypeSpecifierStyle(_) => ImportConsistentTypeSpecifierStyle::FIX, Self::ImportDefault(_) => ImportDefault::FIX, Self::ImportExport(_) => ImportExport::FIX, @@ -4304,6 +4310,9 @@ impl RuleEnum { #[cfg(feature = "ruledocs")] pub fn documentation(&self) -> Option<&'static str> { match self { + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::documentation() + } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::documentation() } @@ -5235,6 +5244,10 @@ impl RuleEnum { generator: &mut schemars::SchemaGenerator, ) -> Option { match self { + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::config_schema(generator) + .or_else(|| ImportNoRelativeParentImports::schema(generator)) + } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::config_schema(generator) .or_else(|| ImportConsistentTypeSpecifierStyle::schema(generator)) @@ -7100,6 +7113,7 @@ impl RuleEnum { } pub fn plugin_name(&self) -> &'static str { match self { + Self::ImportNoRelativeParentImports(_) => "import", Self::ImportConsistentTypeSpecifierStyle(_) => "import", Self::ImportDefault(_) => "import", Self::ImportExport(_) => "import", @@ -7768,6 +7782,9 @@ impl RuleEnum { value: serde_json::Value, ) -> Result { match self { + Self::ImportNoRelativeParentImports(_) => Ok(Self::ImportNoRelativeParentImports( + ImportNoRelativeParentImports::from_configuration(value)?, + )), Self::ImportConsistentTypeSpecifierStyle(_) => { Ok(Self::ImportConsistentTypeSpecifierStyle( ImportConsistentTypeSpecifierStyle::from_configuration(value)?, @@ -9879,6 +9896,7 @@ impl RuleEnum { } pub fn to_configuration(&self) -> Option> { match self { + Self::ImportNoRelativeParentImports(rule) => rule.to_configuration(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.to_configuration(), Self::ImportDefault(rule) => rule.to_configuration(), Self::ImportExport(rule) => rule.to_configuration(), @@ -10548,6 +10566,7 @@ impl RuleEnum { } pub(crate) fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { match self { + Self::ImportNoRelativeParentImports(rule) => rule.run(node, ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run(node, ctx), Self::ImportDefault(rule) => rule.run(node, ctx), Self::ImportExport(rule) => rule.run(node, ctx), @@ -11213,6 +11232,7 @@ impl RuleEnum { } pub(crate) fn run_once(&self, ctx: &LintContext<'_>) { match self { + Self::ImportNoRelativeParentImports(rule) => rule.run_once(ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_once(ctx), Self::ImportDefault(rule) => rule.run_once(ctx), Self::ImportExport(rule) => rule.run_once(ctx), @@ -11882,6 +11902,7 @@ impl RuleEnum { ctx: &'c LintContext<'a>, ) { match self { + Self::ImportNoRelativeParentImports(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportDefault(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportExport(rule) => rule.run_on_jest_node(jest_node, ctx), @@ -12633,6 +12654,7 @@ impl RuleEnum { } pub(crate) fn should_run(&self, ctx: &ContextHost) -> bool { match self { + Self::ImportNoRelativeParentImports(rule) => rule.should_run(ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.should_run(ctx), Self::ImportDefault(rule) => rule.should_run(ctx), Self::ImportExport(rule) => rule.should_run(ctx), @@ -13298,6 +13320,9 @@ impl RuleEnum { } pub fn is_tsgolint_rule(&self) -> bool { match self { + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::IS_TSGOLINT_RULE + } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::IS_TSGOLINT_RULE } @@ -14225,6 +14250,7 @@ impl RuleEnum { } pub fn types_info(&self) -> Option<&'static AstTypesBitset> { match self { + Self::ImportNoRelativeParentImports(rule) => rule.types_info(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.types_info(), Self::ImportDefault(rule) => rule.types_info(), Self::ImportExport(rule) => rule.types_info(), @@ -14890,6 +14916,7 @@ impl RuleEnum { } pub fn run_info(&self) -> RuleRunFunctionsImplemented { match self { + Self::ImportNoRelativeParentImports(rule) => rule.run_info(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_info(), Self::ImportDefault(rule) => rule.run_info(), Self::ImportExport(rule) => rule.run_info(), @@ -15577,6 +15604,7 @@ impl PartialOrd for RuleEnum { } pub static RULES: std::sync::LazyLock> = std::sync::LazyLock::new(|| { vec![ + RuleEnum::ImportNoRelativeParentImports(ImportNoRelativeParentImports::default()), RuleEnum::ImportConsistentTypeSpecifierStyle(ImportConsistentTypeSpecifierStyle::default()), RuleEnum::ImportDefault(ImportDefault::default()), RuleEnum::ImportExport(ImportExport::default()), diff --git a/crates/oxc_linter/src/rules.rs b/crates/oxc_linter/src/rules.rs index d073e85255cf7..042fd55f8f65e 100644 --- a/crates/oxc_linter/src/rules.rs +++ b/crates/oxc_linter/src/rules.rs @@ -30,6 +30,7 @@ pub(crate) mod import { pub mod no_named_default; pub mod no_named_export; pub mod no_namespace; + pub mod no_relative_parent_imports; pub mod no_self_import; pub mod no_unassigned_import; pub mod no_webpack_loader_syntax; diff --git a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs new file mode 100644 index 0000000000000..4e27f17d9d51a --- /dev/null +++ b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs @@ -0,0 +1,178 @@ +use oxc_ast::{ + AstKind, + ast::{Argument, Expression}, +}; +use oxc_diagnostics::OxcDiagnostic; +use oxc_macros::declare_oxc_lint; +use oxc_span::Span; + +use crate::{AstNode, context::LintContext, rule::Rule}; + +fn no_relative_parent_imports_diagnostic(span: Span) -> OxcDiagnostic { + OxcDiagnostic::warn("Relative imports from parent directories are not allowed") + .with_help( + "Move the file to the same directory, use dependency injection, or convert to a package.", + ) + .with_label(span) +} + +#[derive(Debug, Default, Clone)] +pub struct NoRelativeParentImports; + +declare_oxc_lint!( + /// ### What it does + /// + /// Forbids importing modules from parent directories using relative paths. + /// + /// ### Why is this bad? + /// + /// This restriction enforces tree-like folder structures instead of complex + /// graph-like structures, making large codebases easier to maintain. + /// Dependencies flow in one direction (parent to child), which clarifies + /// module relationships. + /// + /// ### Examples + /// + /// Examples of **incorrect** code for this rule: + /// ```javascript + /// import foo from '../bar'; + /// import foo from '../../utils/helper'; + /// const baz = require('../config'); + /// export { qux } from '../shared'; + /// ``` + /// + /// Examples of **correct** code for this rule: + /// ```javascript + /// import foo from 'lodash'; + /// import a from './lib/a'; + /// import b from './b'; + /// ``` + NoRelativeParentImports, + import, + restriction, +); + +impl Rule for NoRelativeParentImports { + fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { + match node.kind() { + // ESM import declarations + AstKind::ImportDeclaration(import_decl) => { + if is_parent_import(import_decl.source.value.as_str()) { + ctx.diagnostic(no_relative_parent_imports_diagnostic(import_decl.source.span)); + } + } + // ESM export { } from '...' + AstKind::ExportNamedDeclaration(export_decl) => { + if let Some(source) = &export_decl.source + && is_parent_import(source.value.as_str()) + { + ctx.diagnostic(no_relative_parent_imports_diagnostic(source.span)); + } + } + // ESM export * from '...' + AstKind::ExportAllDeclaration(export_decl) => { + if is_parent_import(export_decl.source.value.as_str()) { + ctx.diagnostic(no_relative_parent_imports_diagnostic(export_decl.source.span)); + } + } + // Dynamic import expressions: import('../foo') + AstKind::ImportExpression(import_expr) => { + if let Expression::StringLiteral(str_literal) = &import_expr.source + && is_parent_import(str_literal.value.as_str()) + { + ctx.diagnostic(no_relative_parent_imports_diagnostic(str_literal.span)); + } + } + // CommonJS require() calls + AstKind::CallExpression(call_expr) => { + let Expression::Identifier(ident) = &call_expr.callee else { + return; + }; + + if ident.name != "require" { + return; + } + + if call_expr.arguments.len() != 1 { + return; + } + + let Argument::StringLiteral(str_literal) = &call_expr.arguments[0] else { + return; + }; + + if is_parent_import(str_literal.value.as_str()) { + ctx.diagnostic(no_relative_parent_imports_diagnostic(str_literal.span)); + } + } + _ => {} + } + } +} + +/// Check if the import path is a relative parent import (starts with `../` or is `..`) +fn is_parent_import(path: &str) -> bool { + path == ".." || path.starts_with("../") +} + +#[test] +fn test() { + use crate::tester::Tester; + + let pass = vec![ + // Package imports + r"import foo from 'lodash'", + r"import foo from '@scope/package'", + r"import foo from 'foo/bar'", + // Sibling imports + r"import foo from './foo'", + r"import foo from './foo/bar'", + // Current directory + r"import foo from '.'", + r"import foo from './'", + // Require - packages + r"var foo = require('lodash')", + r"var foo = require('@scope/package')", + // Require - siblings + r"var foo = require('./foo')", + r"var foo = require('./foo/bar')", + // Export - siblings + r"export { foo } from './foo'", + r"export * from './bar'", + // Absolute paths (handled by no-absolute-path rule, not this one) + r"import foo from '/absolute/path'", + // Dynamic imports - siblings OK + r"import('./foo')", + r"import('./sub/bar')", + ]; + + let fail = vec![ + // Basic parent imports + r"import foo from '../foo'", + r"import foo from '../../foo'", + r"import foo from '../../../foo'", + // Parent with subdirectory + r"import foo from '../foo/bar'", + r"import foo from '../../foo/bar/baz'", + // Parent index + r"import foo from '..'", + r"import foo from '../'", + // Require parent + r"var foo = require('../foo')", + r"var foo = require('../../foo')", + r"var foo = require('../foo/bar')", + // Export from parent + r"export { foo } from '../foo'", + r"export { foo } from '../../bar'", + r"export * from '../baz'", + r"export * from '../../qux'", + // Dynamic imports from parent + r"import('../foo')", + r"import('../../bar')", + ]; + + Tester::new(NoRelativeParentImports::NAME, NoRelativeParentImports::PLUGIN, pass, fail) + .change_rule_path("index.js") + .with_import_plugin(true) + .test_and_snapshot(); +} diff --git a/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap new file mode 100644 index 0000000000000..b2609097a3692 --- /dev/null +++ b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap @@ -0,0 +1,114 @@ +--- +source: crates/oxc_linter/src/tester.rs +--- + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../foo' + · ──────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../../foo' + · ─────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../../../foo' + · ────────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../foo/bar' + · ──────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../../foo/bar/baz' + · ─────────────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '..' + · ──── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from '../' + · ───── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:19] + 1 │ var foo = require('../foo') + · ──────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:19] + 1 │ var foo = require('../../foo') + · ─────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:19] + 1 │ var foo = require('../foo/bar') + · ──────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:21] + 1 │ export { foo } from '../foo' + · ──────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:21] + 1 │ export { foo } from '../../bar' + · ─────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:15] + 1 │ export * from '../baz' + · ──────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:15] + 1 │ export * from '../../qux' + · ─────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:8] + 1 │ import('../foo') + · ──────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:8] + 1 │ import('../../bar') + · ─────────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. From a891bc63445f11c739f6df3a26d98b13fcc15bd2 Mon Sep 17 00:00:00 2001 From: Valentin Maerten Date: Sun, 25 Jan 2026 20:01:17 +0100 Subject: [PATCH 2/6] =?UTF-8?q?=E2=9C=85=20test(linter):=20align=20tests?= =?UTF-8?q?=20with=20ESLint=20for=20no-relative-parent-imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../import/no_relative_parent_imports.rs | 79 +++++++---------- .../import_no_relative_parent_imports.snap | 86 ++++--------------- 2 files changed, 46 insertions(+), 119 deletions(-) diff --git a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs index 4e27f17d9d51a..a4346b50af2d5 100644 --- a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs +++ b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs @@ -110,9 +110,12 @@ impl Rule for NoRelativeParentImports { } } -/// Check if the import path is a relative parent import (starts with `../` or is `..`) +/// Check if the import path is a relative parent import. +/// Matches paths like `../foo`, `..`, `./../foo`, etc. fn is_parent_import(path: &str) -> bool { - path == ".." || path.starts_with("../") + path == ".." + || path.starts_with("../") + || path.starts_with("./../") // handles ./../foo pattern } #[test] @@ -120,55 +123,35 @@ fn test() { use crate::tester::Tester; let pass = vec![ - // Package imports - r"import foo from 'lodash'", - r"import foo from '@scope/package'", - r"import foo from 'foo/bar'", - // Sibling imports - r"import foo from './foo'", - r"import foo from './foo/bar'", - // Current directory - r"import foo from '.'", - r"import foo from './'", - // Require - packages - r"var foo = require('lodash')", - r"var foo = require('@scope/package')", - // Require - siblings - r"var foo = require('./foo')", - r"var foo = require('./foo/bar')", - // Export - siblings - r"export { foo } from './foo'", - r"export * from './bar'", - // Absolute paths (handled by no-absolute-path rule, not this one) - r"import foo from '/absolute/path'", - // Dynamic imports - siblings OK - r"import('./foo')", - r"import('./sub/bar')", + // ESLint test cases + r#"import foo from "./internal.js""#, + r#"import foo from "./app/index.js""#, + r#"import foo from "package""#, + r#"require("./internal.js")"#, + r#"require("./app/index.js")"#, + r#"require("package")"#, + r#"import("./internal.js")"#, + r#"import("./app/index.js")"#, + r#"import(".")"#, + r#"import("path")"#, + r#"import("package")"#, + r#"import("@scope/package")"#, + // Additional: exports (not tested by ESLint) + r#"export { foo } from "./sibling""#, + r#"export * from "./another""#, ]; let fail = vec![ - // Basic parent imports - r"import foo from '../foo'", - r"import foo from '../../foo'", - r"import foo from '../../../foo'", - // Parent with subdirectory - r"import foo from '../foo/bar'", - r"import foo from '../../foo/bar/baz'", - // Parent index - r"import foo from '..'", - r"import foo from '../'", - // Require parent - r"var foo = require('../foo')", - r"var foo = require('../../foo')", - r"var foo = require('../foo/bar')", - // Export from parent - r"export { foo } from '../foo'", - r"export { foo } from '../../bar'", - r"export * from '../baz'", - r"export * from '../../qux'", - // Dynamic imports from parent - r"import('../foo')", - r"import('../../bar')", + // ESLint test cases + r#"import foo from "../plugin.js""#, + r#"import foo from "./../plugin.js""#, + r#"import foo from "../../api/service""#, + r#"require("../plugin.js")"#, + r#"import("../plugin.js")"#, + r#"import("../../api/service")"#, + // Additional: exports (not tested by ESLint) + r#"export { foo } from "../parent""#, + r#"export * from "../parent""#, ]; Tester::new(NoRelativeParentImports::NAME, NoRelativeParentImports::PLUGIN, pass, fail) diff --git a/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap index b2609097a3692..5b141966ea163 100644 --- a/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap +++ b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap @@ -3,112 +3,56 @@ source: crates/oxc_linter/src/tester.rs --- ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:17] - 1 │ import foo from '../foo' - · ──────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:17] - 1 │ import foo from '../../foo' - · ─────────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:17] - 1 │ import foo from '../../../foo' + 1 │ import foo from "../plugin.js" · ────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:17] - 1 │ import foo from '../foo/bar' - · ──────────── + 1 │ import foo from "./../plugin.js" + · ──────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:17] - 1 │ import foo from '../../foo/bar/baz' + 1 │ import foo from "../../api/service" · ─────────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:17] - 1 │ import foo from '..' - · ──── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:17] - 1 │ import foo from '../' - · ───── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:19] - 1 │ var foo = require('../foo') - · ──────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:19] - 1 │ var foo = require('../../foo') - · ─────────── + ╭─[index.js:1:9] + 1 │ require("../plugin.js") + · ────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:19] - 1 │ var foo = require('../foo/bar') - · ──────────── + ╭─[index.js:1:8] + 1 │ import("../plugin.js") + · ────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:21] - 1 │ export { foo } from '../foo' - · ──────── + ╭─[index.js:1:8] + 1 │ import("../../api/service") + · ─────────────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:21] - 1 │ export { foo } from '../../bar' + 1 │ export { foo } from "../parent" · ─────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:15] - 1 │ export * from '../baz' - · ──────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:15] - 1 │ export * from '../../qux' + 1 │ export * from "../parent" · ─────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:8] - 1 │ import('../foo') - · ──────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. - - ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed - ╭─[index.js:1:8] - 1 │ import('../../bar') - · ─────────── - ╰──── - help: Move the file to the same directory, use dependency injection, or convert to a package. From 666a8a5f6cd31b6d9ee5eb94c892d4aaa902e8b8 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:49:38 +0000 Subject: [PATCH 3/6] [autofix.ci] apply automated fixes --- .../oxc_linter/src/rules/import/no_relative_parent_imports.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs index a4346b50af2d5..45d6a517bb723 100644 --- a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs +++ b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs @@ -113,9 +113,7 @@ impl Rule for NoRelativeParentImports { /// Check if the import path is a relative parent import. /// Matches paths like `../foo`, `..`, `./../foo`, etc. fn is_parent_import(path: &str) -> bool { - path == ".." - || path.starts_with("../") - || path.starts_with("./../") // handles ./../foo pattern + path == ".." || path.starts_with("../") || path.starts_with("./../") // handles ./../foo pattern } #[test] From 40fb4aac3c9a9d5a600be8e81d79db2fd371fa8d Mon Sep 17 00:00:00 2001 From: Cameron Clark Date: Mon, 26 Jan 2026 12:02:33 -0500 Subject: [PATCH 4/6] handle edge case (`./..`) --- .../import/no_relative_parent_imports.rs | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs index 45d6a517bb723..16199779b5518 100644 --- a/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs +++ b/crates/oxc_linter/src/rules/import/no_relative_parent_imports.rs @@ -56,10 +56,10 @@ impl Rule for NoRelativeParentImports { fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { match node.kind() { // ESM import declarations - AstKind::ImportDeclaration(import_decl) => { - if is_parent_import(import_decl.source.value.as_str()) { - ctx.diagnostic(no_relative_parent_imports_diagnostic(import_decl.source.span)); - } + AstKind::ImportDeclaration(import_decl) + if is_parent_import(import_decl.source.value.as_str()) => + { + ctx.diagnostic(no_relative_parent_imports_diagnostic(import_decl.source.span)); } // ESM export { } from '...' AstKind::ExportNamedDeclaration(export_decl) => { @@ -70,10 +70,10 @@ impl Rule for NoRelativeParentImports { } } // ESM export * from '...' - AstKind::ExportAllDeclaration(export_decl) => { - if is_parent_import(export_decl.source.value.as_str()) { - ctx.diagnostic(no_relative_parent_imports_diagnostic(export_decl.source.span)); - } + AstKind::ExportAllDeclaration(export_decl) + if is_parent_import(export_decl.source.value.as_str()) => + { + ctx.diagnostic(no_relative_parent_imports_diagnostic(export_decl.source.span)); } // Dynamic import expressions: import('../foo') AstKind::ImportExpression(import_expr) => { @@ -85,23 +85,12 @@ impl Rule for NoRelativeParentImports { } // CommonJS require() calls AstKind::CallExpression(call_expr) => { - let Expression::Identifier(ident) = &call_expr.callee else { - return; - }; - - if ident.name != "require" { - return; - } - - if call_expr.arguments.len() != 1 { - return; - } - - let Argument::StringLiteral(str_literal) = &call_expr.arguments[0] else { - return; - }; - - if is_parent_import(str_literal.value.as_str()) { + if let Expression::Identifier(ident) = &call_expr.callee + && ident.name == "require" + && call_expr.arguments.len() == 1 + && let Argument::StringLiteral(str_literal) = &call_expr.arguments[0] + && is_parent_import(str_literal.value.as_str()) + { ctx.diagnostic(no_relative_parent_imports_diagnostic(str_literal.span)); } } @@ -113,7 +102,11 @@ impl Rule for NoRelativeParentImports { /// Check if the import path is a relative parent import. /// Matches paths like `../foo`, `..`, `./../foo`, etc. fn is_parent_import(path: &str) -> bool { - path == ".." || path.starts_with("../") || path.starts_with("./../") // handles ./../foo pattern + let mut normalized = path; + while let Some(rest) = normalized.strip_prefix("./") { + normalized = rest; + } + normalized == ".." || normalized.starts_with("../") } #[test] @@ -147,9 +140,14 @@ fn test() { r#"require("../plugin.js")"#, r#"import("../plugin.js")"#, r#"import("../../api/service")"#, - // Additional: exports (not tested by ESLint) + // Additional: + r#"import foo from "./..""#, + r#"require("./..")"#, + r#"import("./..")"#, r#"export { foo } from "../parent""#, r#"export * from "../parent""#, + r#"export { foo } from "./..""#, + r#"export * from "./..""#, ]; Tester::new(NoRelativeParentImports::NAME, NoRelativeParentImports::PLUGIN, pass, fail) From d0c568d73eb76591c3f8e775b9748069c2a9cd9b Mon Sep 17 00:00:00 2001 From: Cameron Clark Date: Mon, 26 Jan 2026 12:02:47 -0500 Subject: [PATCH 5/6] update snap --- .../import_no_relative_parent_imports.snap | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap index 5b141966ea163..ae251ec304476 100644 --- a/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap +++ b/crates/oxc_linter/src/snapshots/import_no_relative_parent_imports.snap @@ -43,6 +43,27 @@ source: crates/oxc_linter/src/tester.rs ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:17] + 1 │ import foo from "./.." + · ────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:9] + 1 │ require("./..") + · ────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:8] + 1 │ import("./..") + · ────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed ╭─[index.js:1:21] 1 │ export { foo } from "../parent" @@ -56,3 +77,17 @@ source: crates/oxc_linter/src/tester.rs · ─────────── ╰──── help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:21] + 1 │ export { foo } from "./.." + · ────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. + + ⚠ eslint-plugin-import(no-relative-parent-imports): Relative imports from parent directories are not allowed + ╭─[index.js:1:15] + 1 │ export * from "./.." + · ────── + ╰──── + help: Move the file to the same directory, use dependency injection, or convert to a package. From c37943e91bac121a0ea691a61c1d988e74296a10 Mon Sep 17 00:00:00 2001 From: Cameron Clark Date: Mon, 26 Jan 2026 12:04:00 -0500 Subject: [PATCH 6/6] lintgen --- .../src/generated/rule_runner_impls.rs | 16 ++- crates/oxc_linter/src/generated/rules_enum.rs | 104 +++++++++--------- 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/crates/oxc_linter/src/generated/rule_runner_impls.rs b/crates/oxc_linter/src/generated/rule_runner_impls.rs index a8228135ad156..572472c21d485 100644 --- a/crates/oxc_linter/src/generated/rule_runner_impls.rs +++ b/crates/oxc_linter/src/generated/rule_runner_impls.rs @@ -8,11 +8,6 @@ use oxc_semantic::AstTypesBitset; use crate::rule::{RuleRunFunctionsImplemented, RuleRunner}; -impl RuleRunner for crate::rules::import::no_relative_parent_imports::NoRelativeParentImports { - const NODE_TYPES: Option<&AstTypesBitset> = None; - const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::Run; -} - impl RuleRunner for crate::rules::import::consistent_type_specifier_style::ConsistentTypeSpecifierStyle { @@ -158,6 +153,17 @@ impl RuleRunner for crate::rules::import::no_namespace::NoNamespace { const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnce; } +impl RuleRunner for crate::rules::import::no_relative_parent_imports::NoRelativeParentImports { + const NODE_TYPES: Option<&AstTypesBitset> = Some(&AstTypesBitset::from_types(&[ + AstType::CallExpression, + AstType::ExportAllDeclaration, + AstType::ExportNamedDeclaration, + AstType::ImportDeclaration, + AstType::ImportExpression, + ])); + const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::Run; +} + impl RuleRunner for crate::rules::import::no_self_import::NoSelfImport { const NODE_TYPES: Option<&AstTypesBitset> = None; const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnce; diff --git a/crates/oxc_linter/src/generated/rules_enum.rs b/crates/oxc_linter/src/generated/rules_enum.rs index 9ed109107af64..f715d9373a282 100644 --- a/crates/oxc_linter/src/generated/rules_enum.rs +++ b/crates/oxc_linter/src/generated/rules_enum.rs @@ -676,7 +676,6 @@ use crate::{ use oxc_semantic::AstTypesBitset; #[derive(Debug, Clone)] pub enum RuleEnum { - ImportNoRelativeParentImports(ImportNoRelativeParentImports), ImportConsistentTypeSpecifierStyle(ImportConsistentTypeSpecifierStyle), ImportDefault(ImportDefault), ImportExport(ImportExport), @@ -702,6 +701,7 @@ pub enum RuleEnum { ImportNoNamedDefault(ImportNoNamedDefault), ImportNoNamedExport(ImportNoNamedExport), ImportNoNamespace(ImportNoNamespace), + ImportNoRelativeParentImports(ImportNoRelativeParentImports), ImportNoSelfImport(ImportNoSelfImport), ImportNoUnassignedImport(ImportNoUnassignedImport), ImportNoWebpackLoaderSyntax(ImportNoWebpackLoaderSyntax), @@ -1346,32 +1346,32 @@ pub enum RuleEnum { impl RuleEnum { pub fn id(&self) -> usize { match self { - Self::ImportNoRelativeParentImports(_) => 0usize, - Self::ImportConsistentTypeSpecifierStyle(_) => 1usize, - Self::ImportDefault(_) => 2usize, - Self::ImportExport(_) => 3usize, - Self::ImportExportsLast(_) => 4usize, - Self::ImportExtensions(_) => 5usize, - Self::ImportFirst(_) => 6usize, - Self::ImportGroupExports(_) => 7usize, - Self::ImportMaxDependencies(_) => 8usize, - Self::ImportNamed(_) => 9usize, - Self::ImportNamespace(_) => 10usize, - Self::ImportNoAbsolutePath(_) => 11usize, - Self::ImportNoAmd(_) => 12usize, - Self::ImportNoAnonymousDefaultExport(_) => 13usize, - Self::ImportNoCommonjs(_) => 14usize, - Self::ImportNoCycle(_) => 15usize, - Self::ImportNoDefaultExport(_) => 16usize, - Self::ImportNoDuplicates(_) => 17usize, - Self::ImportNoDynamicRequire(_) => 18usize, - Self::ImportNoEmptyNamedBlocks(_) => 19usize, - Self::ImportNoMutableExports(_) => 20usize, - Self::ImportNoNamedAsDefault(_) => 21usize, - Self::ImportNoNamedAsDefaultMember(_) => 22usize, - Self::ImportNoNamedDefault(_) => 23usize, - Self::ImportNoNamedExport(_) => 24usize, - Self::ImportNoNamespace(_) => 25usize, + Self::ImportConsistentTypeSpecifierStyle(_) => 0usize, + Self::ImportDefault(_) => 1usize, + Self::ImportExport(_) => 2usize, + Self::ImportExportsLast(_) => 3usize, + Self::ImportExtensions(_) => 4usize, + Self::ImportFirst(_) => 5usize, + Self::ImportGroupExports(_) => 6usize, + Self::ImportMaxDependencies(_) => 7usize, + Self::ImportNamed(_) => 8usize, + Self::ImportNamespace(_) => 9usize, + Self::ImportNoAbsolutePath(_) => 10usize, + Self::ImportNoAmd(_) => 11usize, + Self::ImportNoAnonymousDefaultExport(_) => 12usize, + Self::ImportNoCommonjs(_) => 13usize, + Self::ImportNoCycle(_) => 14usize, + Self::ImportNoDefaultExport(_) => 15usize, + Self::ImportNoDuplicates(_) => 16usize, + Self::ImportNoDynamicRequire(_) => 17usize, + Self::ImportNoEmptyNamedBlocks(_) => 18usize, + Self::ImportNoMutableExports(_) => 19usize, + Self::ImportNoNamedAsDefault(_) => 20usize, + Self::ImportNoNamedAsDefaultMember(_) => 21usize, + Self::ImportNoNamedDefault(_) => 22usize, + Self::ImportNoNamedExport(_) => 23usize, + Self::ImportNoNamespace(_) => 24usize, + Self::ImportNoRelativeParentImports(_) => 25usize, Self::ImportNoSelfImport(_) => 26usize, Self::ImportNoUnassignedImport(_) => 27usize, Self::ImportNoWebpackLoaderSyntax(_) => 28usize, @@ -2012,7 +2012,6 @@ impl RuleEnum { } pub fn name(&self) -> &'static str { match self { - Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::NAME, Self::ImportConsistentTypeSpecifierStyle(_) => ImportConsistentTypeSpecifierStyle::NAME, Self::ImportDefault(_) => ImportDefault::NAME, Self::ImportExport(_) => ImportExport::NAME, @@ -2038,6 +2037,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => ImportNoNamedDefault::NAME, Self::ImportNoNamedExport(_) => ImportNoNamedExport::NAME, Self::ImportNoNamespace(_) => ImportNoNamespace::NAME, + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::NAME, Self::ImportNoSelfImport(_) => ImportNoSelfImport::NAME, Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::NAME, Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::NAME, @@ -2764,7 +2764,6 @@ impl RuleEnum { } pub fn category(&self) -> RuleCategory { match self { - Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::CATEGORY, Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::CATEGORY } @@ -2792,6 +2791,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => ImportNoNamedDefault::CATEGORY, Self::ImportNoNamedExport(_) => ImportNoNamedExport::CATEGORY, Self::ImportNoNamespace(_) => ImportNoNamespace::CATEGORY, + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::CATEGORY, Self::ImportNoSelfImport(_) => ImportNoSelfImport::CATEGORY, Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::CATEGORY, Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::CATEGORY, @@ -3557,7 +3557,6 @@ impl RuleEnum { #[doc = r" This [`Rule`]'s auto-fix capabilities."] pub fn fix(&self) -> RuleFixMeta { match self { - Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::FIX, Self::ImportConsistentTypeSpecifierStyle(_) => ImportConsistentTypeSpecifierStyle::FIX, Self::ImportDefault(_) => ImportDefault::FIX, Self::ImportExport(_) => ImportExport::FIX, @@ -3583,6 +3582,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => ImportNoNamedDefault::FIX, Self::ImportNoNamedExport(_) => ImportNoNamedExport::FIX, Self::ImportNoNamespace(_) => ImportNoNamespace::FIX, + Self::ImportNoRelativeParentImports(_) => ImportNoRelativeParentImports::FIX, Self::ImportNoSelfImport(_) => ImportNoSelfImport::FIX, Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::FIX, Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::FIX, @@ -4310,9 +4310,6 @@ impl RuleEnum { #[cfg(feature = "ruledocs")] pub fn documentation(&self) -> Option<&'static str> { match self { - Self::ImportNoRelativeParentImports(_) => { - ImportNoRelativeParentImports::documentation() - } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::documentation() } @@ -4342,6 +4339,9 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => ImportNoNamedDefault::documentation(), Self::ImportNoNamedExport(_) => ImportNoNamedExport::documentation(), Self::ImportNoNamespace(_) => ImportNoNamespace::documentation(), + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::documentation() + } Self::ImportNoSelfImport(_) => ImportNoSelfImport::documentation(), Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::documentation(), Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::documentation(), @@ -5244,10 +5244,6 @@ impl RuleEnum { generator: &mut schemars::SchemaGenerator, ) -> Option { match self { - Self::ImportNoRelativeParentImports(_) => { - ImportNoRelativeParentImports::config_schema(generator) - .or_else(|| ImportNoRelativeParentImports::schema(generator)) - } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::config_schema(generator) .or_else(|| ImportConsistentTypeSpecifierStyle::schema(generator)) @@ -5310,6 +5306,10 @@ impl RuleEnum { .or_else(|| ImportNoNamedExport::schema(generator)), Self::ImportNoNamespace(_) => ImportNoNamespace::config_schema(generator) .or_else(|| ImportNoNamespace::schema(generator)), + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::config_schema(generator) + .or_else(|| ImportNoRelativeParentImports::schema(generator)) + } Self::ImportNoSelfImport(_) => ImportNoSelfImport::config_schema(generator) .or_else(|| ImportNoSelfImport::schema(generator)), Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::config_schema(generator) @@ -7113,7 +7113,6 @@ impl RuleEnum { } pub fn plugin_name(&self) -> &'static str { match self { - Self::ImportNoRelativeParentImports(_) => "import", Self::ImportConsistentTypeSpecifierStyle(_) => "import", Self::ImportDefault(_) => "import", Self::ImportExport(_) => "import", @@ -7139,6 +7138,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => "import", Self::ImportNoNamedExport(_) => "import", Self::ImportNoNamespace(_) => "import", + Self::ImportNoRelativeParentImports(_) => "import", Self::ImportNoSelfImport(_) => "import", Self::ImportNoUnassignedImport(_) => "import", Self::ImportNoWebpackLoaderSyntax(_) => "import", @@ -7782,9 +7782,6 @@ impl RuleEnum { value: serde_json::Value, ) -> Result { match self { - Self::ImportNoRelativeParentImports(_) => Ok(Self::ImportNoRelativeParentImports( - ImportNoRelativeParentImports::from_configuration(value)?, - )), Self::ImportConsistentTypeSpecifierStyle(_) => { Ok(Self::ImportConsistentTypeSpecifierStyle( ImportConsistentTypeSpecifierStyle::from_configuration(value)?, @@ -7856,6 +7853,9 @@ impl RuleEnum { Self::ImportNoNamespace(_) => { Ok(Self::ImportNoNamespace(ImportNoNamespace::from_configuration(value)?)) } + Self::ImportNoRelativeParentImports(_) => Ok(Self::ImportNoRelativeParentImports( + ImportNoRelativeParentImports::from_configuration(value)?, + )), Self::ImportNoSelfImport(_) => { Ok(Self::ImportNoSelfImport(ImportNoSelfImport::from_configuration(value)?)) } @@ -9896,7 +9896,6 @@ impl RuleEnum { } pub fn to_configuration(&self) -> Option> { match self { - Self::ImportNoRelativeParentImports(rule) => rule.to_configuration(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.to_configuration(), Self::ImportDefault(rule) => rule.to_configuration(), Self::ImportExport(rule) => rule.to_configuration(), @@ -9922,6 +9921,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.to_configuration(), Self::ImportNoNamedExport(rule) => rule.to_configuration(), Self::ImportNoNamespace(rule) => rule.to_configuration(), + Self::ImportNoRelativeParentImports(rule) => rule.to_configuration(), Self::ImportNoSelfImport(rule) => rule.to_configuration(), Self::ImportNoUnassignedImport(rule) => rule.to_configuration(), Self::ImportNoWebpackLoaderSyntax(rule) => rule.to_configuration(), @@ -10566,7 +10566,6 @@ impl RuleEnum { } pub(crate) fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { match self { - Self::ImportNoRelativeParentImports(rule) => rule.run(node, ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run(node, ctx), Self::ImportDefault(rule) => rule.run(node, ctx), Self::ImportExport(rule) => rule.run(node, ctx), @@ -10592,6 +10591,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.run(node, ctx), Self::ImportNoNamedExport(rule) => rule.run(node, ctx), Self::ImportNoNamespace(rule) => rule.run(node, ctx), + Self::ImportNoRelativeParentImports(rule) => rule.run(node, ctx), Self::ImportNoSelfImport(rule) => rule.run(node, ctx), Self::ImportNoUnassignedImport(rule) => rule.run(node, ctx), Self::ImportNoWebpackLoaderSyntax(rule) => rule.run(node, ctx), @@ -11232,7 +11232,6 @@ impl RuleEnum { } pub(crate) fn run_once(&self, ctx: &LintContext<'_>) { match self { - Self::ImportNoRelativeParentImports(rule) => rule.run_once(ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_once(ctx), Self::ImportDefault(rule) => rule.run_once(ctx), Self::ImportExport(rule) => rule.run_once(ctx), @@ -11258,6 +11257,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.run_once(ctx), Self::ImportNoNamedExport(rule) => rule.run_once(ctx), Self::ImportNoNamespace(rule) => rule.run_once(ctx), + Self::ImportNoRelativeParentImports(rule) => rule.run_once(ctx), Self::ImportNoSelfImport(rule) => rule.run_once(ctx), Self::ImportNoUnassignedImport(rule) => rule.run_once(ctx), Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_once(ctx), @@ -11902,7 +11902,6 @@ impl RuleEnum { ctx: &'c LintContext<'a>, ) { match self { - Self::ImportNoRelativeParentImports(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportDefault(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportExport(rule) => rule.run_on_jest_node(jest_node, ctx), @@ -11928,6 +11927,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportNoNamedExport(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportNoNamespace(rule) => rule.run_on_jest_node(jest_node, ctx), + Self::ImportNoRelativeParentImports(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportNoSelfImport(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportNoUnassignedImport(rule) => rule.run_on_jest_node(jest_node, ctx), Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_on_jest_node(jest_node, ctx), @@ -12654,7 +12654,6 @@ impl RuleEnum { } pub(crate) fn should_run(&self, ctx: &ContextHost) -> bool { match self { - Self::ImportNoRelativeParentImports(rule) => rule.should_run(ctx), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.should_run(ctx), Self::ImportDefault(rule) => rule.should_run(ctx), Self::ImportExport(rule) => rule.should_run(ctx), @@ -12680,6 +12679,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.should_run(ctx), Self::ImportNoNamedExport(rule) => rule.should_run(ctx), Self::ImportNoNamespace(rule) => rule.should_run(ctx), + Self::ImportNoRelativeParentImports(rule) => rule.should_run(ctx), Self::ImportNoSelfImport(rule) => rule.should_run(ctx), Self::ImportNoUnassignedImport(rule) => rule.should_run(ctx), Self::ImportNoWebpackLoaderSyntax(rule) => rule.should_run(ctx), @@ -13320,9 +13320,6 @@ impl RuleEnum { } pub fn is_tsgolint_rule(&self) -> bool { match self { - Self::ImportNoRelativeParentImports(_) => { - ImportNoRelativeParentImports::IS_TSGOLINT_RULE - } Self::ImportConsistentTypeSpecifierStyle(_) => { ImportConsistentTypeSpecifierStyle::IS_TSGOLINT_RULE } @@ -13352,6 +13349,9 @@ impl RuleEnum { Self::ImportNoNamedDefault(_) => ImportNoNamedDefault::IS_TSGOLINT_RULE, Self::ImportNoNamedExport(_) => ImportNoNamedExport::IS_TSGOLINT_RULE, Self::ImportNoNamespace(_) => ImportNoNamespace::IS_TSGOLINT_RULE, + Self::ImportNoRelativeParentImports(_) => { + ImportNoRelativeParentImports::IS_TSGOLINT_RULE + } Self::ImportNoSelfImport(_) => ImportNoSelfImport::IS_TSGOLINT_RULE, Self::ImportNoUnassignedImport(_) => ImportNoUnassignedImport::IS_TSGOLINT_RULE, Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::IS_TSGOLINT_RULE, @@ -14250,7 +14250,6 @@ impl RuleEnum { } pub fn types_info(&self) -> Option<&'static AstTypesBitset> { match self { - Self::ImportNoRelativeParentImports(rule) => rule.types_info(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.types_info(), Self::ImportDefault(rule) => rule.types_info(), Self::ImportExport(rule) => rule.types_info(), @@ -14276,6 +14275,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.types_info(), Self::ImportNoNamedExport(rule) => rule.types_info(), Self::ImportNoNamespace(rule) => rule.types_info(), + Self::ImportNoRelativeParentImports(rule) => rule.types_info(), Self::ImportNoSelfImport(rule) => rule.types_info(), Self::ImportNoUnassignedImport(rule) => rule.types_info(), Self::ImportNoWebpackLoaderSyntax(rule) => rule.types_info(), @@ -14916,7 +14916,6 @@ impl RuleEnum { } pub fn run_info(&self) -> RuleRunFunctionsImplemented { match self { - Self::ImportNoRelativeParentImports(rule) => rule.run_info(), Self::ImportConsistentTypeSpecifierStyle(rule) => rule.run_info(), Self::ImportDefault(rule) => rule.run_info(), Self::ImportExport(rule) => rule.run_info(), @@ -14942,6 +14941,7 @@ impl RuleEnum { Self::ImportNoNamedDefault(rule) => rule.run_info(), Self::ImportNoNamedExport(rule) => rule.run_info(), Self::ImportNoNamespace(rule) => rule.run_info(), + Self::ImportNoRelativeParentImports(rule) => rule.run_info(), Self::ImportNoSelfImport(rule) => rule.run_info(), Self::ImportNoUnassignedImport(rule) => rule.run_info(), Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_info(), @@ -15604,7 +15604,6 @@ impl PartialOrd for RuleEnum { } pub static RULES: std::sync::LazyLock> = std::sync::LazyLock::new(|| { vec![ - RuleEnum::ImportNoRelativeParentImports(ImportNoRelativeParentImports::default()), RuleEnum::ImportConsistentTypeSpecifierStyle(ImportConsistentTypeSpecifierStyle::default()), RuleEnum::ImportDefault(ImportDefault::default()), RuleEnum::ImportExport(ImportExport::default()), @@ -15630,6 +15629,7 @@ pub static RULES: std::sync::LazyLock> = std::sync::LazyLock::new( RuleEnum::ImportNoNamedDefault(ImportNoNamedDefault::default()), RuleEnum::ImportNoNamedExport(ImportNoNamedExport::default()), RuleEnum::ImportNoNamespace(ImportNoNamespace::default()), + RuleEnum::ImportNoRelativeParentImports(ImportNoRelativeParentImports::default()), RuleEnum::ImportNoSelfImport(ImportNoSelfImport::default()), RuleEnum::ImportNoUnassignedImport(ImportNoUnassignedImport::default()), RuleEnum::ImportNoWebpackLoaderSyntax(ImportNoWebpackLoaderSyntax::default()),