Skip to main content

Todo

Struct Todo 

Source
pub struct Todo<O: ?Sized>(/* private fields */);
Expand description

A placeholder parser that panics when executed - for unimplemented parsers.

This parser is a development tool for incrementally building parsers. It allows you to sketch out parser structure with type-correct placeholders that will panic if accidentally executed.

Similar to Rust’s todo!() macro, this parser:

  • Compiles: Type-checks correctly in parser combinators
  • Panics at runtime: Crashes if actually called during parsing
  • 📍 Tracks location: Shows where the Todo was created (via #[track_caller])

§Type Parameters

  • O: The output type the parser would produce if implemented

§Examples

§Sketching Parser Structure

use tokora::parser::{todo_parser, ParseInput};

// Define high-level structure first
fn parse_function<'inp>() -> impl Parse<'inp, MyLexer, Function> {
    todo_parser()  // Implement later
}

// Use in larger parser
let parser = parse_struct()
    .or(parse_function())  // Compiles but panics if called
    .or(parse_enum());

§Type-Driven Development

// Build parser incrementally
struct Module {
    imports: Vec<Import>,
    items: Vec<Item>,
}

fn parse_module<'inp>() -> impl Parse<'inp, MyLexer, Module> {
    todo_parser::<Import>()
        .repeated(stop_condition)
        .collect::<Vec<_>>()
        .then(parse_item().repeated(stop_condition).collect())
        .map(|(imports, items)| Module { imports, items })
}

// Compiles! Implement parse_item later.

§Testing Partial Implementations

// Test the parts you've implemented
fn parse_statement<'inp>() -> impl Parse<'inp, MyLexer, Statement> {
    peek_then_choice((
        parse_let(),       // ✅ Implemented
        parse_if(),        // ✅ Implemented
        todo_parser(),     // 🚧 For/while loops - TODO
    ))
}

// Tests pass as long as they don't hit the todo

§Panics

Always panics when parse_input() is called:

thread 'main' panicked at 'not yet implemented', src/parser.rs:42:5

The panic location points to where .parse() was called (thanks to #[track_caller]).

§When to Use

Good uses:

  • Prototyping parser structure before implementation
  • Incremental development of large grammars
  • Placeholder for rarely-used grammar branches

Don’t use for:

  • Production code (obviously - it panics!)
  • Parsers you intend to execute (use Empty for no-ops)
  • Error handling (use proper error types)

§Comparison with Empty

ParserRuntime BehaviorUse Case
EmptyAlways succeedsActual no-op parser
TodoAlways panicsDevelopment placeholder

§Performance

  • Memory: Zero-sized type
  • Runtime: N/A - panics before doing work

§See Also

  • Empty - Parser that actually does nothing (doesn’t panic)
  • todo!() macro - Rust’s built-in todo placeholder

Implementations§

Source§

impl<O: ?Sized> Todo<O>

Source

pub const fn new() -> Self

Creates a parser that is not yet implemented.

Panics if parse_input() is called.

Trait Implementations§

Source§

impl<O: Clone + ?Sized> Clone for Todo<O>

Source§

fn clone(&self) -> Todo<O>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<O: Copy + ?Sized> Copy for Todo<O>

Source§

impl<O: Debug + ?Sized> Debug for Todo<O>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<O: Default + ?Sized> Default for Todo<O>

Source§

fn default() -> Todo<O>

Returns the “default value” for a type. Read more
Source§

impl<O: Eq + ?Sized> Eq for Todo<O>

Source§

impl<O: Hash + ?Sized> Hash for Todo<O>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'inp, L, O, Ctx, Lang, Cmpl> ParseInput<'inp, L, O, Ctx, Lang, Cmpl> for Todo<O>
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Lang: ?Sized, Cmpl: Completeness,

Source§

fn parse_input( &mut self, _inp: &mut InputRef<'inp, '_, L, Ctx, Lang, Cmpl>, ) -> Result<O, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>,

Try to parse from the given input.
Source§

fn delimited<D>( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> DelimitedOf<'inp, D, L, Ctx, Lang, O>
where Self: Sized, D: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in a committed delimiter pair. Read more
Source§

fn delimited_by_parens( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> DelimitedOf<'inp, Paren<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Paren<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in a committed Paren delimiter pair by delegating to ParseInput::delimited.
Source§

fn delimited_by_braces( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> DelimitedOf<'inp, Brace<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Brace<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in a committed Brace delimiter pair by delegating to ParseInput::delimited.
Source§

fn delimited_by_brackets( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> DelimitedOf<'inp, Bracket<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Bracket<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in a committed Bracket delimiter pair by delegating to ParseInput::delimited.
Source§

fn delimited_by_angles( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> DelimitedOf<'inp, Angle<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Angle<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in a committed Angle delimiter pair by delegating to ParseInput::delimited.
Source§

fn try_delimited<D>( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> TryDelimitedOf<'inp, D, L, Ctx, Lang, O>
where Self: Sized, D: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in an attempted delimiter pair. Read more
Source§

fn try_delimited_by_parens( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> TryDelimitedOf<'inp, Paren<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Paren<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in an attempted Paren delimiter pair by delegating to ParseInput::try_delimited. Read more
Source§

fn try_delimited_by_braces( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> TryDelimitedOf<'inp, Brace<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Brace<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in an attempted Brace delimiter pair by delegating to ParseInput::try_delimited. Read more
Source§

fn try_delimited_by_brackets( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> TryDelimitedOf<'inp, Bracket<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Bracket<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in an attempted Bracket delimiter pair by delegating to ParseInput::try_delimited. Read more
Source§

fn try_delimited_by_angles( self, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang, Cmpl>) -> TryDelimitedOf<'inp, Angle<(), (), Lang>, L, Ctx, Lang, O>
where Self: Sized, Angle<(), (), Lang>: TypedDelimiter<'inp, L, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Cmpl: SurfaceIncomplete<'inp, L, Ctx, Lang>,

Wraps this parser in an attempted Angle delimiter pair by delegating to ParseInput::try_delimited. Read more
Source§

fn spanned(self) -> With<PhantomSpan, Self, Cmpl>
where Self: Sized, L: Lexer<'inp>,

Wraps the output of this parser in a Spanned with the span of the parsed input.
Source§

fn sliced(self) -> With<PhantomSliced, Self, Cmpl>
where Self: Sized, L: Lexer<'inp>,

Wraps the output of this parser in a Sliced with the source slice of the parsed input.
Source§

fn located(self) -> With<PhantomLocated, Self, Cmpl>
where Self: Sized, L: Lexer<'inp>,

Wraps the output of this parser in a Located with the span and source slice of the parsed input.
Source§

fn ignored(self) -> Ignore<Self, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ignore<Self, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, (), Ctx, Lang, Cmpl>,

Ignores the output of this parser.
Source§

fn by_ref(&mut self) -> &mut ByRef<Self>

Creates a parser over a mutable reference to this parser.
Source§

fn fold_while<Condition, Init, Acc, W>( self, pred: Condition, init: Init, acc: Acc, ) -> FoldWhile<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window, FoldWhile<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature fold only.
Creates a FoldWhile combinator that accumulates results while a condition is met.
Source§

fn try_fold_while<Condition, Init, Acc, W>( self, pred: Condition, init: Init, acc: Acc, ) -> TryFoldWhile<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Init: FnMut() -> O, Acc: FnMut(O, O) -> Result<O, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window, TryFoldWhile<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature fold only.
Creates a TryFoldWhile combinator that accumulates results while a condition is met. Read more
Source§

fn try_fold_while_with<Condition, Init, Acc, W>( self, pred: Condition, init: Init, acc: Acc, ) -> TryFoldWhileWith<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Init: FnMut() -> O, Acc: FnMut(O, O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> Result<O, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window, TryFoldWhileWith<Self, Condition, Init, Acc, O, W, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature fold only.
Creates a TryFoldWhileWith combinator that accumulates results while a condition is met, with access to parsing state.
Source§

fn rfold_while<Condition, Init, Acc, W>( self, condition: Condition, init: Init, acc: Acc, ) -> RFoldWhile<Self, Condition, Init, Acc, L, O, W, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Init: FnMut() -> O, Acc: FnMut(O, O) -> O, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window, RFoldWhile<Self, Condition, Init, Acc, L, O, W, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature fold and (crate features alloc or std) only.
Creates a RFoldWhile combinator that applies this parser repeatedly, while a condition is met, and folds results in reverse order. Read more
Source§

fn repeated_while<Condition, W>( self, condition: Condition, ) -> RepeatedWhile<Self, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a RepeatedWhile combinator that applies this parser repeatedly, where you provide the lookahead logic. Read more
Source§

fn separated_while<Sep, Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Sep, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, Sep: Punctuator<'inp, L, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator that parses separated elements, where you provide the lookahead logic. Read more
Source§

fn separated_by_comma_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Comma<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the comma separator and applies this parser repeatedly. Read more
Source§

fn separated_by_semicolon_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Semicolon<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the semicolon separator and applies this parser repeatedly. Read more
Source§

fn separated_by_dot_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Dot<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the dot separator and applies this parser repeatedly. Read more
Source§

fn separated_by_colon_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Colon<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the colon separator and applies this parser repeatedly. Read more
Source§

fn separated_by_pipe_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Pipe<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the pipe separator and applies this parser repeatedly. Read more
Source§

fn separated_by_ampersand_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Ampersand<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the ampersand separator and applies this parser repeatedly. Read more
Source§

fn separated_by_hyphen_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Hyphen<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the hyphen separator and applies this parser repeatedly. Read more
Source§

fn separated_by_underscore_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Underscore<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the underscore separator and applies this parser repeatedly. Read more
Source§

fn separated_by_double_colon_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, DoubleColon<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the double_colon separator and applies this parser repeatedly. Read more
Source§

fn separated_by_arrow_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Arrow<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the arrow separator and applies this parser repeatedly. Read more
Source§

fn separated_by_fat_arrow_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, FatArrow<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the fat_arrow separator and applies this parser repeatedly. Read more
Source§

fn separated_by_tilde_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Tilde<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the tilde separator and applies this parser repeatedly. Read more
Source§

fn separated_by_slash_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Slash<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the slash separator and applies this parser repeatedly. Read more
Source§

fn separated_by_backslash_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Backslash<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the backslash separator and applies this parser repeatedly. Read more
Source§

fn separated_by_percent_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Percent<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the percent separator and applies this parser repeatedly. Read more
Source§

fn separated_by_dollar_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Dollar<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the dollar separator and applies this parser repeatedly. Read more
Source§

fn separated_by_hash_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, Hash<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the hash separator and applies this parser repeatedly. Read more
Source§

fn separated_by_at_while<Condition, W>( self, condition: Condition, ) -> SeparatedWhile<Self, At<(), (), Lang>, Condition, O, W, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, L::Token: PunctuatorToken<'inp>, Ctx: ParseContext<'inp, L, Lang>, Condition: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window,

Available on crate feature many only.
Creates a SeparatedWhile combinator which separates elements by the at separator and applies this parser repeatedly. Read more
Source§

fn labelled(self, name: &'static str) -> Labelled<Self>
where Self: Sized,

Method form of the free labelled.
Source§

fn traced(self, name: &'static str) -> Traced<Self>
where Self: Sized,

Available on crate feature trace only.
Method form of the free traced.
Source§

fn list_until<Until>( self, until: Until, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang>) -> ListOf<'inp, L, Ctx, Lang, O>
where Self: Sized + ParseInput<'inp, L, O, Ctx, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Until: FnMut(&L::Token) -> bool,

Available on crate feature many and (crate features alloc or std) only.
Method form of the free list — named list_until because the until argument is the distinguishing half. Read more
Source§

fn separated1_by<Sep, Peek>( self, peek: Peek, ) -> impl for<'c> FnMut(&mut InputRef<'inp, 'c, L, Ctx, Lang>) -> Separated1Of<'inp, L, Ctx, Lang, O>
where Self: Sized + ParseInput<'inp, L, O, Ctx, Lang>, L: Lexer<'inp>, Ctx: ComposableParseContext<'inp, L, Lang>, Sep: Punctuator<'inp, L, Lang>, Peek: FnMut(&L::Token) -> bool,

Available on crate feature many and (crate features alloc or std) only.
Method form of the free separated1 — the committed-first “light” list shape, fluent. Read more
Source§

fn peek_then<C, W>(self, condition: C) -> PeekThen<Self, C, L::Token, W, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, C: FnMut(Peeked<'_, 'inp, L, W>, EmitterView<'_, 'inp, L, Ctx::Emitter, Lang>) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, W: Window, PeekThen<Self, C, L::Token, W, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature peek only.
Creates a PeekThen combinator that peeks at most N tokens first from the input before parsing. Read more
Source§

fn peek_then_try<C, W>( self, condition: C, ) -> PeekThen<Self, C, L::Token, W, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, C: Decision<'inp, L, Ctx::Emitter, W, Lang>, W: Window, PeekThen<Self, C, L::Token, W, Cmpl>: TryParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature peek only.
Creates a PeekThen combinator that peeks at most N tokens first from the input before parsing. Read more
Source§

fn peek_then_head<C>( self, condition: C, ) -> PeekThen<Self, impl FnMut(Peeked<'_, 'inp, L, U1>, EmitterView<'_, 'inp, L, Ctx::Emitter, Lang>) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, L::Token, U1, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, C: FnMut(Option<Spanned<&L::Token, &L::Span>>) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>,

Available on crate feature peek only.
The width-1 twin of peek_then: the condition sees Some(head) or None (end of input) in grammar vocabulary. Read more
Source§

fn map<U, F>(self, f: F) -> Map<Self, F, L, Ctx, O, U, Lang, Cmpl>
where Self: Sized, F: FnMut(O) -> U, L: Lexer<'inp>, Map<Self, F, L, Ctx, O, U, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature map only.
Map the output of this parser using the given function.
Source§

fn map_with<U, F>(self, f: F) -> MapWith<Self, F, L, Ctx, O, U, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> U, MapWith<Self, F, L, Ctx, O, U, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature map only.
Map the output of this parser using the given function.
Source§

fn filter<F>(self, validator: F) -> Filter<Self, F, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(&O) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>, Filter<Self, F, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature filter only.
Filter the output of this parser using a validation function.
Source§

fn filter_with<F>( self, validator: F, ) -> FilterWith<Self, F, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(&O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>, FilterWith<Self, F, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature filter only.
Filter the output of this parser using a validation function.
Source§

fn filter_map<U, F>( self, mapper: F, ) -> FilterMap<Self, F, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(O) -> Result<U, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>, FilterMap<Self, F, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature filter only.
Filter and map the output of this parser using a validation/transformation function. Read more
Source§

fn filter_map_with<U, F>( self, mapper: F, ) -> FilterMapWith<Self, F, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> Result<U, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>, FilterMapWith<Self, F, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature filter only.
Filter and map the output of this parser using a validation/transformation function. Read more
Source§

fn validate<F>(self, validator: F) -> Validate<Self, F, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(&O) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>,

Available on crate feature validate only.
Validate the output of this parser with full location context.
Source§

fn validate_with<F>( self, validator: F, ) -> ValidateWith<Self, F, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, F: FnMut(&O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> Result<(), <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>,

Available on crate feature validate only.
Validate the output of this parser with full location context.
Source§

fn then_ignore<G, U>( self, second: G, ) -> ThenIgnore<Self, G, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, G: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>, Ctx: ParseContext<'inp, L, Lang>, ThenIgnore<Self, G, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Available on crate feature then only.
Sequence this parser with another, ignoring the output of the second.
Source§

fn then_value<F, U>( self, value: F, ) -> ThenValue<Self, F, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, F: FnMut() -> U,

Available on crate feature then only.
Sequence this parser with a fixed value, ignoring the output of the first.
Source§

fn and_then<T, U>(self, then: T) -> AndThen<Self, T, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, T: FnMut(O) -> Result<U, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, AndThen<Self, T, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature then only.
Sequence this parser with another, using the first result to determine the second parser.
Source§

fn and_then_with<T, U>( self, then: T, ) -> AndThenWith<Self, T, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, T: FnMut(O, ParseState<'_, 'inp, '_, L, Ctx, Lang, Cmpl>) -> Result<U, <Ctx::Emitter as Emitter<'inp, L, Lang>>::Error>, Ctx: ParseContext<'inp, L, Lang>, L: Lexer<'inp>, AndThenWith<Self, T, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature then only.
Sequence this parser with another, using the first result to determine the second parser.
Source§

fn then<T, U>(self, then: T) -> Then<Self, T, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, T: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>, Ctx: ParseContext<'inp, L, Lang>, Then<Self, T, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, (O, U), Ctx, Lang, Cmpl>,

Available on crate feature then only.
Sequence this parser with another, keeping both outputs.
Source§

fn ignore_then<G, U>( self, second: G, ) -> IgnoreThen<Self, G, O, U, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, G: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>, IgnoreThen<Self, G, O, U, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, U, Ctx, Lang, Cmpl>,

Available on crate feature then only.
Sequence this parser with another, ignoring the output of the first.
Source§

fn recover<R>(self, recovery: R) -> Recover<Self, R, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, R: RecoverInput<'inp, L, O, Ctx, Lang, Cmpl>, Ctx: ParseContext<'inp, L, Lang>, Recover<Self, R, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Recover from errors by trying an alternative parser with backtracking. Read more
Source§

fn inplace_recover<R>( self, recovery: R, ) -> InplaceRecover<Self, R, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, R: InplaceRecoverInput<'inp, L, O, Ctx, Lang, Cmpl>, Ctx: ParseContext<'inp, L, Lang>, InplaceRecover<Self, R, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Recover from errors without backtracking, continuing from the error position. Read more
Source§

fn skip_then_retry<D, F>( self, classifier: D, pred: F, ) -> SkipThenRetry<Self, D, F, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, D: DelimClass<<L::Token as Token<'inp>>::Kind>, F: FnMut(Spanned<&L::Token, &L::Span>) -> bool, Ctx: ParseContext<'inp, L, Lang>, SkipThenRetry<Self, D, F, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Recover from errors by skipping — nesting-aware — to a synchronization point and retrying this parser. Read more
Source§

fn padded(self) -> Padded<Self, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, Padded<Self, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Creates a parser that accepts any token with optional padding.
Source§

fn padded_left(self) -> PaddedLeft<Self, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, PaddedLeft<Self, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Creates a parser that accepts any token with optional padding.
Source§

fn padded_right(self) -> PaddedRight<Self, O, L, Ctx, Lang, Cmpl>
where Self: Sized, L: Lexer<'inp>, PaddedRight<Self, O, L, Ctx, Lang, Cmpl>: ParseInput<'inp, L, O, Ctx, Lang, Cmpl>,

Creates a parser that accepts any token with optional padding.
Source§

impl<O: PartialEq + ?Sized> PartialEq for Todo<O>

Source§

fn eq(&self, other: &Todo<O>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<O: PartialEq + ?Sized> StructuralPartialEq for Todo<O>

Auto Trait Implementations§

§

impl<O> Freeze for Todo<O>
where PhantomData<O>: Freeze, O: ?Sized,

§

impl<O> RefUnwindSafe for Todo<O>

§

impl<O> Send for Todo<O>
where PhantomData<O>: Send, O: ?Sized,

§

impl<O> Sync for Todo<O>
where PhantomData<O>: Sync, O: ?Sized,

§

impl<O> Unpin for Todo<O>
where PhantomData<O>: Unpin, O: ?Sized,

§

impl<O> UnsafeUnpin for Todo<O>
where PhantomData<O>: UnsafeUnpin, O: ?Sized,

§

impl<O> UnwindSafe for Todo<O>
where PhantomData<O>: UnwindSafe, O: ?Sized,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'inp, F, L, O, Ctx, Lang, Cmpl> ParseInputUnwrapExt<'inp, L, O, Ctx, Lang, Cmpl> for F
where F: ParseInput<'inp, L, Option<O>, Ctx, Lang, Cmpl>, L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, Lang: ?Sized,

Source§

fn unwrap(self) -> Unwrapped<Self, O, Ctx, Lang, Cmpl>
where Self: Sized + ParseInput<'inp, L, Option<O>, Ctx, Lang, Cmpl>,

Creates an Unwrapped parser that unwraps the Option result of this parser.
Source§

impl<'inp, P, Power, L, Op, Pre, Ctx, Lang> ParsePrattLHS<'inp, Power, Op, Pre, L, Ctx, Lang> for P
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, P: ParseInput<'inp, L, PrattLHS<Op, Pre, Power>, Ctx, Lang>, Lang: ?Sized,

Source§

fn parse_pratt_lhs( &mut self, input: &mut InputRef<'inp, '_, L, Ctx, Lang>, ) -> Result<PrattLHS<Op, Pre, Power>, <<Ctx as ParseContext<'inp, L, Lang>>::Emitter as Emitter<'inp, L, Lang>>::Error>
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>,

Available on crate feature pratt only.
Try to parse a pratt lhs from the lexer input, returning with its precedence level if successful.
Source§

impl<'inp, P, Power, LeftAssoc, RightAssoc, NeitherAssoc, Post, L, Ctx, Lang> ParsePrattRHS<'inp, Power, LeftAssoc, RightAssoc, NeitherAssoc, Post, L, Ctx, Lang> for P
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>, P: ParseInput<'inp, L, PrattRHS<LeftAssoc, RightAssoc, NeitherAssoc, Post, Power>, Ctx, Lang>, Lang: ?Sized,

Source§

fn parse_pratt_rhs( &mut self, input: &mut InputRef<'inp, '_, L, Ctx, Lang>, ) -> Result<PrattRHS<LeftAssoc, RightAssoc, NeitherAssoc, Post, Power>, <<Ctx as ParseContext<'inp, L, Lang>>::Emitter as Emitter<'inp, L, Lang>>::Error>
where L: Lexer<'inp>, Ctx: ParseContext<'inp, L, Lang>,

Available on crate feature pratt only.
Try to parse a pratt rhs from the lexer input, returning with its precedence level if successful.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.