diff --git a/rust/hg-core/src/configparser/generate_parser.py b/rust/hg-core/src/configparser/generate_parser.py --- a/rust/hg-core/src/configparser/generate_parser.py +++ b/rust/hg-core/src/configparser/generate_parser.py @@ -36,6 +36,8 @@ with open(os.path.join(tmp_root, "src", "lib.rs"), "w") as f: f.write( """ +use pest_derive::*; + #[derive(Parser)] #[grammar = "spec.pest"] pub(crate) struct ConfigParser; @@ -44,9 +46,8 @@ # Run cargo-expand env = os.environ.copy() - env["RUSTFMT"] = "false" expanded = subprocess.check_output( - ["cargo-expand", "--release"], env=env, cwd=tmp_root + ["cargo-expand"], env=env, cwd=tmp_root ) expanded = expanded.decode("utf-8") @@ -67,6 +68,7 @@ pub(crate) struct ConfigParser; +#[rustfmt::skip] {parser_impl} """ diff --git a/rust/hg-core/src/configparser/parser.rs b/rust/hg-core/src/configparser/parser.rs --- a/rust/hg-core/src/configparser/parser.rs +++ b/rust/hg-core/src/configparser/parser.rs @@ -1,8 +1,3 @@ -// Copyright 2018 Facebook, Inc. -// -// This software may be used and distributed according to the terms of the -// GNU General Public License version 2 or any later version. - // Generated by generate_parser.py. Do not edit manually. Instead, edit // spec.pest, then run generate_parser.py (require cargo-expand). @@ -46,18 +41,20 @@ pub(crate) struct ConfigParser; +#[rustfmt::skip] impl ::pest::Parser for ConfigParser { - fn parse<'i>(rule: Rule, input: &'i str) - -> - ::std::result::Result<::pest::iterators::Pairs<'i, Rule>, - ::pest::error::Error> { + fn parse<'i>( + rule: Rule, + input: &'i str, + ) -> ::std::result::Result<::pest::iterators::Pairs<'i, Rule>, ::pest::error::Error> { mod rules { pub mod hidden { use super::super::Rule; #[inline] #[allow(dead_code, non_snake_case, unused_variables)] - pub fn skip(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { + pub fn skip( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { Ok(state) } } @@ -65,587 +62,403 @@ use super::super::Rule; #[inline] #[allow(non_snake_case, unused_variables)] - pub fn new_line(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::new_line, - |state| - { - state.match_string("\n").or_else(|state| - { - state.match_string("\r\n") - }) - }) + pub fn new_line( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::new_line, |state| { + state + .match_string("\n") + .or_else(|state| state.match_string("\r\n")) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn space(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::space, - |state| - { - state.match_string(" ").or_else(|state| - { - state.match_string("\t") - }) - }) + pub fn space( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::space, |state| { + state + .match_string(" ") + .or_else(|state| state.match_string("\t")) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn comment_start(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::comment_start, - |state| - { - state.match_string("#").or_else(|state| - { - state.match_string(";") - }) - }) + pub fn comment_start( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::comment_start, |state| { + state + .match_string("#") + .or_else(|state| state.match_string(";")) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn line(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::line, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.repeat(|state| - { - state.sequence(|state| - { - state.lookahead(false, - |state| - { - self::new_line(state) - }).and_then(|state| - { - self::ANY(state) - }) - }) - }) - }) - }) + pub fn line( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::line, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.repeat(|state| { + state.sequence(|state| { + state + .lookahead(false, |state| self::new_line(state)) + .and_then(|state| self::ANY(state)) + }) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn value(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::value, - |state| - { - state.sequence(|state| - { - self::line(state).and_then(|state| - { - state.repeat(|state| - { - state.sequence(|state| - { - self::new_line(state).and_then(|state| - { - state.sequence(|state| - { - self::space(state).and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }).and_then(|state| - { - self::line(state) - }) - }) - }) - }) - }) + pub fn value( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::value, |state| { + state.sequence(|state| { + self::line(state).and_then(|state| { + state.repeat(|state| { + state.sequence(|state| { + self::new_line(state) + .and_then(|state| { + state.sequence(|state| { + self::space(state).and_then(|state| { + state.repeat(|state| self::space(state)) }) - }) + }) + }) + .and_then(|state| self::line(state)) + }) + }) + }) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn equal_sign(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::equal_sign, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.sequence(|state| - { - state.match_string("=").and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }) - }) + pub fn equal_sign( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::equal_sign, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.sequence(|state| { + state + .match_string("=") + .and_then(|state| state.repeat(|state| self::space(state))) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn config_name(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::config_name, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.sequence(|state| - { - state.lookahead(false, - |state| - { - state.match_string("[").or_else(|state| - { - state.match_string("=") - }).or_else(|state| - { - state.match_string("%") - }).or_else(|state| - { - self::space(state) - }).or_else(|state| - { - self::comment_start(state) - }).or_else(|state| - { - self::new_line(state) - }) - }).and_then(|state| - { - self::ANY(state) - }).and_then(|state| - { - state.repeat(|state| - { - state.sequence(|state| - { - state.lookahead(false, - |state| - { - state.match_string("=").or_else(|state| - { - self::new_line(state) - }) - }).and_then(|state| - { - self::ANY(state) - }) - }) - }) - }) - }) - }) - }) + pub fn config_name( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::config_name, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.sequence(|state| { + state + .lookahead(false, |state| { + state + .match_string("[") + .or_else(|state| state.match_string("=")) + .or_else(|state| state.match_string("%")) + .or_else(|state| self::space(state)) + .or_else(|state| self::comment_start(state)) + .or_else(|state| self::new_line(state)) + }) + .and_then(|state| self::ANY(state)) + .and_then(|state| { + state.repeat(|state| { + state.sequence(|state| { + state + .lookahead(false, |state| { + state + .match_string("=") + .or_else(|state| self::new_line(state)) + }) + .and_then(|state| self::ANY(state)) + }) + }) + }) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn config_item(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::config_item, - |state| - { - state.sequence(|state| - { - self::config_name(state).and_then(|state| - { - self::equal_sign(state) - }).and_then(|state| - { - self::value(state) - }) - }) - }) - }) + pub fn config_item( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::config_item, |state| { + state.sequence(|state| { + self::config_name(state) + .and_then(|state| self::equal_sign(state)) + .and_then(|state| self::value(state)) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn left_bracket(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::left_bracket, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.match_string("[") - }) - }) + pub fn left_bracket( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::left_bracket, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| state.match_string("[")) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn right_bracket(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::right_bracket, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.match_string("]") - }) - }) + pub fn right_bracket( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::right_bracket, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| state.match_string("]")) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn section_name(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::section_name, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.sequence(|state| - { - state.sequence(|state| - { - state.lookahead(false, - |state| - { - state.match_string("]").or_else(|state| - { - self::new_line(state) - }) - }).and_then(|state| - { - self::ANY(state) - }) - }).and_then(|state| - { - state.repeat(|state| - { - state.sequence(|state| - { - state.lookahead(false, - |state| - { - state.match_string("]").or_else(|state| - { - self::new_line(state) - }) - }).and_then(|state| - { - self::ANY(state) - }) - }) - }) - }) - }) - }) - }) + pub fn section_name( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::section_name, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.sequence(|state| { + state + .sequence(|state| { + state + .lookahead(false, |state| { + state + .match_string("]") + .or_else(|state| self::new_line(state)) + }) + .and_then(|state| self::ANY(state)) + }) + .and_then(|state| { + state.repeat(|state| { + state.sequence(|state| { + state + .lookahead(false, |state| { + state + .match_string("]") + .or_else(|state| self::new_line(state)) + }) + .and_then(|state| self::ANY(state)) + }) + }) + }) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn section(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::section, - |state| - { - state.sequence(|state| - { - self::left_bracket(state).and_then(|state| - { - self::section_name(state) - }).and_then(|state| - { - self::right_bracket(state) - }).and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }) - }) + pub fn section( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::section, |state| { + state.sequence(|state| { + self::left_bracket(state) + .and_then(|state| self::section_name(state)) + .and_then(|state| self::right_bracket(state)) + .and_then(|state| state.repeat(|state| self::space(state))) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn comment_line(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::comment_line, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.sequence(|state| - { - self::comment_start(state).and_then(|state| - { - self::line(state) - }) - }) - }) - }) + pub fn comment_line( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::comment_line, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.sequence(|state| { + self::comment_start(state).and_then(|state| self::line(state)) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn blank_line(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.rule(Rule::blank_line, - |state| - { - state.atomic(::pest::Atomicity::Atomic, - |state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) + pub fn blank_line( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.rule(Rule::blank_line, |state| { + state.atomic(::pest::Atomicity::Atomic, |state| { + state.repeat(|state| self::space(state)) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn directive(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::directive, - |state| - { - state.sequence(|state| - { - state.match_string("%").and_then(|state| - { - self::include(state).or_else(|state| - { - self::unset(state) - }) - }) - }) - }) - }) + pub fn directive( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::directive, |state| { + state.sequence(|state| { + state.match_string("%").and_then(|state| { + self::include(state).or_else(|state| self::unset(state)) + }) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn include(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::include, - |state| - { - state.sequence(|state| - { - state.match_string("include").and_then(|state| - { - state.sequence(|state| - { - self::space(state).and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }).and_then(|state| - { - self::line(state) - }) - }) - }) - }) + pub fn include( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::include, |state| { + state.sequence(|state| { + state + .match_string("include") + .and_then(|state| { + state.sequence(|state| { + self::space(state).and_then(|state| { + state.repeat(|state| self::space(state)) + }) + }) + }) + .and_then(|state| self::line(state)) + }) + }) + }) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn unset(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.atomic(::pest::Atomicity::CompoundAtomic, - |state| - { - state.rule(Rule::unset, - |state| - { - state.sequence(|state| - { - state.match_string("unset").and_then(|state| - { - state.sequence(|state| - { - self::space(state).and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }).and_then(|state| - { - self::config_name(state) - }).and_then(|state| - { - state.repeat(|state| - { - self::space(state) - }) - }) - }) - }) - }) + pub fn unset( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.atomic(::pest::Atomicity::CompoundAtomic, |state| { + state.rule(Rule::unset, |state| { + state.sequence(|state| { + state + .match_string("unset") + .and_then(|state| { + state.sequence(|state| { + self::space(state).and_then(|state| { + state.repeat(|state| self::space(state)) + }) + }) + }) + .and_then(|state| self::config_name(state)) + .and_then(|state| state.repeat(|state| self::space(state))) + }) + }) + }) + } + #[inline] + #[allow(non_snake_case, unused_variables)] + pub fn compound( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + self::config_item(state) + .or_else(|state| self::section(state)) + .or_else(|state| self::comment_line(state)) + .or_else(|state| self::directive(state)) + .or_else(|state| self::blank_line(state)) } #[inline] #[allow(non_snake_case, unused_variables)] - pub fn compound(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - self::config_item(state).or_else(|state| - { - self::section(state) - }).or_else(|state| - { - self::comment_line(state) - }).or_else(|state| - { - self::directive(state) - }).or_else(|state| - { - self::blank_line(state) - }) - } - #[inline] - #[allow(non_snake_case, unused_variables)] - pub fn file(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.sequence(|state| - { - self::SOI(state).and_then(|state| - { - super::hidden::skip(state) - }).and_then(|state| - { - self::compound(state) - }).and_then(|state| - { - super::hidden::skip(state) - }).and_then(|state| - { - state.sequence(|state| - { - state.optional(|state| - { - state.sequence(|state| - { - self::new_line(state).and_then(|state| - { - super::hidden::skip(state) - }).and_then(|state| - { - self::compound(state) - }) - }).and_then(|state| - { - state.repeat(|state| - { - state.sequence(|state| - { - super::hidden::skip(state).and_then(|state| - { - state.sequence(|state| - { - self::new_line(state).and_then(|state| - { - super::hidden::skip(state) - }).and_then(|state| - { - self::compound(state) - }) - }) - }) - }) - }) - }) - }) - }) - }).and_then(|state| - { - super::hidden::skip(state) - }).and_then(|state| - { - self::EOI(state) - }) - }) + pub fn file( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.sequence(|state| { + self::SOI(state) + .and_then(|state| super::hidden::skip(state)) + .and_then(|state| self::compound(state)) + .and_then(|state| super::hidden::skip(state)) + .and_then(|state| { + state.sequence(|state| { + state.optional(|state| { + state + .sequence(|state| { + self::new_line(state) + .and_then(|state| super::hidden::skip(state)) + .and_then(|state| self::compound(state)) + }) + .and_then(|state| { + state.repeat(|state| { + state.sequence(|state| { + super::hidden::skip(state).and_then( + |state| { + state.sequence(|state| { + self::new_line(state) + .and_then(|state| { + super::hidden::skip( + state, + ) + }) + .and_then(|state| { + self::compound(state) + }) + }) + }, + ) + }) + }) + }) + }) + }) + }) + .and_then(|state| super::hidden::skip(state)) + .and_then(|state| self::EOI(state)) + }) } #[inline] #[allow(dead_code, non_snake_case, unused_variables)] - pub fn SOI(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { + pub fn ANY( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { + state.skip(1) + } + #[inline] + #[allow(dead_code, non_snake_case, unused_variables)] + pub fn SOI( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { state.start_of_input() } #[inline] #[allow(dead_code, non_snake_case, unused_variables)] - pub fn EOI(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { + pub fn EOI( + state: Box<::pest::ParserState>, + ) -> ::pest::ParseResult>> { state.rule(Rule::EOI, |state| state.end_of_input()) } - #[inline] - #[allow(dead_code, non_snake_case, unused_variables)] - pub fn ANY(state: Box<::pest::ParserState>) - -> ::pest::ParseResult>> { - state.skip(1) - } } pub use self::visible::*; } - ::pest::state(input, - |state| - { - match rule { - Rule::new_line => rules::new_line(state), - Rule::space => rules::space(state), - Rule::comment_start => - rules::comment_start(state), - Rule::line => rules::line(state), - Rule::value => rules::value(state), - Rule::equal_sign => - rules::equal_sign(state), - Rule::config_name => - rules::config_name(state), - Rule::config_item => - rules::config_item(state), - Rule::left_bracket => - rules::left_bracket(state), - Rule::right_bracket => - rules::right_bracket(state), - Rule::section_name => - rules::section_name(state), - Rule::section => rules::section(state), - Rule::comment_line => - rules::comment_line(state), - Rule::blank_line => - rules::blank_line(state), - Rule::directive => rules::directive(state), - Rule::include => rules::include(state), - Rule::unset => rules::unset(state), - Rule::compound => rules::compound(state), - Rule::file => rules::file(state), - Rule::EOI => rules::EOI(state), - } - }) + ::pest::state(input, |state| match rule { + Rule::new_line => rules::new_line(state), + Rule::space => rules::space(state), + Rule::comment_start => rules::comment_start(state), + Rule::line => rules::line(state), + Rule::value => rules::value(state), + Rule::equal_sign => rules::equal_sign(state), + Rule::config_name => rules::config_name(state), + Rule::config_item => rules::config_item(state), + Rule::left_bracket => rules::left_bracket(state), + Rule::right_bracket => rules::right_bracket(state), + Rule::section_name => rules::section_name(state), + Rule::section => rules::section(state), + Rule::comment_line => rules::comment_line(state), + Rule::blank_line => rules::blank_line(state), + Rule::directive => rules::directive(state), + Rule::include => rules::include(state), + Rule::unset => rules::unset(state), + Rule::compound => rules::compound(state), + Rule::file => rules::file(state), + Rule::EOI => rules::EOI(state), + }) } }