1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
//! A collection of excellent utilities for nom, including: //! //! - [`ParserExt`][parser_ext::ParserExt], a trait which makes available //! many common nom parser combinators as postfix methods, to complement //! those already available on [`nom::Parser`]. //! - [`ErrorTree`][error::ErrorTree], a nom error which retains as much //! information and context as possible about the details of the failed //! parse, with an excellent indenting formatter for printing these failures. //! Integrates with the extra error features of `nom-supreme`. //! - Improved [`tag`] parsers, which attach the mismatched the error in the //! event of a parse failure, similar to //! [`char`][nom::character::complete::char]. //! - [`parse_separated_terminated`][multi::parse_separated_terminated], the //! perfected folding parser for building parse loops. //! - [`final_parser`][final_parser::final_parser], which serves as a bridge //! between nom-style [`IResult`][nom::IResult] parsers and more typical rust //! results. It decorates a nom parser, requiring it to parse all of its //! input, not return `Incomplete`. It also uses an //! [`ExtractContext`][final_parser::ExtractContext] trait to convert the //! error locations in nom errors, which are usually just suffixes of the //! input, into more useful locations, such as a line and column number. #![deny(missing_docs)] /// Call a method or methods on an object, and then return the original object. /// /// The input to this macro is the methods calls written in a chaining style: /// `express!(vec.push(1).push(2).push(3))`, which is transformed into a series /// of calls on the original object, then returning that object. macro_rules! express { ($thing:ident $( . $method:ident ( $($args:tt)* ) )*) => {{ let mut thing = $thing; $( thing.$method($($args)*); )* thing }}; } pub mod error; pub mod final_parser; mod from_str; pub mod multi; pub mod parser_ext; pub mod tag; pub use from_str::parse_from_str; pub use parser_ext::ParserExt;