Switch from IResult to PResult in syn
diff --git a/src/attr.rs b/src/attr.rs
index 76b1503..5bff9be 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -292,7 +292,7 @@
#[cfg(feature = "parsing")]
pub mod parsing {
use super::*;
- use synom::IResult;
+ use synom::{PResult, Cursor, parse_error};
use synom::tokens::*;
use proc_macro2::{TokenKind, OpKind, TokenTree};
@@ -305,102 +305,96 @@
impl Attribute {
#[cfg(feature = "full")]
- pub fn parse_inner(input: &[TokenTree]) -> IResult<&[TokenTree], Self> {
- alt! {
- input,
- do_parse!(
- pound: syn!(Pound) >>
- bang: syn!(Bang) >>
- path_and_tts: brackets!(tuple!(
- call!(::Path::parse_mod_style),
- call!(::TokenTree::parse_list)
- )) >>
- ({
- let ((path, tts), bracket) = path_and_tts;
+ named!(pub parse_inner -> Self, alt!(
+ do_parse!(
+ pound: syn!(Pound) >>
+ bang: syn!(Bang) >>
+ path_and_tts: brackets!(tuple!(
+ call!(::Path::parse_mod_style),
+ call!(::TokenTree::parse_list)
+ )) >>
+ ({
+ let ((path, tts), bracket) = path_and_tts;
- Attribute {
- style: AttrStyle::Inner(bang),
- path: path,
- tts: tts,
- is_sugared_doc: false,
- pound_token: pound,
- bracket_token: bracket,
- }
- })
- )
- |
- map!(
- lit_doc_comment,
- |lit| Attribute {
- style: AttrStyle::Inner(tokens::Bang::default()),
- path: "doc".into(),
- tts: vec![
- ::TokenTree(eq()),
- ::TokenTree(lit),
- ],
- is_sugared_doc: true,
- pound_token: tokens::Pound::default(),
- bracket_token: tokens::Bracket::default(),
+ Attribute {
+ style: AttrStyle::Inner(bang),
+ path: path,
+ tts: tts,
+ is_sugared_doc: false,
+ pound_token: pound,
+ bracket_token: bracket,
}
- )
- }
- }
+ })
+ )
+ |
+ map!(
+ lit_doc_comment,
+ |lit| Attribute {
+ style: AttrStyle::Inner(tokens::Bang::default()),
+ path: "doc".into(),
+ tts: vec![
+ ::TokenTree(eq()),
+ ::TokenTree(lit),
+ ],
+ is_sugared_doc: true,
+ pound_token: tokens::Pound::default(),
+ bracket_token: tokens::Bracket::default(),
+ }
+ )
+ ));
- pub fn parse_outer(input: &[TokenTree]) -> IResult<&[TokenTree], Self> {
- alt! {
- input,
- do_parse!(
- pound: syn!(Pound) >>
- path_and_tts: brackets!(tuple!(
- call!(::Path::parse_mod_style),
- call!(::TokenTree::parse_list)
- )) >>
- ({
- let ((path, tts), bracket) = path_and_tts;
+ named!(pub parse_outer -> Self, alt!(
+ do_parse!(
+ pound: syn!(Pound) >>
+ path_and_tts: brackets!(tuple!(
+ call!(::Path::parse_mod_style),
+ call!(::TokenTree::parse_list)
+ )) >>
+ ({
+ let ((path, tts), bracket) = path_and_tts;
- Attribute {
- style: AttrStyle::Outer,
- path: path,
- tts: tts,
- is_sugared_doc: false,
- pound_token: pound,
- bracket_token: bracket,
- }
- })
- )
- |
- map!(
- lit_doc_comment,
- |lit| Attribute {
+ Attribute {
style: AttrStyle::Outer,
- path: "doc".into(),
- tts: vec![
- ::TokenTree(eq()),
- ::TokenTree(lit),
- ],
- is_sugared_doc: true,
- pound_token: tokens::Pound::default(),
- bracket_token: tokens::Bracket::default(),
+ path: path,
+ tts: tts,
+ is_sugared_doc: false,
+ pound_token: pound,
+ bracket_token: bracket,
}
- )
- }
- }
+ })
+ )
+ |
+ map!(
+ lit_doc_comment,
+ |lit| Attribute {
+ style: AttrStyle::Outer,
+ path: "doc".into(),
+ tts: vec![
+ ::TokenTree(eq()),
+ ::TokenTree(lit),
+ ],
+ is_sugared_doc: true,
+ pound_token: tokens::Pound::default(),
+ bracket_token: tokens::Bracket::default(),
+ }
+ )
+ ));
}
- fn lit_doc_comment(input: &[TokenTree]) -> IResult<&[TokenTree], TokenTree> {
+ fn lit_doc_comment(input: Cursor) -> PResult<TokenTree> {
let mut tokens = input.iter();
let tok = match tokens.next() {
Some(tok) => tok,
- None => return IResult::Error,
+ None => return parse_error(),
};
let literal = match tok.kind {
TokenKind::Literal(ref l) => l.to_string(),
- _ => return IResult::Error,
+ _ => return parse_error(),
};
if literal.starts_with("//") || literal.starts_with("/*") {
- IResult::Done(tokens.as_slice(), tok.clone())
+ Ok((tokens.as_slice(), tok.clone()))
} else {
- IResult::Error
+ parse_error()
}
}
}