Latest Results
fix(linter_codegen): compute rule IDs relative to previous rule (#19350)
The main cause of merge conflicts in new rule PRs lately has been due to the calculation of the rule ID. Currently, adding a new rule causes the ID of every subsequent rule to increment by one, causing a large amount of lines to change.
With these changes, the rule ID is calculated relative to the ID of the previous rule. The actual ID values are calculated elsewhere. This means that adding a new rule doesn't result in a diff, because most IDs are unchanged since the rule order is not changed.
Here is an example `git diff` from running `just new-eslint-rule` with a new rule after these changes:
```diff
diff --git a/crates/oxc_linter/src/generated/rule_runner_impls.rs b/crates/oxc_linter/src/generated/rule_runner_impls.rs
index 3d3da94c59..3143f56b72 100644
--- a/crates/oxc_linter/src/generated/rule_runner_impls.rs
+++ b/crates/oxc_linter/src/generated/rule_runner_impls.rs
@@ -205,6 +205,11 @@ impl RuleRunner for crate::rules::import::unambiguous::Unambiguous {
const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::RunOnce;
}
+impl RuleRunner for crate::rules::eslint::consistent_this::ConsistentThis {
+ const NODE_TYPES: Option<&AstTypesBitset> = None;
+ const RUN_FUNCTIONS: RuleRunFunctionsImplemented = RuleRunFunctionsImplemented::Run;
+}
+
impl RuleRunner for crate::rules::eslint::accessor_pairs::AccessorPairs {
const NODE_TYPES: Option<&AstTypesBitset> = Some(&AstTypesBitset::from_types(&[
AstType::CallExpression,
diff --git a/crates/oxc_linter/src/generated/rules_enum.rs b/crates/oxc_linter/src/generated/rules_enum.rs
index 61c5e19c50..b94238878e 100644
--- a/crates/oxc_linter/src/generated/rules_enum.rs
+++ b/crates/oxc_linter/src/generated/rules_enum.rs
@@ -15,6 +15,7 @@ pub use crate::rules::eslint::block_scoped_var::BlockScopedVar as EslintBlockSco
pub use crate::rules::eslint::capitalized_comments::CapitalizedComments as EslintCapitalizedComments;
pub use crate::rules::eslint::class_methods_use_this::ClassMethodsUseThis as EslintClassMethodsUseThis;
pub use crate::rules::eslint::complexity::Complexity as EslintComplexity;
+pub use crate::rules::eslint::consistent_this::ConsistentThis as EslintConsistentThis;
pub use crate::rules::eslint::constructor_super::ConstructorSuper as EslintConstructorSuper;
pub use crate::rules::eslint::curly::Curly as EslintCurly;
pub use crate::rules::eslint::default_case::DefaultCase as EslintDefaultCase;
@@ -720,6 +721,7 @@ pub enum RuleEnum {
ImportNoWebpackLoaderSyntax(ImportNoWebpackLoaderSyntax),
ImportPreferDefaultExport(ImportPreferDefaultExport),
ImportUnambiguous(ImportUnambiguous),
+ EslintConsistentThis(EslintConsistentThis),
EslintAccessorPairs(EslintAccessorPairs),
EslintArrayCallbackReturn(EslintArrayCallbackReturn),
EslintArrowBodyStyle(EslintArrowBodyStyle),
@@ -1396,7 +1398,8 @@ const IMPORT_NO_UNASSIGNED_IMPORT_ID: usize = IMPORT_NO_SELF_IMPORT_ID + 1usize;
const IMPORT_NO_WEBPACK_LOADER_SYNTAX_ID: usize = IMPORT_NO_UNASSIGNED_IMPORT_ID + 1usize;
const IMPORT_PREFER_DEFAULT_EXPORT_ID: usize = IMPORT_NO_WEBPACK_LOADER_SYNTAX_ID + 1usize;
const IMPORT_UNAMBIGUOUS_ID: usize = IMPORT_PREFER_DEFAULT_EXPORT_ID + 1usize;
-const ESLINT_ACCESSOR_PAIRS_ID: usize = IMPORT_UNAMBIGUOUS_ID + 1usize;
+const ESLINT_CONSISTENT_THIS_ID: usize = IMPORT_UNAMBIGUOUS_ID + 1usize;
+const ESLINT_ACCESSOR_PAIRS_ID: usize = ESLINT_CONSISTENT_THIS_ID + 1usize;
const ESLINT_ARRAY_CALLBACK_RETURN_ID: usize = ESLINT_ACCESSOR_PAIRS_ID + 1usize;
const ESLINT_ARROW_BODY_STYLE_ID: usize = ESLINT_ARRAY_CALLBACK_RETURN_ID + 1usize;
const ESLINT_BLOCK_SCOPED_VAR_ID: usize = ESLINT_ARROW_BODY_STYLE_ID + 1usize;
@@ -2151,6 +2154,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => IMPORT_NO_WEBPACK_LOADER_SYNTAX_ID,
Self::ImportPreferDefaultExport(_) => IMPORT_PREFER_DEFAULT_EXPORT_ID,
Self::ImportUnambiguous(_) => IMPORT_UNAMBIGUOUS_ID,
+ Self::EslintConsistentThis(_) => ESLINT_CONSISTENT_THIS_ID,
Self::EslintAccessorPairs(_) => ESLINT_ACCESSOR_PAIRS_ID,
Self::EslintArrayCallbackReturn(_) => ESLINT_ARRAY_CALLBACK_RETURN_ID,
Self::EslintArrowBodyStyle(_) => ESLINT_ARROW_BODY_STYLE_ID,
@@ -2920,6 +2924,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::NAME,
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::NAME,
Self::ImportUnambiguous(_) => ImportUnambiguous::NAME,
+ Self::EslintConsistentThis(_) => EslintConsistentThis::NAME,
Self::EslintAccessorPairs(_) => EslintAccessorPairs::NAME,
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::NAME,
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::NAME,
@@ -3683,6 +3688,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::CATEGORY,
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::CATEGORY,
Self::ImportUnambiguous(_) => ImportUnambiguous::CATEGORY,
+ Self::EslintConsistentThis(_) => EslintConsistentThis::CATEGORY,
Self::EslintAccessorPairs(_) => EslintAccessorPairs::CATEGORY,
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::CATEGORY,
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::CATEGORY,
@@ -4487,6 +4493,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::FIX,
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::FIX,
Self::ImportUnambiguous(_) => ImportUnambiguous::FIX,
+ Self::EslintConsistentThis(_) => EslintConsistentThis::FIX,
Self::EslintAccessorPairs(_) => EslintAccessorPairs::FIX,
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::FIX,
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::FIX,
@@ -5255,6 +5262,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::documentation(),
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::documentation(),
Self::ImportUnambiguous(_) => ImportUnambiguous::documentation(),
+ Self::EslintConsistentThis(_) => EslintConsistentThis::documentation(),
Self::EslintAccessorPairs(_) => EslintAccessorPairs::documentation(),
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::documentation(),
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::documentation(),
@@ -6248,6 +6256,8 @@ impl RuleEnum {
}
Self::ImportUnambiguous(_) => ImportUnambiguous::config_schema(generator)
.or_else(|| ImportUnambiguous::schema(generator)),
+ Self::EslintConsistentThis(_) => EslintConsistentThis::config_schema(generator)
+ .or_else(|| EslintConsistentThis::schema(generator)),
Self::EslintAccessorPairs(_) => EslintAccessorPairs::config_schema(generator)
.or_else(|| EslintAccessorPairs::schema(generator)),
Self::EslintArrayCallbackReturn(_) => {
@@ -8093,6 +8103,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => "import",
Self::ImportPreferDefaultExport(_) => "import",
Self::ImportUnambiguous(_) => "import",
+ Self::EslintConsistentThis(_) => "eslint",
Self::EslintAccessorPairs(_) => "eslint",
Self::EslintArrayCallbackReturn(_) => "eslint",
Self::EslintArrowBodyStyle(_) => "eslint",
@@ -8831,6 +8842,9 @@ impl RuleEnum {
Self::ImportUnambiguous(_) => {
Ok(Self::ImportUnambiguous(ImportUnambiguous::from_configuration(value)?))
}
+ Self::EslintConsistentThis(_) => {
+ Ok(Self::EslintConsistentThis(EslintConsistentThis::from_configuration(value)?))
+ }
Self::EslintAccessorPairs(_) => {
Ok(Self::EslintAccessorPairs(EslintAccessorPairs::from_configuration(value)?))
}
@@ -10918,6 +10932,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.to_configuration(),
Self::ImportPreferDefaultExport(rule) => rule.to_configuration(),
Self::ImportUnambiguous(rule) => rule.to_configuration(),
+ Self::EslintConsistentThis(rule) => rule.to_configuration(),
Self::EslintAccessorPairs(rule) => rule.to_configuration(),
Self::EslintArrayCallbackReturn(rule) => rule.to_configuration(),
Self::EslintArrowBodyStyle(rule) => rule.to_configuration(),
@@ -11597,6 +11612,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.run(node, ctx),
Self::ImportPreferDefaultExport(rule) => rule.run(node, ctx),
Self::ImportUnambiguous(rule) => rule.run(node, ctx),
+ Self::EslintConsistentThis(rule) => rule.run(node, ctx),
Self::EslintAccessorPairs(rule) => rule.run(node, ctx),
Self::EslintArrayCallbackReturn(rule) => rule.run(node, ctx),
Self::EslintArrowBodyStyle(rule) => rule.run(node, ctx),
@@ -12272,6 +12288,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_once(ctx),
Self::ImportPreferDefaultExport(rule) => rule.run_once(ctx),
Self::ImportUnambiguous(rule) => rule.run_once(ctx),
+ Self::EslintConsistentThis(rule) => rule.run_once(ctx),
Self::EslintAccessorPairs(rule) => rule.run_once(ctx),
Self::EslintArrayCallbackReturn(rule) => rule.run_once(ctx),
Self::EslintArrowBodyStyle(rule) => rule.run_once(ctx),
@@ -12951,6 +12968,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_on_jest_node(jest_node, ctx),
Self::ImportPreferDefaultExport(rule) => rule.run_on_jest_node(jest_node, ctx),
Self::ImportUnambiguous(rule) => rule.run_on_jest_node(jest_node, ctx),
+ Self::EslintConsistentThis(rule) => rule.run_on_jest_node(jest_node, ctx),
Self::EslintAccessorPairs(rule) => rule.run_on_jest_node(jest_node, ctx),
Self::EslintArrayCallbackReturn(rule) => rule.run_on_jest_node(jest_node, ctx),
Self::EslintArrowBodyStyle(rule) => rule.run_on_jest_node(jest_node, ctx),
@@ -13712,6 +13730,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.should_run(ctx),
Self::ImportPreferDefaultExport(rule) => rule.should_run(ctx),
Self::ImportUnambiguous(rule) => rule.should_run(ctx),
+ Self::EslintConsistentThis(rule) => rule.should_run(ctx),
Self::EslintAccessorPairs(rule) => rule.should_run(ctx),
Self::EslintArrayCallbackReturn(rule) => rule.should_run(ctx),
Self::EslintArrowBodyStyle(rule) => rule.should_run(ctx),
@@ -14393,6 +14412,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::IS_TSGOLINT_RULE,
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::IS_TSGOLINT_RULE,
Self::ImportUnambiguous(_) => ImportUnambiguous::IS_TSGOLINT_RULE,
+ Self::EslintConsistentThis(_) => EslintConsistentThis::IS_TSGOLINT_RULE,
Self::EslintAccessorPairs(_) => EslintAccessorPairs::IS_TSGOLINT_RULE,
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::IS_TSGOLINT_RULE,
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::IS_TSGOLINT_RULE,
@@ -15335,6 +15355,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(_) => ImportNoWebpackLoaderSyntax::HAS_CONFIG,
Self::ImportPreferDefaultExport(_) => ImportPreferDefaultExport::HAS_CONFIG,
Self::ImportUnambiguous(_) => ImportUnambiguous::HAS_CONFIG,
+ Self::EslintConsistentThis(_) => EslintConsistentThis::HAS_CONFIG,
Self::EslintAccessorPairs(_) => EslintAccessorPairs::HAS_CONFIG,
Self::EslintArrayCallbackReturn(_) => EslintArrayCallbackReturn::HAS_CONFIG,
Self::EslintArrowBodyStyle(_) => EslintArrowBodyStyle::HAS_CONFIG,
@@ -16162,6 +16183,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.types_info(),
Self::ImportPreferDefaultExport(rule) => rule.types_info(),
Self::ImportUnambiguous(rule) => rule.types_info(),
+ Self::EslintConsistentThis(rule) => rule.types_info(),
Self::EslintAccessorPairs(rule) => rule.types_info(),
Self::EslintArrayCallbackReturn(rule) => rule.types_info(),
Self::EslintArrowBodyStyle(rule) => rule.types_info(),
@@ -16837,6 +16859,7 @@ impl RuleEnum {
Self::ImportNoWebpackLoaderSyntax(rule) => rule.run_info(),
Self::ImportPreferDefaultExport(rule) => rule.run_info(),
Self::ImportUnambiguous(rule) => rule.run_info(),
+ Self::EslintConsistentThis(rule) => rule.run_info(),
Self::EslintAccessorPairs(rule) => rule.run_info(),
Self::EslintArrayCallbackReturn(rule) => rule.run_info(),
Self::EslintArrowBodyStyle(rule) => rule.run_info(),
@@ -17534,6 +17557,7 @@ pub static RULES: std::sync::LazyLock<Vec<RuleEnum>> = std::sync::LazyLock::new(
RuleEnum::ImportNoWebpackLoaderSyntax(ImportNoWebpackLoaderSyntax::default()),
RuleEnum::ImportPreferDefaultExport(ImportPreferDefaultExport::default()),
RuleEnum::ImportUnambiguous(ImportUnambiguous::default()),
+ RuleEnum::EslintConsistentThis(EslintConsistentThis::default()),
RuleEnum::EslintAccessorPairs(EslintAccessorPairs::default()),
RuleEnum::EslintArrayCallbackReturn(EslintArrayCallbackReturn::default()),
RuleEnum::EslintArrowBodyStyle(EslintArrowBodyStyle::default()),
``` Active Branches
#193480%
#193450%
#192850%
Ā© 2026 CodSpeed Technology