diff --git a/crates/oxc_linter/src/rules/jsx_a11y/no_distracting_elements.rs b/crates/oxc_linter/src/rules/jsx_a11y/no_distracting_elements.rs index 4de8a3ed5..7b1541e6d 100644 --- a/crates/oxc_linter/src/rules/jsx_a11y/no_distracting_elements.rs +++ b/crates/oxc_linter/src/rules/jsx_a11y/no_distracting_elements.rs @@ -6,7 +6,7 @@ use oxc_span::Span; use oxc_diagnostics::miette::{self, Diagnostic}; -use crate::{rule::Rule, LintContext}; +use crate::{rule::Rule, utils::get_element_type, LintContext}; #[derive(Debug, Error, Diagnostic)] #[error( @@ -55,8 +55,11 @@ impl Rule for NoDistractingElements { fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) { let AstKind::JSXOpeningElement(jsx_el) = node.kind() else { return }; let JSXElementName::Identifier(iden) = &jsx_el.name else { return }; + let Some(element_type) = get_element_type(ctx, jsx_el) else { + return; + }; - let name = iden.name.as_str(); + let name = element_type.as_str(); if let "marquee" | "blink" = name { ctx.diagnostic(NoDistractingElementsDiagnostic(iden.span)); @@ -67,25 +70,41 @@ impl Rule for NoDistractingElements { #[test] fn test() { use crate::tester::Tester; + fn config() -> serde_json::Value { + serde_json::json!([2,{ + "ignoreNonDOM": true + }]) + } + + fn settings() -> serde_json::Value { + serde_json::json!({ + "jsx-a11y": { + "components": { + "Blink": "blink", + "Marquee": "marquee" + } + } + }) + } let pass = vec![ - (r"
", None), - (r"", None), - (r"
", None), - (r"", None), - (r"
", None), + (r"
", None, None), + (r"", None, None), + (r"
", None, None), + (r"", None, None), + (r"
", None, None), ]; let fail = vec![ - (r"", None), - (r"", None), - (r"", None), - (r"", None), - (r"", None), - (r"", None), + (r"", None, None), + (r"", None, None), + (r"", None, None), + (r"", None, None), + (r"", None, None), + (r"", None, None), + (r"", Some(config()), Some(settings())), + (r"", Some(config()), Some(settings())), ]; - Tester::new(NoDistractingElements::NAME, pass, fail) - .with_jsx_a11y_plugin(true) - .test_and_snapshot(); + Tester::new_with_settings(NoDistractingElements::NAME, pass, fail).test_and_snapshot(); } diff --git a/crates/oxc_linter/src/snapshots/no_distracting_elements.snap b/crates/oxc_linter/src/snapshots/no_distracting_elements.snap index 8ffa846bf..c9d11dae5 100644 --- a/crates/oxc_linter/src/snapshots/no_distracting_elements.snap +++ b/crates/oxc_linter/src/snapshots/no_distracting_elements.snap @@ -45,4 +45,18 @@ expression: no_distracting_elements ╰──── help: Replace the or element with alternative, more accessible ways to achieve your desired visual effects. + ⚠ eslint-plugin-jsx-a11y(no-distracting-elements): Do not use or elements as they can create visual accessibility issues and are deprecated. + ╭─[no_distracting_elements.tsx:1:1] + 1 │ + · ───── + ╰──── + help: Replace the or element with alternative, more accessible ways to achieve your desired visual effects. + + ⚠ eslint-plugin-jsx-a11y(no-distracting-elements): Do not use or elements as they can create visual accessibility issues and are deprecated. + ╭─[no_distracting_elements.tsx:1:1] + 1 │ + · ─────── + ╰──── + help: Replace the or element with alternative, more accessible ways to achieve your desired visual effects. +