pub struct StepCursor<'c, 'a> { /* private fields */ }Expand description
Cursor state associated with speculative parsing.
This type is the input of the closure provided to ParseStream::step.
§Example
use proc_macro2::TokenTree;
use syn::Result;
use syn::parse::ParseStream;
// This function advances the stream past the next occurrence of `@`. If
// no `@` is present in the stream, the stream position is unchanged and
// an error is returned.
fn skip_past_next_at(input: ParseStream) -> Result<()> {
input.step(|cursor| {
let mut rest = *cursor;
while let Some((tt, next)) = rest.token_tree() {
match &tt {
TokenTree::Punct(punct) if punct.as_char() == '@' => {
return Ok(((), next));
}
_ => rest = next,
}
}
Err(cursor.error("no `@` was found after this point"))
})
}Implementations§
Methods from Deref<Target = Cursor<'c>>§
Sourcepub fn eof(self) -> bool
pub fn eof(self) -> bool
Checks whether the cursor is currently pointing at the end of its valid scope.
Sourcepub fn ident(self) -> Option<(Ident, Cursor<'a>)>
pub fn ident(self) -> Option<(Ident, Cursor<'a>)>
If the cursor is pointing at a Ident, returns it along with a cursor
pointing at the next TokenTree.
Sourcepub fn punct(self) -> Option<(Punct, Cursor<'a>)>
pub fn punct(self) -> Option<(Punct, Cursor<'a>)>
If the cursor is pointing at a Punct, returns it along with a cursor
pointing at the next TokenTree.
Sourcepub fn literal(self) -> Option<(Literal, Cursor<'a>)>
pub fn literal(self) -> Option<(Literal, Cursor<'a>)>
If the cursor is pointing at a Literal, return it along with a cursor
pointing at the next TokenTree.
Sourcepub fn lifetime(self) -> Option<(Lifetime, Cursor<'a>)>
pub fn lifetime(self) -> Option<(Lifetime, Cursor<'a>)>
If the cursor is pointing at a Lifetime, returns it along with a
cursor pointing at the next TokenTree.
Sourcepub fn group(
self,
delim: Delimiter,
) -> Option<(Cursor<'a>, DelimSpan, Cursor<'a>)>
pub fn group( self, delim: Delimiter, ) -> Option<(Cursor<'a>, DelimSpan, Cursor<'a>)>
If the cursor is pointing at a Group with the given delimiter, returns
a cursor into that group and one pointing to the next TokenTree.
Sourcepub fn any_group(self) -> Option<(Cursor<'a>, Delimiter, DelimSpan, Cursor<'a>)>
pub fn any_group(self) -> Option<(Cursor<'a>, Delimiter, DelimSpan, Cursor<'a>)>
If the cursor is pointing at a Group, returns a cursor into the group
and one pointing to the next TokenTree.
Sourcepub fn token_stream(self) -> TokenStream
pub fn token_stream(self) -> TokenStream
Copies all remaining tokens visible from this cursor into a
TokenStream.
Sourcepub fn token_tree(self) -> Option<(TokenTree, Cursor<'a>)>
pub fn token_tree(self) -> Option<(TokenTree, Cursor<'a>)>
If the cursor is pointing at a TokenTree, returns it along with a
cursor pointing at the next TokenTree.
Returns None if the cursor has reached the end of its stream.
This method does not treat None-delimited groups as transparent, and
will return a Group(None, ..) if the cursor is looking at one.