From 1e4f683e6ecc040207b87636d16ddbabea10f477 Mon Sep 17 00:00:00 2001 From: camc314 <18101008+camc314@users.noreply.github.com> Date: Mon, 2 Feb 2026 14:58:46 +0000 Subject: [PATCH] refactor(linter): extract shared config setting logic (#18856) --- apps/oxlint/src/js_config.rs | 32 +++----- crates/oxc_linter/src/config/oxlintrc.rs | 97 ++++++++++++++++++------ 2 files changed, 84 insertions(+), 45 deletions(-) diff --git a/apps/oxlint/src/js_config.rs b/apps/oxlint/src/js_config.rs index 5183b4a8c329c..8cf50cdf4645a 100644 --- a/apps/oxlint/src/js_config.rs +++ b/apps/oxlint/src/js_config.rs @@ -106,29 +106,15 @@ fn parse_js_config_response(json: &str) -> Result, Vec bool { @@ -456,4 +465,48 @@ mod test { let merged = config1.merge(config2); assert_eq!(merged.schema, Some("schema2.json".to_string())); } + + #[test] + fn test_set_config_dir() { + let mut config: Oxlintrc = serde_json::from_str( + r#"{ + "jsPlugins": ["./plugin1.ts", { "name": "custom", "specifier": "./plugin2.ts" }], + "overrides": [{ "files": ["*.test.ts"], "jsPlugins": ["./override-plugin.ts"] }] + }"#, + ) + .unwrap(); + + // Verify initial state - config_dir should be empty PathBuf + let top_level_plugins = config.external_plugins.as_ref().unwrap(); + assert_eq!(top_level_plugins.len(), 2); + for entry in top_level_plugins { + assert_eq!(entry.config_dir, PathBuf::new()); + } + + let override_plugins = + config.overrides.iter().next().unwrap().external_plugins.as_ref().unwrap(); + assert_eq!(override_plugins.len(), 1); + for entry in override_plugins { + assert_eq!(entry.config_dir, PathBuf::new()); + } + + // Call set_config_dir + let new_config_dir = PathBuf::from("/project/config"); + config.set_config_dir(&new_config_dir); + + // Assert that all top-level plugins have the new config_dir + let top_level_plugins = config.external_plugins.as_ref().unwrap(); + assert_eq!(top_level_plugins.len(), 2); + for entry in top_level_plugins { + assert_eq!(entry.config_dir, new_config_dir); + } + + // Assert that all override plugins have the new config_dir + let override_plugins = + config.overrides.iter().next().unwrap().external_plugins.as_ref().unwrap(); + assert_eq!(override_plugins.len(), 1); + for entry in override_plugins { + assert_eq!(entry.config_dir, new_config_dir); + } + } }