refactor: simplify and organize the errors

This commit is contained in:
Ilya Maximov 2022-03-19 20:37:25 +01:00
parent b8573bc4dd
commit 1f065acb4c
No known key found for this signature in database
GPG key ID: 1ACCDCC0429C9737
4 changed files with 23 additions and 35 deletions

View file

@ -199,8 +199,7 @@ impl Parse for ComponentField {
}
if input.peek(LitStr) && input.peek2(LitStr) {
let item = input.parse::<LitStr>().unwrap();
proc_macro_error::emit_error!(item, "this attribute is missing a trailing comma")
attr_after_element!(input.span());
}
let content = ContentField::ManExpr(input.parse()?);

View file

@ -63,12 +63,8 @@ impl Parse for Element {
break;
}
// todo: add a message saying you need to include commas between fields
if content.parse::<Token![,]>().is_err() {
proc_macro_error::emit_error!(
ident,
"this attribute is missing a trailing comma"
)
missing_trailing_comma!(ident);
}
continue;
}
@ -126,10 +122,7 @@ impl Parse for Element {
// todo: add a message saying you need to include commas between fields
if content.parse::<Token![,]>().is_err() {
proc_macro_error::emit_error!(
ident,
"this attribute is missing a trailing comma"
)
missing_trailing_comma!(ident);
}
continue;
}
@ -139,33 +132,11 @@ impl Parse for Element {
while !content.is_empty() {
if (content.peek(LitStr) && content.peek2(Token![:])) && !content.peek3(Token![:]) {
let ident = content.parse::<LitStr>().unwrap();
let name = ident.value();
proc_macro_error::emit_error!(
ident, "this attribute `{}` is in the wrong place", name;
help =
"all attribute fields must be placed above children elements
div {
attr: \"...\", <---- attribute is above children
div { } <---- children are below attributes
}";
)
attr_after_element!(content.span());
}
if (content.peek(Ident) && content.peek2(Token![:])) && !content.peek3(Token![:]) {
let ident = content.parse::<Ident>().unwrap();
let name = ident.to_string();
proc_macro_error::emit_error!(
ident, "this attribute `{}` is in the wrong place", name;
help =
"all attribute fields must be placed above children elements
div {
attr: \"...\", <---- attribute is above children
div { } <---- children are below attributes
}";
)
attr_after_element!(content.span());
}
children.push(content.parse::<BodyNode>()?);

View file

@ -0,0 +1,15 @@
macro_rules! missing_trailing_comma {
($span:expr) => {
proc_macro_error::emit_error!($span, "missing trailing comma")
};
}
macro_rules! attr_after_element {
($span:expr) => {
proc_macro_error::emit_error!(
$span,
"expected element";
help = "move the attribute above all the children and text elements"
)
};
}

View file

@ -11,6 +11,9 @@
//!
//! Any errors in using rsx! will likely occur when people start using it, so the first errors must be really helpful.
#[macro_use]
mod errors;
mod component;
mod element;
mod node;