check for duplicate event listeners in the rsx macro

This commit is contained in:
Evan Almloff committed 2024-01-11 10:34:08 -06:00
1 parent 663296ae45
commit 9b5a797008
2 files changed
+21 -7

No files matched your search

-7
View File
@@ -401,13 +401,6 @@ impl VirtualDom {
}
}
});
// Break if this is the exact target element.
// This means we won't call two listeners with the same name on the same element. This should be
// documented, or be rejected from the rsx! macro outright
if target_path == this_path {
break;
}
}
}
+21
View File
@@ -95,6 +95,27 @@ impl Parse for Element {
let span = content.span();
if name_str.starts_with("on") {
// check for any duplicate event listeners
if attributes.iter().any(|f| {
if let AttributeType::Named(ElementAttrNamed {
attr:
ElementAttr {
name: ElementAttrName::BuiltIn(n),
value: ElementAttrValue::EventTokens(_),
},
..
}) = f
{
n == &name_str
} else {
false
}
}) {
return Err(syn::Error::new(
name.span(),
format!("Duplicate event listener `{}`", name),
));
}
attributes.push(attribute::AttributeType::Named(ElementAttrNamed {
el_name: el_name.clone(),
attr: ElementAttr {