diff --git a/apps/oxlint/fixtures/cli/extends_env/.oxlintrc.json b/apps/oxlint/fixtures/cli/extends_env/.oxlintrc.json new file mode 100644 index 0000000000000..2f3687050b2a1 --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/.oxlintrc.json @@ -0,0 +1,9 @@ +{ + "categories": { "correctness": "off"}, + "env": { + "node": true + }, + "rules": { + "no-undef": "error" + } +} diff --git a/apps/oxlint/fixtures/cli/extends_env/extends/.oxlintrc.json b/apps/oxlint/fixtures/cli/extends_env/extends/.oxlintrc.json new file mode 100644 index 0000000000000..9b97da2b3af29 --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/extends/.oxlintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["../.oxlintrc.json"], + "rules": { + "no-undef": "error" + } +} diff --git a/apps/oxlint/fixtures/cli/extends_env/extends/test.js b/apps/oxlint/fixtures/cli/extends_env/extends/test.js new file mode 100644 index 0000000000000..8609d075540eb --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/extends/test.js @@ -0,0 +1 @@ +console.log('a'); diff --git a/apps/oxlint/fixtures/cli/extends_env/overrides_extends/.oxlintrc.json b/apps/oxlint/fixtures/cli/extends_env/overrides_extends/.oxlintrc.json new file mode 100644 index 0000000000000..1460f78d2a353 --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/overrides_extends/.oxlintrc.json @@ -0,0 +1,9 @@ +{ + "extends": ["../.oxlintrc.json"], + "env": { + "node": false + }, + "rules": { + "no-undef": "error" + } +} diff --git a/apps/oxlint/fixtures/cli/extends_env/overrides_extends/test.js b/apps/oxlint/fixtures/cli/extends_env/overrides_extends/test.js new file mode 100644 index 0000000000000..02083ce5ef28d --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/overrides_extends/test.js @@ -0,0 +1,2 @@ +// only this file should report, because we override the extends env +console.log('a'); diff --git a/apps/oxlint/fixtures/cli/extends_env/test.js b/apps/oxlint/fixtures/cli/extends_env/test.js new file mode 100644 index 0000000000000..8609d075540eb --- /dev/null +++ b/apps/oxlint/fixtures/cli/extends_env/test.js @@ -0,0 +1 @@ +console.log('a'); diff --git a/apps/oxlint/src/lint.rs b/apps/oxlint/src/lint.rs index 35aa3a1f88fc7..0ce9ae56c9ef6 100644 --- a/apps/oxlint/src/lint.rs +++ b/apps/oxlint/src/lint.rs @@ -1186,6 +1186,12 @@ mod test { Tester::new().with_cwd("fixtures/cli/extends_config".into()).test_and_snapshot(args); } + #[test] + fn test_extends_env() { + let args = &[]; + Tester::new().with_cwd("fixtures/cli/extends_env".into()).test_and_snapshot(args); + } + #[test] fn test_nested_config_multi_file_analysis_imports() { let args = &["issue_10054"]; diff --git a/apps/oxlint/src/snapshots/fixtures__cli__extends_env_@oxlint.snap b/apps/oxlint/src/snapshots/fixtures__cli__extends_env_@oxlint.snap new file mode 100644 index 0000000000000..a088ea2948319 --- /dev/null +++ b/apps/oxlint/src/snapshots/fixtures__cli__extends_env_@oxlint.snap @@ -0,0 +1,21 @@ +--- +source: apps/oxlint/src/tester.rs +--- +########## +arguments: +working directory: fixtures/cli/extends_env +---------- + + x eslint(no-undef): 'console' is not defined. + ,-[overrides_extends/test.js:2:1] + 1 | // only this file should report, because we override the extends env + 2 | console.log('a'); + : ^^^^^^^ + `---- + help: Either define 'console' or remove the reference to it. If 'console' is a global variable, add it to the 'globals' configuration. + +Found 0 warnings and 1 error. +Finished in ms on 3 files using 1 threads. +---------- +CLI result: LintFoundErrors +---------- diff --git a/crates/oxc_linter/src/config/oxlintrc.rs b/crates/oxc_linter/src/config/oxlintrc.rs index a6b5094bf5d35..f173c859ef248 100644 --- a/crates/oxc_linter/src/config/oxlintrc.rs +++ b/crates/oxc_linter/src/config/oxlintrc.rs @@ -359,9 +359,11 @@ impl Oxlintrc { .collect::>(); let settings = self.settings.clone(); - let env = self.env.clone(); let globals = self.globals.clone(); + let mut env = other.env; + self.env.override_envs(&mut env); + let mut overrides = other.overrides; overrides.extend(self.overrides.clone());