diff --git a/Cargo.lock b/Cargo.lock index db84fd7..886a1b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -33,9 +33,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "winnow" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b1dbce9e90e5404c5a52ed82b1d13fc8cfbdad85033b6f57546ffd1265f8451" +checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index b6b30ed..537d77d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -112,7 +112,7 @@ pre-release-replacements = [ ] [dependencies] -winnow = "0.6.0" +winnow = "0.7.0" itertools = "0.14" [dev-dependencies] diff --git a/src/quote.rs b/src/quote.rs index 10cc2ee..48cdf99 100644 --- a/src/quote.rs +++ b/src/quote.rs @@ -4,6 +4,7 @@ use itertools::Itertools; use winnow::combinator::{alt, preceded, repeat, terminated}; use winnow::prelude::*; use winnow::token::{one_of, take_while}; +use winnow::Result; #[derive(Debug)] pub struct QuoteError; @@ -20,12 +21,13 @@ pub fn sq_dequote_step<'i>(input: &mut &'i str) -> Result, QuoteErr sq_dequote.parse_next(input).map_err(|_e| QuoteError) } -pub fn sq_dequote<'i>(input: &mut &'i str) -> PResult, ()> { +#[allow(clippy::result_unit_err)] +pub fn sq_dequote<'i>(input: &mut &'i str) -> Result, ()> { // See git's quote.c's `sq_dequote_step` alt((sq_dequote_escaped, sq_dequote_no_escaped)).parse_next(input) } -fn sq_dequote_escaped<'i>(input: &mut &'i str) -> PResult, ()> { +fn sq_dequote_escaped<'i>(input: &mut &'i str) -> Result, ()> { ( sq_dequote_section, sq_dequote_trail, @@ -40,22 +42,22 @@ fn sq_dequote_escaped<'i>(input: &mut &'i str) -> PResult, ()> { .parse_next(input) } -fn sq_dequote_no_escaped<'i>(input: &mut &'i str) -> PResult, ()> { +fn sq_dequote_no_escaped<'i>(input: &mut &'i str) -> Result, ()> { sq_dequote_section.map(Cow::Borrowed).parse_next(input) } -fn sq_dequote_section<'i>(input: &mut &'i str) -> PResult<&'i str, ()> { +fn sq_dequote_section<'i>(input: &mut &'i str) -> Result<&'i str, ()> { terminated(preceded('\'', take_while(0.., |c| c != '\'')), '\'').parse_next(input) } -fn sq_dequote_trail<'i>(input: &mut &'i str) -> PResult<[&'i str; 2], ()> { +fn sq_dequote_trail<'i>(input: &mut &'i str) -> Result<[&'i str; 2], ()> { (escaped, sq_dequote_section) .map(|(e, s)| [e, s]) .parse_next(input) } -fn escaped<'i>(input: &mut &'i str) -> PResult<&'i str, ()> { - preceded('\\', one_of(['\'', '!']).recognize()).parse_next(input) +fn escaped<'i>(input: &mut &'i str) -> Result<&'i str, ()> { + preceded('\\', one_of(['\'', '!']).take()).parse_next(input) } #[cfg(test)]