From e3d972680055a4ca5317e94ed12e228a59b56c61 Mon Sep 17 00:00:00 2001 From: Victorien Elvinger Date: Thu, 7 Nov 2024 20:45:08 +0100 Subject: [PATCH] refactor(aria): partially migrate roles from aria to aria-metadata --- crates/biome_aria/src/lib.rs | 20 -- crates/biome_aria/src/roles.rs | 172 +++++++------ crates/biome_aria_metadata/aria-data.json | 2 +- .../src/lint/a11y/no_redundant_roles.rs | 17 +- .../use_aria_props_supported_by_role.rs | 60 +---- .../a11y/useAriaPropsForRole/invalid.jsx | 2 - .../a11y/useAriaPropsForRole/invalid.jsx.snap | 92 ++----- .../a11y/useValidAriaValues/invalid.jsx.snap | 4 +- .../noStaticElementInteractions/invalid.jsx | 2 +- .../invalid.jsx.snap | 27 +-- .../deprecated.jsx | 11 + .../deprecated.jsx.snap | 19 ++ .../useAriaPropsSupportedByRole/invalid.jsx | 11 - .../invalid.jsx.snap | 225 ++---------------- .../useAriaPropsSupportedByRole/valid.jsx | 5 +- .../valid.jsx.snap | 5 +- 16 files changed, 172 insertions(+), 502 deletions(-) create mode 100644 crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/deprecated.jsx create mode 100644 crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/deprecated.jsx.snap diff --git a/crates/biome_aria/src/lib.rs b/crates/biome_aria/src/lib.rs index 4ed52f060bc5..c76a91ca0f68 100644 --- a/crates/biome_aria/src/lib.rs +++ b/crates/biome_aria/src/lib.rs @@ -21,23 +21,3 @@ pub use roles::AriaRoles; pub fn is_aria_property_valid(property: &str) -> bool { AriaAttribute::from_str(property).is_ok() } - -#[cfg(test)] -mod test { - use crate::roles::AriaRoles; - - #[test] - fn property_is_required() { - let roles = AriaRoles; - - let role = roles.get_role("checkbox"); - - assert!(role.is_some()); - - let role = role.unwrap(); - - assert!(role.is_property_required("aria-checked")); - assert!(!role.is_property_required("aria-sort")); - assert!(!role.is_property_required("aria-bnlabla")); - } -} diff --git a/crates/biome_aria/src/roles.rs b/crates/biome_aria/src/roles.rs index cc08604e3f09..dc2afbebafc3 100644 --- a/crates/biome_aria/src/roles.rs +++ b/crates/biome_aria/src/roles.rs @@ -1,5 +1,5 @@ use crate::{define_role, is_aria_property_valid}; -use biome_aria_metadata::AriaAttribute; +use biome_aria_metadata::{AriaAttribute, AriaRole}; use rustc_hash::FxHashMap; use std::fmt::Debug; use std::slice::Iter; @@ -1054,112 +1054,109 @@ impl<'a> AriaRoles { element: &str, // To generate `attributes`, you can use `biome_js_analyze::services::aria::AriaServices::extract_defined_attributes` attributes: &FxHashMap>, - ) -> Option<&'static dyn AriaRoleDefinition> { - let result = match element { - "article" => &ArticleRole as &dyn AriaRoleDefinition, - "aside" => &ComplementaryRole as &dyn AriaRoleDefinition, - "blockquote" => &BlockQuoteRole as &dyn AriaRoleDefinition, - "button" => &ButtonRole as &dyn AriaRoleDefinition, - "caption" => &CaptionRole as &dyn AriaRoleDefinition, - "code" => &CodeRole as &dyn AriaRoleDefinition, - "datalist" => &ListBoxRole as &dyn AriaRoleDefinition, - "del" => &DeletionRole as &dyn AriaRoleDefinition, - "dd" => &DefinitionRole as &dyn AriaRoleDefinition, - "dt" => &TermRole as &dyn AriaRoleDefinition, - "dfn" => &TermRole as &dyn AriaRoleDefinition, - "mark" => &MarkRole as &dyn AriaRoleDefinition, - "dialog" => &DialogRole as &dyn AriaRoleDefinition, - "em" => &EmphasisRole as &dyn AriaRoleDefinition, - "figure" => &FigureRole as &dyn AriaRoleDefinition, - "form" => &FormRole as &dyn AriaRoleDefinition, - "hr" => &SeparatorRole as &dyn AriaRoleDefinition, - "html" => &DocumentRole as &dyn AriaRoleDefinition, - "ins" => &InsertionRole as &dyn AriaRoleDefinition, - "main" => &MainRole as &dyn AriaRoleDefinition, - "marquee" => &MarqueeRole as &dyn AriaRoleDefinition, - "math" => &MathRole as &dyn AriaRoleDefinition, - "menu" => &ListRole as &dyn AriaRoleDefinition, + ) -> Option { + Some(match element { + "article" => AriaRole::Article, + "aside" => AriaRole::Complementary, + "blockquote" => AriaRole::Blockquote, + "button" => AriaRole::Button, + "caption" => AriaRole::Caption, + "code" => AriaRole::Code, + "datalist" => AriaRole::Listbox, + "del" => AriaRole::Deletion, + "dd" => AriaRole::Definition, + "dt" => AriaRole::Term, + "dfn" => AriaRole::Term, + "mark" => AriaRole::Mark, + "dialog" => AriaRole::Dialog, + "em" => AriaRole::Emphasis, + "figure" => AriaRole::Figure, + "form" => AriaRole::Form, + "hr" => AriaRole::Separator, + "html" => AriaRole::Document, + "ins" => AriaRole::Insertion, + "main" => AriaRole::Main, + "marquee" => AriaRole::Marquee, + "math" => AriaRole::Math, + "menu" => AriaRole::List, "menuitem" => { let type_values = attributes.get("type")?; match type_values.first()?.as_str() { - "checkbox" => &MenuItemCheckboxRole as &dyn AriaRoleDefinition, - "radio" => &MenuItemRadioRole as &dyn AriaRoleDefinition, - _ => &MenuItemRole as &dyn AriaRoleDefinition, + "checkbox" => AriaRole::Menuitemcheckbox, + "radio" => AriaRole::Menuitemradio, + _ => AriaRole::Menuitem, } } - "meter" => &MeterRole as &dyn AriaRoleDefinition, - "nav" => &NavigationRole as &dyn AriaRoleDefinition, - "ul" | "ol" => &ListRole as &dyn AriaRoleDefinition, - "li" => &ListItemRole as &dyn AriaRoleDefinition, - "option" => &OptionRole as &dyn AriaRoleDefinition, - "optgroup" => &GroupRole as &dyn AriaRoleDefinition, - "output" => &StatusRole as &dyn AriaRoleDefinition, - "p" => &ParagraphRole as &dyn AriaRoleDefinition, - "progress" => &ProgressBarRole as &dyn AriaRoleDefinition, - "search" => &SearchRole as &dyn AriaRoleDefinition, - "strong" => &StrongRole as &dyn AriaRoleDefinition, - "sub" => &SubScriptRole as &dyn AriaRoleDefinition, - "sup" => &SuperScriptRole as &dyn AriaRoleDefinition, - "svg" => &GraphicsDocumentRole as &dyn AriaRoleDefinition, - "table" => &TableRole as &dyn AriaRoleDefinition, - "textarea" => &TextboxRole as &dyn AriaRoleDefinition, - "tr" => &RowRole as &dyn AriaRoleDefinition, + "meter" => AriaRole::Meter, + "nav" => AriaRole::Navigation, + "ul" | "ol" => AriaRole::List, + "li" => AriaRole::Listitem, + "option" => AriaRole::Option, + "optgroup" => AriaRole::Group, + "output" => AriaRole::Status, + "p" => AriaRole::Paragraph, + "progress" => AriaRole::Progressbar, + "search" => AriaRole::Search, + "strong" => AriaRole::Strong, + "sub" => AriaRole::Subscript, + "sup" => AriaRole::Superscript, + "table" => AriaRole::Table, + "textarea" => AriaRole::Textbox, + "tr" => AriaRole::Row, // cell if a descendant of a element, // but this crate does not support checking a descendant of an element. // // ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td - "td" => &CellRole as &dyn AriaRoleDefinition, + "td" => AriaRole::Cell, // - - - - - - - - - - - diff --git a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx.snap b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx.snap index cc8f94361f0d..32ea50de4bdd 100644 --- a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx.snap +++ b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx.snap @@ -1,6 +1,7 @@ --- source: crates/biome_js_analyze/tests/spec_tests.rs expression: invalid.jsx +snapshot_kind: text --- # Input ```jsx @@ -22,19 +23,8 @@ expression: invalid.jsx - - - - - - - - - - - ``` @@ -304,7 +294,7 @@ invalid.jsx:17:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━ > 17 │ │ ^^^^^^^^^^^^^^^^^^^^^^^ 18 │ - 19 │ + 19 │ i Ensure that ARIA attributes are valid for the role of the element. @@ -320,8 +310,8 @@ invalid.jsx:18:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━ 17 │ > 18 │ │ ^^^^^^^^^^^^^^^^^^^^^^^ - 19 │ - 20 │ + 19 │ + 20 │ i Ensure that ARIA attributes are valid for the role of the element. @@ -331,150 +321,14 @@ invalid.jsx:18:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━ ``` invalid.jsx:19:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 17 │ - 18 │ - > 19 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 20 │ - 21 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:20:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - ! The ARIA attribute 'aria-selected' is not supported by this element. + 17 │ 18 │ - 19 │ - > 20 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 21 │ - 22 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:21:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-haspopup' is not supported by this element. - - 19 │ - 20 │ - > 21 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 22 │ - 23 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:22:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-haspopup' is not supported by this element. - - 20 │ - 21 │ - > 22 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 23 │ - 24 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:23:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 21 │ - 22 │ - > 23 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 24 │ - 25 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:24:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 22 │ - 23 │ - > 24 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 25 │ - 26 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:25:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 23 │ - 24 │ - > 25 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 26 │ - 27 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:26:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 24 │ - 25 │ - > 26 │ + > 19 │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 27 │ - 28 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:27:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-haspopup' is not supported by this element. - - 25 │ - 26 │ - > 27 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 28 │ - 29 │ + 20 │ + 21 │ i Ensure that ARIA attributes are valid for the role of the element. @@ -482,67 +336,16 @@ invalid.jsx:27:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━ ``` ``` -invalid.jsx:28:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 26 │ - 27 │ - > 28 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 29 │ - 30 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:29:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +invalid.jsx:20:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ! The ARIA attribute 'aria-expanded' is not supported by this element. - 27 │ - 28 │ - > 29 │ + 18 │ + 19 │ + > 20 │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 30 │ - 31 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:30:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 28 │ - 29 │ - > 30 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 31 │ - 32 │ - - i Ensure that ARIA attributes are valid for the role of the element. - - -``` - -``` -invalid.jsx:31:1 lint/nursery/useAriaPropsSupportedByRole ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - ! The ARIA attribute 'aria-invalid' is not supported by this element. - - 29 │ - 30 │ - > 31 │ - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 32 │ - 33 │ + 21 │ + 22 │ i Ensure that ARIA attributes are valid for the role of the element. diff --git a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/valid.jsx b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/valid.jsx index 345a65e2c6f2..55fb62cf800f 100644 --- a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/valid.jsx +++ b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/valid.jsx @@ -23,7 +23,6 @@ - @@ -56,9 +55,8 @@ - foobar - +
element is able to be a rowheader, columnheader, // but this crate does not support checking a descendant of an element. // // ref: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th - "th" => &RowHeaderRole as &dyn AriaRoleDefinition, - "time" => &TimeRole as &dyn AriaRoleDefinition, - "address" | "details" | "fieldset" => &GroupRole as &dyn AriaRoleDefinition, - "h1" | "h2" | "h3" | "h4" | "h5" | "h6" => &HeadingRole as &dyn AriaRoleDefinition, - "tbody" | "tfoot" | "thead" => &RowGroupRole as &dyn AriaRoleDefinition, + "th" => AriaRole::Rowheader, + "time" => AriaRole::Time, + "address" | "details" | "fieldset" => AriaRole::Group, + "h1" | "h2" | "h3" | "h4" | "h5" | "h6" => AriaRole::Heading, + "tbody" | "tfoot" | "thead" => AriaRole::Rowgroup, "input" => { let type_values = attributes.get("type")?; match type_values.first()?.as_str() { - "checkbox" => &CheckboxRole as &dyn AriaRoleDefinition, - "number" => &SpinButtonRole as &dyn AriaRoleDefinition, - "radio" => &RadioRole as &dyn AriaRoleDefinition, - "range" => &SliderRole as &dyn AriaRoleDefinition, - "button" | "image" | "reset" | "submit" => { - &ButtonRole as &dyn AriaRoleDefinition - } + "checkbox" => AriaRole::Checkbox, + "number" => AriaRole::Spinbutton, + "radio" => AriaRole::Radio, + "range" => AriaRole::Slider, + "button" | "image" | "reset" | "submit" => AriaRole::Button, "search" => match attributes.get("list") { - Some(_) => &ComboBoxRole as &dyn AriaRoleDefinition, - _ => &SearchboxRole as &dyn AriaRoleDefinition, + Some(_) => AriaRole::Combobox, + _ => AriaRole::Searchbox, }, "email" | "tel" | "url" => match attributes.get("list") { - Some(_) => &ComboBoxRole as &dyn AriaRoleDefinition, - _ => &TextboxRole as &dyn AriaRoleDefinition, + Some(_) => AriaRole::Combobox, + _ => AriaRole::Textbox, }, - "text" => &TextboxRole as &dyn AriaRoleDefinition, - _ => &TextboxRole as &dyn AriaRoleDefinition, + "text" => AriaRole::Textbox, + _ => AriaRole::Textbox, } } - "a" | "area" => match attributes.get("href") { - Some(_) => &LinkRole as &dyn AriaRoleDefinition, - _ => &GenericRole as &dyn AriaRoleDefinition, + "a" | "area" | "link" => match attributes.get("href") { + Some(_) => AriaRole::Link, + _ => AriaRole::Generic, }, "img" => match attributes.get("alt") { Some(values) => { if values.iter().any(|x| !x.is_empty()) { - &ImgRole as &dyn AriaRoleDefinition + AriaRole::Img } else { - &PresentationRole as &dyn AriaRoleDefinition + AriaRole::Presentation } } - None => &ImgRole as &dyn AriaRoleDefinition, + None => AriaRole::Img, }, "section" => { let has_accessible_name = attributes.get("aria-labelledby").is_some() || attributes.get("aria-label").is_some() || attributes.get("title").is_some(); if has_accessible_name { - &RegionRole as &dyn AriaRoleDefinition + AriaRole::Region } else { return None; } @@ -1174,24 +1171,22 @@ impl<'a> AriaRoles { None => 0, }; let multiple = attributes.get("multiple"); - if multiple.is_none() && size <= 1 { - &ComboBoxRole as &dyn AriaRoleDefinition + AriaRole::Combobox } else { - &ListBoxRole as &dyn AriaRoleDefinition + AriaRole::Listbox } } "b" | "bdi" | "bdo" | "body" | "data" | "div" | "hgroup" | "i" | "q" | "samp" - | "small" | "span" | "u" | "pre" => &GenericRole as &dyn AriaRoleDefinition, + | "small" | "span" | "u" | "pre" => AriaRole::Generic, "header" | "footer" => { // This crate does not support checking a descendant of an element. // header (maybe BannerRole): https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/banner.html // footer (maybe ContentInfoRole): https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/contentinfo.html - &GenericRole as &dyn AriaRoleDefinition + AriaRole::Generic } _ => return None, - }; - Some(result) + }) } /// Given the name of element, the function tells whether it's interactive @@ -1356,13 +1351,13 @@ impl<'a> AriaRoles { &self, element_name: &str, attributes: &FxHashMap>, - ) -> Option<&'static dyn AriaRoleDefinition> { + ) -> Option { attributes .get("role") .and_then(|role| role.first()) .map_or_else( || self.get_implicit_role(element_name, attributes), - |r| self.get_role(r), + |r| AriaRole::from_str(r).ok(), ) } @@ -1390,10 +1385,9 @@ impl<'a> AriaRoles { let role_name = self.get_role_by_element_name(element_name, attributes); - match role_name.map(|role| role.type_name()) { - Some("biome_aria::roles::PresentationRole" | "biome_aria::roles::GenericRole") => false, + match role_name { + None | Some(AriaRole::Presentation | AriaRole::Generic) => false, Some(_) => true, - None => false, } } } @@ -1426,6 +1420,7 @@ mod test { use rustc_hash::FxHashMap; use crate::AriaRoles; + use biome_aria_metadata::AriaRole; #[test] fn should_be_interactive() { @@ -1463,16 +1458,13 @@ mod test { let implicit_role = aria_roles .get_implicit_role("button", &FxHashMap::default()) .unwrap(); - assert_eq!(implicit_role.type_name(), "biome_aria::roles::ButtonRole"); + assert_eq!(implicit_role, AriaRole::Button); // let mut attributes = FxHashMap::default(); attributes.insert("type".to_string(), vec!["search".to_string()]); let implicit_role = aria_roles.get_implicit_role("input", &attributes).unwrap(); - assert_eq!( - implicit_role.type_name(), - "biome_aria::roles::SearchboxRole" - ); + assert_eq!(implicit_role, AriaRole::Searchbox); // + + + + + + + + + + \ No newline at end of file diff --git a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/deprecated.jsx.snap b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/deprecated.jsx.snap new file mode 100644 index 000000000000..5f17e98e97f7 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/deprecated.jsx.snap @@ -0,0 +1,19 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: deprecated.jsx +snapshot_kind: text +--- +# Input +```jsx + + + + + + + + + + + +``` diff --git a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx index 0681ede2635d..2d73094ce076 100644 --- a/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx +++ b/crates/biome_js_analyze/tests/specs/nursery/useAriaPropsSupportedByRole/invalid.jsx @@ -16,17 +16,6 @@