check for duplicate event listeners in the rsx macro
This commit is contained in:
1 parent
663296ae45
commit
9b5a797008
2 files changed
+21
-7
No files matched your search
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,27 @@ impl Parse for Element {
|
|||||||
let span = content.span();
|
let span = content.span();
|
||||||
|
|
||||||
if name_str.starts_with("on") {
|
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 {
|
attributes.push(attribute::AttributeType::Named(ElementAttrNamed {
|
||||||
el_name: el_name.clone(),
|
el_name: el_name.clone(),
|
||||||
attr: ElementAttr {
|
attr: ElementAttr {
|
||||||
|
|||||||
Reference in new issue
Block a user