From 4c1673c2ca264ae1eaec7a710af0c8b53edb30be Mon Sep 17 00:00:00 2001 From: msdlisper <1170167213@qq.com> Date: Thu, 28 Dec 2023 03:30:25 +0800 Subject: [PATCH] feat(linter): use settings for eslint-plugin-jsx-a11y/html_has_lang (#1843) Use eslint configuration settings e.g. defining a custom component `components` for eslint-plugin-jsx-a11y/html_has_lang rule --- .../src/rules/jsx_a11y/html_has_lang.rs | 57 ++++++++++++------- .../src/snapshots/html_has_lang.snap | 8 +++ 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/crates/oxc_linter/src/rules/jsx_a11y/html_has_lang.rs b/crates/oxc_linter/src/rules/jsx_a11y/html_has_lang.rs index e4f75e076..f19f38710 100644 --- a/crates/oxc_linter/src/rules/jsx_a11y/html_has_lang.rs +++ b/crates/oxc_linter/src/rules/jsx_a11y/html_has_lang.rs @@ -11,7 +11,12 @@ use oxc_diagnostics::{ use oxc_macros::declare_oxc_lint; use oxc_span::Span; -use crate::{context::LintContext, rule::Rule, utils::has_jsx_prop_lowercase, AstNode}; +use crate::{ + context::LintContext, + rule::Rule, + utils::{get_element_type, has_jsx_prop_lowercase}, + AstNode, +}; #[derive(Debug, Error, Diagnostic)] enum HtmlHasLangDiagnostic { @@ -64,15 +69,19 @@ impl Rule for HtmlHasLang { let AstKind::JSXOpeningElement(jsx_el) = node.kind() else { return; }; - let JSXElementName::Identifier(identifier) = &jsx_el.name else { + + let Some(element_type) = get_element_type(ctx, jsx_el) else { return; }; - let name = identifier.name.as_str(); - if name != "html" { + if element_type != "html" { return; } + let JSXElementName::Identifier(identifier) = &jsx_el.name else { + return; + }; + has_jsx_prop_lowercase(jsx_el, "lang").map_or_else( || ctx.diagnostic(HtmlHasLangDiagnostic::MissingLangProp(identifier.span)), |lang_prop| { @@ -99,25 +108,35 @@ fn is_valid_lang_prop(item: &JSXAttributeItem) -> bool { fn test() { use crate::tester::Tester; + fn settings() -> serde_json::Value { + serde_json::json!({ + "jsx-a11y": { + "components": { + "HTMLTop": "html", + } + } + }) + } + let pass = vec![ - (r"
;", None), - (r#"