Filter out doc comments before calling Lit::new
diff --git a/src/attr.rs b/src/attr.rs
index 3c9e625..57accef 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -128,11 +128,13 @@
if tts.len() == 2 {
if let TokenNode::Op('=', Spacing::Alone) = tts[0].kind {
if let TokenNode::Literal(ref lit) = tts[1].kind {
- return Some(Meta::NameValue(MetaNameValue {
- ident: *name,
- eq_token: Token,
- lit: Lit::new(lit.clone(), tts[1].span),
- }));
+ if !lit.to_string().starts_with('/') {
+ return Some(Meta::NameValue(MetaNameValue {
+ ident: *name,
+ eq_token: Token,
+ lit: Lit::new(lit.clone(), tts[1].span),
+ }));
+ }
} else if let TokenNode::Term(ref term) = tts[1].kind {
match term.as_str() {
v @ "true" | v @ "false" => {
@@ -157,8 +159,12 @@
match tts[0].kind {
TokenNode::Literal(ref lit) => {
- let lit = Lit::new(lit.clone(), tts[0].span);
- Some((NestedMeta::Literal(lit), &tts[1..]))
+ if lit.to_string().starts_with('/') {
+ None
+ } else {
+ let lit = Lit::new(lit.clone(), tts[0].span);
+ Some((NestedMeta::Literal(lit), &tts[1..]))
+ }
}
TokenNode::Term(sym) => {
@@ -166,12 +172,14 @@
if tts.len() >= 3 {
if let TokenNode::Op('=', Spacing::Alone) = tts[1].kind {
if let TokenNode::Literal(ref lit) = tts[2].kind {
- let pair = MetaNameValue {
- ident: Ident::new(sym.as_str(), tts[0].span),
- eq_token: Token,
- lit: Lit::new(lit.clone(), tts[2].span),
- };
- return Some((Meta::NameValue(pair).into(), &tts[3..]));
+ if !lit.to_string().starts_with('/') {
+ let pair = MetaNameValue {
+ ident: Ident::new(sym.as_str(), tts[0].span),
+ eq_token: Token,
+ lit: Lit::new(lit.clone(), tts[2].span),
+ };
+ return Some((Meta::NameValue(pair).into(), &tts[3..]));
+ }
} else if let TokenNode::Term(ref term) = tts[2].kind {
match term.as_str() {
v @ "true" | v @ "false" => {
diff --git a/src/lit.rs b/src/lit.rs
index 0190f27..584ccb9 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -331,7 +331,14 @@
impl Synom for Lit {
fn parse(input: Cursor) -> PResult<Self> {
match input.literal() {
- Some((span, lit, rest)) => Ok((Lit::new(lit, span), rest)),
+ Some((span, lit, rest)) => {
+ if lit.to_string().starts_with('/') {
+ // Doc comment literal which is not a Syn literal
+ parse_error()
+ } else {
+ Ok((Lit::new(lit, span), rest))
+ }
+ }
_ => match input.term() {
Some((span, term, rest)) => Ok((
Lit::Bool(LitBool {