mirror of
https://github.com/crate-ci/typos.git
synced 2025-02-15 09:33:00 -05:00
commit
4f604f6eff
5 changed files with 49 additions and 41 deletions
19
Cargo.lock
generated
19
Cargo.lock
generated
|
@ -1451,7 +1451,7 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_spanned",
|
"serde_spanned",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
"winnow",
|
"winnow 0.6.26",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1508,7 +1508,7 @@ dependencies = [
|
||||||
"simdutf8",
|
"simdutf8",
|
||||||
"snapbox",
|
"snapbox",
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
"winnow",
|
"winnow 0.7.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1702,7 +1702,7 @@ version = "5.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"enumflags2",
|
"enumflags2",
|
||||||
"snapbox",
|
"snapbox",
|
||||||
"winnow",
|
"winnow 0.7.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1917,9 +1917,18 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.6.21"
|
version = "0.6.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6f5bb5257f2407a5425c6e749bfd9692192a73e70a6060516ac04f889087d68"
|
checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winnow"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,7 +16,7 @@ all-features = true
|
||||||
rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
|
rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
winnow = "0.6.7"
|
winnow = "0.7.0"
|
||||||
unicode-xid = "0.2.4"
|
unicode-xid = "0.2.4"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
simdutf8 = "0.1.4"
|
simdutf8 = "0.1.4"
|
||||||
|
|
|
@ -140,12 +140,13 @@ mod parser {
|
||||||
use winnow::stream::Stream;
|
use winnow::stream::Stream;
|
||||||
use winnow::stream::StreamIsPartial;
|
use winnow::stream::StreamIsPartial;
|
||||||
use winnow::token::{one_of, take_while};
|
use winnow::token::{one_of, take_while};
|
||||||
|
use winnow::Result;
|
||||||
|
|
||||||
/// Avoid worst-case parse times by limiting how much a `take_while` can take if something
|
/// Avoid worst-case parse times by limiting how much a `take_while` can take if something
|
||||||
/// later may cause it to fail.
|
/// later may cause it to fail.
|
||||||
const NON_TERMINATING_CAP: usize = 1024;
|
const NON_TERMINATING_CAP: usize = 1024;
|
||||||
|
|
||||||
pub(crate) fn next_identifier<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
pub(crate) fn next_identifier<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -155,7 +156,7 @@ mod parser {
|
||||||
preceded(ignore, identifier).parse_next(input)
|
preceded(ignore, identifier).parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn identifier<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn identifier<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -173,7 +174,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ignore<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn ignore<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -204,7 +205,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sep1<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn sep1<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -217,7 +218,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn other<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn other<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -234,7 +235,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ordinal_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn ordinal_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -260,7 +261,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dec_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn dec_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -269,7 +270,7 @@ mod parser {
|
||||||
trace("dec_literal", take_while(1.., is_dec_digit_with_sep)).parse_next(input)
|
trace("dec_literal", take_while(1.., is_dec_digit_with_sep)).parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hex_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn hex_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -281,7 +282,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn css_color<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn css_color<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -302,7 +303,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn jwt<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn jwt<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -337,7 +338,7 @@ mod parser {
|
||||||
|| c == '-'
|
|| c == '-'
|
||||||
}
|
}
|
||||||
|
|
||||||
fn uuid_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn uuid_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -375,7 +376,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hash_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn hash_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -401,7 +402,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn base64_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn base64_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -425,10 +426,8 @@ mod parser {
|
||||||
.iter()
|
.iter()
|
||||||
.all(|c| !['/', '+'].contains(&c.as_char()))
|
.all(|c| !['/', '+'].contains(&c.as_char()))
|
||||||
{
|
{
|
||||||
return Err(winnow::error::ErrMode::from_error_kind(
|
#[allow(clippy::unit_arg)]
|
||||||
input,
|
return Err(ParserError::from_input(input));
|
||||||
winnow::error::ErrorKind::Slice,
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
take_while(padding_len..=padding_len, is_base64_padding).parse_next(input)?;
|
take_while(padding_len..=padding_len, is_base64_padding).parse_next(input)?;
|
||||||
|
@ -440,7 +439,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn email_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn email_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -459,7 +458,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn url_literal<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn url_literal<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -492,7 +491,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn url_userinfo<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn url_userinfo<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
@ -510,7 +509,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn c_escape<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn c_escape<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
<T as Stream>::Slice: AsBStr + SliceLen + Default,
|
||||||
|
@ -531,7 +530,7 @@ mod parser {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn printf<T>(input: &mut T) -> PResult<<T as Stream>::Slice, ()>
|
fn printf<T>(input: &mut T) -> Result<<T as Stream>::Slice, ()>
|
||||||
where
|
where
|
||||||
T: Compare<char>,
|
T: Compare<char>,
|
||||||
T: Stream + StreamIsPartial + PartialEq,
|
T: Stream + StreamIsPartial + PartialEq,
|
||||||
|
|
|
@ -20,7 +20,7 @@ parser = ["dep:winnow"]
|
||||||
flags = ["dep:enumflags2"]
|
flags = ["dep:enumflags2"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
winnow = { version = "0.6.7", optional = true }
|
winnow = { version = "0.7.0", optional = true }
|
||||||
enumflags2 = { version = "0.7", optional = true }
|
enumflags2 = { version = "0.7", optional = true }
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
|
|
|
@ -546,7 +546,7 @@ impl Cluster {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("cluster", move |input: &mut &str| {
|
trace("cluster", move |input: &mut &str| {
|
||||||
let header = (
|
let header = (
|
||||||
"#",
|
"#",
|
||||||
|
@ -966,7 +966,7 @@ impl Entry {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("entry", move |input: &mut &str| {
|
trace("entry", move |input: &mut &str| {
|
||||||
let var_sep = (winnow::ascii::space0, '/', winnow::ascii::space0);
|
let var_sep = (winnow::ascii::space0, '/', winnow::ascii::space0);
|
||||||
let variants =
|
let variants =
|
||||||
|
@ -987,7 +987,7 @@ impl Entry {
|
||||||
.parse_next(input)
|
.parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_description(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_description(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("description", move |input: &mut &str| {
|
trace("description", move |input: &mut &str| {
|
||||||
let mut entry = Self {
|
let mut entry = Self {
|
||||||
variants: Vec::new(),
|
variants: Vec::new(),
|
||||||
|
@ -1023,18 +1023,18 @@ impl Entry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn note(input: &mut &str) -> PResult<String, ()> {
|
fn note(input: &mut &str) -> ModalResult<String, ()> {
|
||||||
let (_, _, note) = (NOTE_PREFIX, space1, description).parse_next(input)?;
|
let (_, _, note) = (NOTE_PREFIX, space1, description).parse_next(input)?;
|
||||||
Ok(note)
|
Ok(note)
|
||||||
}
|
}
|
||||||
|
|
||||||
const NOTE_PREFIX: &str = "--";
|
const NOTE_PREFIX: &str = "--";
|
||||||
|
|
||||||
fn archaic(input: &mut &str) -> PResult<(), ()> {
|
fn archaic(input: &mut &str) -> ModalResult<(), ()> {
|
||||||
"(-)".void().parse_next(input)
|
"(-)".void().parse_next(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn description(input: &mut &str) -> PResult<String, ()> {
|
fn description(input: &mut &str) -> ModalResult<String, ()> {
|
||||||
let description = winnow::token::take_till(0.., ('\n', '\r', '#', '|')).parse_next(input)?;
|
let description = winnow::token::take_till(0.., ('\n', '\r', '#', '|')).parse_next(input)?;
|
||||||
Ok(description.to_owned())
|
Ok(description.to_owned())
|
||||||
}
|
}
|
||||||
|
@ -1573,7 +1573,7 @@ impl Variant {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("variant", move |input: &mut &str| {
|
trace("variant", move |input: &mut &str| {
|
||||||
let types = winnow::combinator::separated(1.., Type::parse_, space1);
|
let types = winnow::combinator::separated(1.., Type::parse_, space1);
|
||||||
let columns =
|
let columns =
|
||||||
|
@ -1592,7 +1592,7 @@ impl Variant {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn word(input: &mut &str) -> PResult<String, ()> {
|
fn word(input: &mut &str) -> ModalResult<String, ()> {
|
||||||
trace("word", move |input: &mut &str| {
|
trace("word", move |input: &mut &str| {
|
||||||
winnow::token::take_till(1.., |item: char| item.is_ascii_whitespace())
|
winnow::token::take_till(1.., |item: char| item.is_ascii_whitespace())
|
||||||
.map(|s: &str| s.to_owned().replace('_', " "))
|
.map(|s: &str| s.to_owned().replace('_', " "))
|
||||||
|
@ -1734,7 +1734,7 @@ impl Type {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Type, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Type, ()> {
|
||||||
trace("type", move |input: &mut &str| {
|
trace("type", move |input: &mut &str| {
|
||||||
let category = Category::parse_(input)?;
|
let category = Category::parse_(input)?;
|
||||||
let tag = opt(Tag::parse_).parse_next(input)?;
|
let tag = opt(Tag::parse_).parse_next(input)?;
|
||||||
|
@ -1850,7 +1850,7 @@ impl Category {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("category", move |input: &mut &str| {
|
trace("category", move |input: &mut &str| {
|
||||||
let symbols = one_of(['A', 'B', 'Z', 'C', 'D', '_']);
|
let symbols = one_of(['A', 'B', 'Z', 'C', 'D', '_']);
|
||||||
symbols
|
symbols
|
||||||
|
@ -1909,7 +1909,7 @@ impl Tag {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("tag", move |input: &mut &str| {
|
trace("tag", move |input: &mut &str| {
|
||||||
let symbols = one_of(['.', 'v', 'V', '-', 'x']);
|
let symbols = one_of(['.', 'v', 'V', '-', 'x']);
|
||||||
symbols
|
symbols
|
||||||
|
@ -1967,7 +1967,7 @@ impl Pos {
|
||||||
Self::parse_.parse(input).map_err(|_err| ParseError)
|
Self::parse_.parse(input).map_err(|_err| ParseError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_(input: &mut &str) -> PResult<Self, ()> {
|
fn parse_(input: &mut &str) -> ModalResult<Self, ()> {
|
||||||
trace("pos", move |input: &mut &str| {
|
trace("pos", move |input: &mut &str| {
|
||||||
alt((
|
alt((
|
||||||
"N".value(Pos::Noun),
|
"N".value(Pos::Noun),
|
||||||
|
|
Loading…
Add table
Reference in a new issue