Merge pull request #877 from Demonthos/fix-component-attribute-formatting
Don't accept raw attributes in components without trailing commas
This commit is contained in:
2 files changed
+19
-21
No files matched your search
@@ -22,7 +22,7 @@ fn simple_test() {
|
|||||||
onchange: move |router: RouterContext| log::trace!("route changed to {:?}", router.current_location()),
|
onchange: move |router: RouterContext| log::trace!("route changed to {:?}", router.current_location()),
|
||||||
active_class: "is-active",
|
active_class: "is-active",
|
||||||
Route { to: "/", Home {} }
|
Route { to: "/", Home {} }
|
||||||
Route { to: "blog"
|
Route { to: "blog",
|
||||||
Route { to: "/", BlogList {} }
|
Route { to: "/", BlogList {} }
|
||||||
Route { to: ":id", BlogPost {} }
|
Route { to: ":id", BlogPost {} }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -230,30 +230,28 @@ impl Parse for ComponentField {
|
|||||||
let name = Ident::parse_any(input)?;
|
let name = Ident::parse_any(input)?;
|
||||||
input.parse::<Token![:]>()?;
|
input.parse::<Token![:]>()?;
|
||||||
|
|
||||||
if name.to_string().starts_with("on") {
|
let content = {
|
||||||
let content = ContentField::OnHandlerRaw(input.parse()?);
|
if name.to_string().starts_with("on") {
|
||||||
return Ok(Self { name, content });
|
ContentField::OnHandlerRaw(input.parse()?)
|
||||||
}
|
} else if name == "key" {
|
||||||
|
|
||||||
if name == "key" {
|
|
||||||
let content = ContentField::Formatted(input.parse()?);
|
|
||||||
return Ok(Self { name, content });
|
|
||||||
}
|
|
||||||
if input.peek(LitStr) {
|
|
||||||
let forked = input.fork();
|
|
||||||
let t: LitStr = forked.parse()?;
|
|
||||||
// the string literal must either be the end of the input or a followed by a comma
|
|
||||||
if (forked.is_empty() || forked.peek(Token![,])) && is_literal_foramtted(&t) {
|
|
||||||
let content = ContentField::Formatted(input.parse()?);
|
let content = ContentField::Formatted(input.parse()?);
|
||||||
return Ok(Self { name, content });
|
return Ok(Self { name, content });
|
||||||
|
} else if input.peek(LitStr) {
|
||||||
|
let forked = input.fork();
|
||||||
|
let t: LitStr = forked.parse()?;
|
||||||
|
// the string literal must either be the end of the input or a followed by a comma
|
||||||
|
if (forked.is_empty() || forked.peek(Token![,])) && is_literal_foramtted(&t) {
|
||||||
|
ContentField::Formatted(input.parse()?)
|
||||||
|
} else {
|
||||||
|
ContentField::ManExpr(input.parse()?)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ContentField::ManExpr(input.parse()?)
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
if input.peek(LitStr) || input.peek(Ident) {
|
||||||
|
missing_trailing_comma!(content.span());
|
||||||
}
|
}
|
||||||
|
|
||||||
if input.peek(LitStr) && input.peek2(LitStr) {
|
|
||||||
missing_trailing_comma!(input.span());
|
|
||||||
}
|
|
||||||
|
|
||||||
let content = ContentField::ManExpr(input.parse()?);
|
|
||||||
Ok(Self { name, content })
|
Ok(Self { name, content })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user