@@ -5,7 +5,6 @@ use oxc_ast::{
55use oxc_diagnostics:: OxcDiagnostic ;
66use oxc_macros:: declare_oxc_lint;
77use oxc_span:: Span ;
8- use phf:: { phf_map, phf_set} ;
98
109use crate :: { AstNode , context:: LintContext , rule:: Rule , utils:: has_jsx_prop_ignore_case} ;
1110
@@ -44,18 +43,21 @@ declare_oxc_lint!(
4443 correctness
4544) ;
4645
47- static ROLE_TO_REQUIRED_ARIA_PROPS : phf:: Map < & ' static str , phf:: Set < & ' static str > > = phf_map ! {
48- "checkbox" => phf_set!{ "aria-checked" } ,
49- "radio" => phf_set!{ "aria-checked" } ,
50- "menuitemcheckbox" => phf_set!{ "aria-checked" } ,
51- "menuitemradio" => phf_set!{ "aria-checked" } ,
52- "combobox" => phf_set!{ "aria-controls" , "aria-expanded" } ,
53- "tab" => phf_set!{ "aria-selected" } ,
54- "slider" => phf_set!{ "aria-valuemax" , "aria-valuemin" , "aria-valuenow" } ,
55- "scrollbar" => phf_set!{ "aria-valuemax" , "aria-valuemin" , "aria-valuenow" , "aria-orientation" , "aria-controls" } ,
56- "heading" => phf_set!{ "aria-level" } ,
57- "option" => phf_set!{ "aria-selected" } ,
58- } ;
46+ static ROLE_TO_REQUIRED_ARIA_PROPS : & [ ( & str , & [ & str ] ) ] = & [
47+ ( "checkbox" , & [ "aria-checked" ] ) ,
48+ ( "radio" , & [ "aria-checked" ] ) ,
49+ ( "menuitemcheckbox" , & [ "aria-checked" ] ) ,
50+ ( "menuitemradio" , & [ "aria-checked" ] ) ,
51+ ( "combobox" , & [ "aria-controls" , "aria-expanded" ] ) ,
52+ ( "tab" , & [ "aria-selected" ] ) ,
53+ ( "slider" , & [ "aria-valuemax" , "aria-valuemin" , "aria-valuenow" ] ) ,
54+ (
55+ "scrollbar" ,
56+ & [ "aria-valuemax" , "aria-valuemin" , "aria-valuenow" , "aria-orientation" , "aria-controls" ] ,
57+ ) ,
58+ ( "heading" , & [ "aria-level" ] ) ,
59+ ( "option" , & [ "aria-selected" ] ) ,
60+ ] ;
5961
6062impl Rule for RoleHasRequiredAriaProps {
6163 fn run < ' a > ( & self , node : & AstNode < ' a > , ctx : & LintContext < ' a > ) {
@@ -71,8 +73,8 @@ impl Rule for RoleHasRequiredAriaProps {
7173 } ;
7274 let roles = role_values. value . split_whitespace ( ) ;
7375 for role in roles {
74- if let Some ( props) = ROLE_TO_REQUIRED_ARIA_PROPS . get ( role) {
75- for prop in props {
76+ if let Some ( props) = ROLE_TO_REQUIRED_ARIA_PROPS . iter ( ) . find ( |r| r . 0 == role) {
77+ for prop in props. 1 {
7678 if has_jsx_prop_ignore_case ( jsx_el, prop) . is_none ( ) {
7779 ctx. diagnostic ( role_has_required_aria_props_diagnostic (
7880 attr. span , role, prop,
0 commit comments