Feature flag for nom dependency
diff --git a/src/attr.rs b/src/attr.rs
index 266bbb4..571cf09 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -1,7 +1,10 @@
use super::*;
+#[cfg(feature = "parsing")]
use common::word;
+#[cfg(feature = "parsing")]
use helper::escaped_string;
+#[cfg(feature = "parsing")]
use nom::multispace;
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -29,6 +32,7 @@
NameValue(Ident, String),
}
+#[cfg(feature = "parsing")]
named!(pub attribute<&str, Attribute>, alt!(
do_parse!(
punct!("#") >>
@@ -55,12 +59,14 @@
)
));
+#[cfg(feature = "parsing")]
named!(quoted<&str, String>, delimited!(
punct!("\""),
escaped_string,
tag_s!("\"")
));
+#[cfg(feature = "parsing")]
named!(meta_item<&str, MetaItem>, alt!(
do_parse!(
ident: word >>
diff --git a/src/common.rs b/src/common.rs
index 3cd8587..b24e9ee 100644
--- a/src/common.rs
+++ b/src/common.rs
@@ -6,15 +6,18 @@
Inherited,
}
+#[cfg(feature = "parsing")]
fn ident_ch(ch: char) -> bool {
ch.is_alphanumeric() || ch == '_'
}
+#[cfg(feature = "parsing")]
named!(pub word<&str, Ident>, preceded!(
opt!(call!(::nom::multispace)),
map!(take_while1_s!(ident_ch), String::from)
));
+#[cfg(feature = "parsing")]
named!(pub visibility<&str, Visibility>, preceded!(
opt!(call!(::nom::multispace)),
alt!(
diff --git a/src/generics.rs b/src/generics.rs
index 425228d..d1e889c 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -1,7 +1,10 @@
use super::*;
+#[cfg(feature = "parsing")]
use common::word;
+#[cfg(feature = "parsing")]
use ty::{ty, poly_trait_ref};
+#[cfg(feature = "parsing")]
use nom::multispace;
#[derive(Debug, Clone, Eq, PartialEq, Default)]
@@ -67,6 +70,7 @@
pub bounds: Vec<Lifetime>,
}
+#[cfg(feature = "parsing")]
named!(pub generics<&str, Generics>, do_parse!(
bracketed: alt!(
do_parse!(
@@ -96,11 +100,13 @@
})
));
+#[cfg(feature = "parsing")]
named!(pub lifetime<&str, Lifetime>, preceded!(
punct!("'"),
map!(word, |ident| Lifetime { ident: ident })
));
+#[cfg(feature = "parsing")]
named!(pub lifetime_def<&str, LifetimeDef>, do_parse!(
life: lifetime >>
bounds: opt_vec!(preceded!(
@@ -113,6 +119,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(pub bound_lifetimes<&str, Vec<LifetimeDef> >, opt_vec!(do_parse!(
punct!("for") >>
punct!("<") >>
@@ -121,6 +128,7 @@
(lifetimes)
)));
+#[cfg(feature = "parsing")]
named!(ty_param<&str, TyParam>, do_parse!(
ident: word >>
bounds: opt_vec!(preceded!(
@@ -138,6 +146,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(pub ty_param_bound<&str, TyParamBound>, alt!(
tuple!(punct!("?"), punct!("Sized")) => { |_| TyParamBound::MaybeSized }
|
@@ -146,6 +155,7 @@
poly_trait_ref => { TyParamBound::Trait }
));
+#[cfg(feature = "parsing")]
named!(where_predicate<&str, WherePredicate>, alt!(
do_parse!(
ident: lifetime >>
diff --git a/src/helper.rs b/src/helper.rs
index 5299cc4..6c9f6e2 100644
--- a/src/helper.rs
+++ b/src/helper.rs
@@ -1,3 +1,5 @@
+#![cfg(feature = "parsing")]
+
use nom::{self, IResult};
macro_rules! punct {
diff --git a/src/item.rs b/src/item.rs
index 544b55f..eb40ae0 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -1,9 +1,14 @@
use super::*;
+#[cfg(feature = "parsing")]
use attr::attribute;
+#[cfg(feature = "parsing")]
use common::{word, visibility};
+#[cfg(feature = "parsing")]
use generics::generics;
+#[cfg(feature = "parsing")]
use ty::ty;
+#[cfg(feature = "parsing")]
use nom::multispace;
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -44,6 +49,7 @@
pub ty: Ty,
}
+#[cfg(feature = "parsing")]
named!(pub item<&str, Item>, do_parse!(
attrs: many0!(attribute) >>
vis: visibility >>
@@ -72,6 +78,7 @@
(item)
));
+#[cfg(feature = "parsing")]
named!(struct_body<&str, (Style, Vec<Field>)>, alt!(
struct_like_body => { |fields| (Style::Struct, fields) }
|
@@ -80,6 +87,7 @@
punct!(";") => { |_| (Style::Unit, Vec::new()) }
));
+#[cfg(feature = "parsing")]
named!(enum_body<&str, Body>, do_parse!(
punct!("{") >>
variants: separated_list!(punct!(","), variant) >>
@@ -88,6 +96,7 @@
(Body::Enum(variants))
));
+#[cfg(feature = "parsing")]
named!(variant<&str, Variant>, do_parse!(
attrs: many0!(attribute) >>
ident: word >>
@@ -106,6 +115,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(struct_like_body<&str, Vec<Field> >, do_parse!(
punct!("{") >>
fields: separated_list!(punct!(","), struct_field) >>
@@ -114,6 +124,7 @@
(fields)
));
+#[cfg(feature = "parsing")]
named!(tuple_like_body<&str, Vec<Field> >, do_parse!(
punct!("(") >>
fields: separated_list!(punct!(","), tuple_field) >>
@@ -122,6 +133,7 @@
(fields)
));
+#[cfg(feature = "parsing")]
named!(struct_field<&str, Field>, do_parse!(
attrs: many0!(attribute) >>
vis: visibility >>
@@ -136,6 +148,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(tuple_field<&str, Field>, do_parse!(
attrs: many0!(attribute) >>
vis: visibility >>
diff --git a/src/lib.rs b/src/lib.rs
index ebd3c8e..7b813cb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,6 +1,8 @@
+#[cfg(feature = "parsing")]
#[macro_use]
extern crate nom;
+#[cfg(feature = "parsing")]
#[macro_use]
mod do_parse;
@@ -59,6 +61,7 @@
TypeBinding,
};
+#[cfg(feature = "parsing")]
pub fn parse(input: &str) -> Item {
match item::item(input) {
nom::IResult::Done(rest, ast) => {
@@ -73,6 +76,7 @@
}
}
+#[cfg(feature = "parsing")]
fn raise(mut err: nom::Err<&str>) -> ! {
loop {
match err {
diff --git a/src/ty.rs b/src/ty.rs
index a875422..b364c8e 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -1,9 +1,13 @@
use super::*;
+#[cfg(feature = "parsing")]
use common::word;
+#[cfg(feature = "parsing")]
use generics::{lifetime, lifetime_def, ty_param_bound, bound_lifetimes};
+#[cfg(feature = "parsing")]
use nom::{digit, multispace};
+#[cfg(feature = "parsing")]
use std::str;
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -186,6 +190,7 @@
Ty(Ty),
}
+#[cfg(feature = "parsing")]
named!(pub ty<&str, Ty>, alt!(
ty_vec
|
@@ -210,6 +215,7 @@
ty_paren
));
+#[cfg(feature = "parsing")]
named!(ty_vec<&str, Ty>, do_parse!(
punct!("[") >>
elem: ty >>
@@ -217,6 +223,7 @@
(Ty::Vec(Box::new(elem)))
));
+#[cfg(feature = "parsing")]
named!(ty_fixed_length_vec<&str, Ty>, do_parse!(
punct!("[") >>
elem: ty >>
@@ -226,6 +233,7 @@
(Ty::FixedLengthVec(Box::new(elem), size))
));
+#[cfg(feature = "parsing")]
named!(ty_ptr<&str, Ty>, do_parse!(
punct!("*") >>
mutability: alt!(
@@ -240,6 +248,7 @@
})))
));
+#[cfg(feature = "parsing")]
named!(ty_rptr<&str, Ty>, do_parse!(
punct!("&") >>
life: opt!(lifetime) >>
@@ -251,6 +260,7 @@
})))
));
+#[cfg(feature = "parsing")]
named!(ty_bare_fn<&str, Ty>, do_parse!(
punct!("fn") >>
multispace >>
@@ -278,8 +288,10 @@
})))
));
+#[cfg(feature = "parsing")]
named!(ty_never<&str, Ty>, map!(punct!("!"), |_| Ty::Never));
+#[cfg(feature = "parsing")]
named!(ty_tup<&str, Ty>, do_parse!(
punct!("(") >>
elems: separated_list!(punct!(","), ty) >>
@@ -287,8 +299,10 @@
(Ty::Tup(elems))
));
+#[cfg(feature = "parsing")]
named!(ty_path<&str, Ty>, map!(path, |p| Ty::Path(None, p)));
+#[cfg(feature = "parsing")]
named!(ty_qpath<&str, Ty>, do_parse!(
punct!("<") >>
this: map!(ty, Box::new) >>
@@ -316,6 +330,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(ty_impl_trait<&str, Ty>, do_parse!(
punct!("impl") >>
multispace >>
@@ -323,6 +338,7 @@
(Ty::ImplTrait(elem))
));
+#[cfg(feature = "parsing")]
named!(ty_paren<&str, Ty>, do_parse!(
punct!("(") >>
elem: ty >>
@@ -330,6 +346,7 @@
(Ty::Paren(Box::new(elem)))
));
+#[cfg(feature = "parsing")]
named!(mutability<&str, Mutability>, preceded!(
opt!(multispace),
alt!(
@@ -339,6 +356,7 @@
)
));
+#[cfg(feature = "parsing")]
named!(path<&str, Path>, do_parse!(
global: opt!(punct!("::")) >>
segments: separated_nonempty_list!(punct!("::"), path_segment) >>
@@ -348,6 +366,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(path_segment<&str, PathSegment>, alt!(
do_parse!(
ident: word >>
@@ -380,6 +399,7 @@
map!(word, PathSegment::ident)
));
+#[cfg(feature = "parsing")]
named!(type_binding<&str, TypeBinding>, do_parse!(
ident: word >>
punct!("=") >>
@@ -390,6 +410,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(pub poly_trait_ref<&str, PolyTraitRef>, do_parse!(
bound_lifetimes: bound_lifetimes >>
trait_ref: path >>
@@ -399,6 +420,7 @@
})
));
+#[cfg(feature = "parsing")]
named!(fn_arg<&str, Arg>, do_parse!(
pat: opt!(terminated!(word, punct!(":"))) >>
ty: ty >>