Skip to content

Commit 8d7a0e7

Browse files
committed
chores(lint): cleaned up the concatentation for namespaced attribute
1 parent c1040df commit 8d7a0e7

File tree

1 file changed

+20
-24
lines changed

1 file changed

+20
-24
lines changed

crates/biome_js_analyze/src/lint/nursery/no_unknown_attribute.rs

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
968961
fn 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

Comments
 (0)