pub struct TokenStream(/* private fields */);Expand description
An owned sequence of raw M2 token trees.
Implementations§
Source§impl TokenStream
impl TokenStream
Sourcepub fn iter(
&self,
) -> impl DoubleEndedIterator<Item = &TokenTree> + ExactSizeIterator
pub fn iter( &self, ) -> impl DoubleEndedIterator<Item = &TokenTree> + ExactSizeIterator
Iterates over the stream’s top-level token trees.
Examples found in repository?
examples/live_parser.rs (line 65)
44fn render(source: &str, clear: bool) -> String {
45 let mut output = String::new();
46 if clear {
47 output.push_str("\u{1b}[2J\u{1b}[H");
48 }
49 output.push_str("m2-syn live parser (Ctrl-C/Ctrl-D exit, Backspace edits)\n\n");
50 output.push_str("SOURCE\n");
51 output.push_str(source);
52 if !source.ends_with('\n') {
53 output.push('\n');
54 }
55
56 let recovered_tokens = match lex_str_recovering(source) {
57 Ok(tokens) => tokens,
58 Err(error) => {
59 output.push_str(&format!("\nSTATE\nlexical error: {error}\n"));
60 return output;
61 }
62 };
63 let cell_count = recovered_tokens
64 .value
65 .iter()
66 .filter(|token| matches!(token, TokenTree::Eoc(_)))
67 .count();
68 output.push_str(&format!(
69 "\nSTATE\n{} lexer cell(s); {} recoverable diagnostic(s)\n",
70 cell_count,
71 recovered_tokens.diagnostics.len()
72 ));
73 for diagnostic in &recovered_tokens.diagnostics {
74 write_diagnostic(&mut output, diagnostic);
75 }
76
77 output.push_str("\nTOKENS\n");
78 output.push_str(&format_pretty_tokens(&recovered_tokens.value));
79
80 output.push_str("\nSYNTAX\n");
81 match parse_native_recovering(source) {
82 Ok(parsed) => {
83 if parsed.diagnostics.is_empty() {
84 output.push_str("complete\n");
85 } else {
86 output.push_str("incomplete but structurally recovered\n");
87 }
88 output.push_str(&format_pretty_tree(&parsed.value));
89 }
90 Err(error) => {
91 output.push_str(&format!("expected parser state: {error}\n"));
92 }
93 }
94 output
95}Trait Implementations§
Source§impl Clone for TokenStream
impl Clone for TokenStream
Source§fn clone(&self) -> TokenStream
fn clone(&self) -> TokenStream
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TokenStream
impl Debug for TokenStream
Source§impl Default for TokenStream
impl Default for TokenStream
Source§fn default() -> TokenStream
fn default() -> TokenStream
Returns the “default value” for a type. Read more
Source§impl Display for TokenStream
impl Display for TokenStream
impl Eq for TokenStream
Source§impl<T: Lex> Extend<T> for TokenStream
Appends anything that can emit tokens, one item at a time.
impl<T: Lex> Extend<T> for TokenStream
Appends anything that can emit tokens, one item at a time.
Lex already states which types produce tokens; this states how a
TokenStream accepts them, by forwarding to Lex::to_tokens. It
subsumes the two concrete impls this replaced (TokenTree and
TokenStream itself both implement Lex), and works for any other Lex
type without a bespoke impl.
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Extends a collection with the contents of an iterator. Read more
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
🔬This is a nightly-only experimental API. (
extend_one)Extends a collection with exactly one element.
Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
🔬This is a nightly-only experimental API. (
extend_one)Reserves capacity in a collection for the given number of additional elements. Read more
Source§impl FromIterator<TokenTree> for TokenStream
impl FromIterator<TokenTree> for TokenStream
Source§impl IntoIterator for TokenStream
impl IntoIterator for TokenStream
Source§impl Lex for TokenStream
impl Lex for TokenStream
Source§fn to_tokens(&self, output: &mut TokenStream)
fn to_tokens(&self, output: &mut TokenStream)
Appends this value’s token trees to
output.Source§fn to_token_stream(&self) -> TokenStream
fn to_token_stream(&self) -> TokenStream
Emits this value into a fresh token stream.
Source§impl Parse for TokenStream
impl Parse for TokenStream
Source§fn parse(input: &mut ParseStream) -> Result<Self, TokenParseError>
fn parse(input: &mut ParseStream) -> Result<Self, TokenParseError>
Consumes this value from
input. Read moreSource§impl PartialEq for TokenStream
impl PartialEq for TokenStream
Source§impl Spanned for TokenStream
impl Spanned for TokenStream
impl StructuralPartialEq for TokenStream
Auto Trait Implementations§
impl Freeze for TokenStream
impl RefUnwindSafe for TokenStream
impl Send for TokenStream
impl Sync for TokenStream
impl Unpin for TokenStream
impl UnsafeUnpin for TokenStream
impl UnwindSafe for TokenStream
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more