diff --git a/apps/oxlint/fixtures/invalid_config_complex_enum/.oxlintrc.json b/apps/oxlint/fixtures/invalid_config_complex_enum/.oxlintrc.json new file mode 100644 index 0000000000000..db2f6bd1ccb61 --- /dev/null +++ b/apps/oxlint/fixtures/invalid_config_complex_enum/.oxlintrc.json @@ -0,0 +1,10 @@ +{ + "plugins": ["react"], + "categories": { + "correctness": "off" + }, + "rules": { + // Invalid config, valid options are "syntax" or "element" (or an object). + "react/jsx-fragments": ["error", "somethingelse"] + } +} diff --git a/apps/oxlint/src/lint.rs b/apps/oxlint/src/lint.rs index 26f7e96581ced..68a2b61b518fb 100644 --- a/apps/oxlint/src/lint.rs +++ b/apps/oxlint/src/lint.rs @@ -1517,4 +1517,11 @@ export { redundant }; fn test_valid_complex_config() { Tester::new().with_cwd("fixtures/valid_complex_config".into()).test_and_snapshot(&[]); } + + #[test] + fn test_invalid_config_invalid_config_complex_enum() { + Tester::new() + .with_cwd("fixtures/invalid_config_complex_enum".into()) + .test_and_snapshot(&[]); + } } diff --git a/apps/oxlint/src/snapshots/fixtures__invalid_config_complex_enum_@oxlint.snap b/apps/oxlint/src/snapshots/fixtures__invalid_config_complex_enum_@oxlint.snap new file mode 100644 index 0000000000000..3b99f17d80de6 --- /dev/null +++ b/apps/oxlint/src/snapshots/fixtures__invalid_config_complex_enum_@oxlint.snap @@ -0,0 +1,14 @@ +--- +source: apps/oxlint/src/tester.rs +--- +########## +arguments: +working directory: fixtures/invalid_config_complex_enum +---------- +Failed to parse oxlint configuration file. + + x Invalid configuration for rule `react/jsx-fragments`: data did not match any variant of untagged enum JsxFragments, received `"somethingelse"` + +---------- +CLI result: InvalidOptionConfig +---------- diff --git a/crates/oxc_linter/src/rules/react/jsx_fragments.rs b/crates/oxc_linter/src/rules/react/jsx_fragments.rs index 30adf71a4f401..915de499e0639 100644 --- a/crates/oxc_linter/src/rules/react/jsx_fragments.rs +++ b/crates/oxc_linter/src/rules/react/jsx_fragments.rs @@ -27,6 +27,8 @@ fn jsx_fragments_diagnostic(span: Span, mode: FragmentMode) -> OxcDiagnostic { OxcDiagnostic::warn(msg).with_help(help).with_label(span) } +// Generally we should prefer the string-only syntax for compatibility with the original ESLint rule, +// but we originally implemented the rule with only the object syntax, so we support both now. #[derive(Debug, Clone, JsonSchema, Deserialize)] #[serde(untagged)] pub enum JsxFragments { @@ -104,12 +106,8 @@ declare_oxc_lint!( ); impl Rule for JsxFragments { - // Generally we should prefer the string-only syntax for compatibility with the original ESLint rule, - // but we originally implemented the rule with only the object syntax, so we support both now. fn from_configuration(value: Value) -> Result { - Ok(serde_json::from_value::>(value) - .unwrap_or_default() - .into_inner()) + serde_json::from_value::>(value).map(DefaultRuleConfig::into_inner) } fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {