@@ -958,13 +958,6 @@ const DOM_PROPERTY_NAMES: &[&str] = &[
958958 "zoomAndPan" ,
959959] ;
960960
961- fn normalize_attribute_case ( name : & str ) -> & str {
962- DOM_PROPERTIES_IGNORE_CASE
963- . iter ( )
964- . find ( |element| element. eq_ignore_ascii_case ( name) )
965- . unwrap_or ( & name)
966- }
967-
968961fn is_valid_data_attribute ( name : & str ) -> bool {
969962 use biome_string_case:: StrOnlyExtension ;
970963 if !name. starts_with ( "data-" ) {
@@ -1056,24 +1049,23 @@ impl Rule for NoUnknownAttribute {
10561049 let options = ctx. options ( ) ;
10571050
10581051 let node_name = match node. name ( ) . ok ( ) ? {
1059- AnyJsxAttributeName :: JsxName ( name) => {
1060- name. value_token ( ) . ok ( ) ?. text_trimmed ( ) . to_string ( )
1061- }
1062- AnyJsxAttributeName :: JsxNamespaceName ( name) => {
1063- let namespace = name. namespace ( ) . ok ( ) ?. value_token ( ) . ok ( ) ?;
1064- let name = & name. name ( ) . ok ( ) ?. value_token ( ) . ok ( ) ?;
1065- // There could be better way, but i couldn't extract namespaced attributes
1066- // For e.g xlink:href
1067- // without manually concatenating with ':'
1068- namespace. text_trimmed ( ) . to_string ( ) + ":" + name. text_trimmed ( )
1069- }
1052+ AnyJsxAttributeName :: JsxName ( name) => name. syntax ( ) . text_trimmed ( ) ,
1053+ AnyJsxAttributeName :: JsxNamespaceName ( name) => name. syntax ( ) . text_trimmed ( ) ,
10701054 } ;
1055+ let node_name = node_name. to_string ( ) ;
10711056
10721057 if options. ignore . contains ( & node_name) {
10731058 return None ;
10741059 }
1060+ let name = if let Some ( element) = DOM_PROPERTIES_IGNORE_CASE
1061+ . iter ( )
1062+ . find ( |element| element. eq_ignore_ascii_case ( & node_name) )
1063+ {
1064+ element
1065+ } else {
1066+ & node_name. as_str ( )
1067+ } ;
10751068
1076- let name = normalize_attribute_case ( & node_name) ;
10771069 let parent = node. syntax ( ) . parent ( ) ?. parent ( ) ?;
10781070 let element = AnyJsxElement :: cast_ref ( & parent) ?;
10791071
@@ -1085,7 +1077,9 @@ impl Rule for NoUnknownAttribute {
10851077 // Handle data-* attributes
10861078 if is_valid_data_attribute ( name) {
10871079 if options. require_data_lowercase && has_uppercase ( & name) {
1088- return Some ( NoUnknownAttributeState :: DataLowercaseRequired { name : name. into ( ) } ) ;
1080+ return Some ( NoUnknownAttributeState :: DataLowercaseRequired {
1081+ name : ( * name) . into ( ) ,
1082+ } ) ;
10891083 }
10901084 return None ;
10911085 }
@@ -1112,7 +1106,7 @@ impl Rule for NoUnknownAttribute {
11121106 if let Some ( allowed_tags) = allowed_tags {
11131107 if !allowed_tags. contains ( & tag_name. trim ( ) ) {
11141108 return Some ( NoUnknownAttributeState :: InvalidPropOnTag {
1115- name : name. into ( ) ,
1109+ name : ( * name) . into ( ) ,
11161110 tag_name,
11171111 allowed_tags,
11181112 } ) ;
@@ -1121,16 +1115,18 @@ impl Rule for NoUnknownAttribute {
11211115 }
11221116
11231117 if let Some ( standard_name) = get_standard_name ( name) {
1124- if standard_name != name {
1118+ if standard_name != * name {
11251119 return Some ( NoUnknownAttributeState :: UnknownPropWithStandardName {
1126- name : name. into ( ) ,
1120+ name : ( * name) . into ( ) ,
11271121 standard_name : standard_name. into ( ) ,
11281122 } ) ;
11291123 }
11301124 return None ;
11311125 }
11321126
1133- Some ( NoUnknownAttributeState :: UnknownProp { name : name. into ( ) } )
1127+ Some ( NoUnknownAttributeState :: UnknownProp {
1128+ name : ( * name) . into ( ) ,
1129+ } )
11341130 }
11351131
11361132 fn diagnostic ( ctx : & RuleContext < Self > , state : & Self :: State ) -> Option < RuleDiagnostic > {
0 commit comments