Struct proc_macro::TokenStream
1.15.0 · source · pub struct TokenStream(/* private fields */);
Expand description
The main type provided by this crate, representing an abstract stream of tokens, or, more specifically, a sequence of token trees. The type provide interfaces for iterating over those token trees and, conversely, collecting a number of token trees into one stream.
This is both the input and output of #[proc_macro]
, #[proc_macro_attribute]
and #[proc_macro_derive]
definitions.
Implementations§
source§impl TokenStream
impl TokenStream
1.29.0 · sourcepub fn new() -> TokenStream
pub fn new() -> TokenStream
Returns an empty TokenStream
containing no token trees.
sourcepub fn expand_expr(&self) -> Result<TokenStream, ExpandError>
🔬This is a nightly-only experimental API. (proc_macro_expand
#90765)
pub fn expand_expr(&self) -> Result<TokenStream, ExpandError>
proc_macro_expand
#90765)Parses this TokenStream
as an expression and attempts to expand any
macros within it. Returns the expanded TokenStream
.
Currently only expressions expanding to literals will succeed, although this may be relaxed in the future.
NOTE: In error conditions, expand_expr
may leave macros unexpanded,
report an error, failing compilation, and/or return an Err(..)
. The
specific behavior for any error condition, and what conditions are
considered errors, is unspecified and may change in the future.
Trait Implementations§
source§impl Clone for TokenStream
impl Clone for TokenStream
source§fn clone(&self) -> TokenStream
fn clone(&self) -> TokenStream
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for TokenStream
impl Debug for TokenStream
Prints token in a form convenient for debugging.
1.45.0 · source§impl Default for TokenStream
impl Default for TokenStream
source§impl Display for TokenStream
impl Display for TokenStream
Prints the token stream as a string that is supposed to be losslessly convertible back
into the same token stream (modulo spans), except for possibly TokenTree::Group
s
with Delimiter::None
delimiters and negative numeric literals.
Note: the exact form of the output is subject to change, e.g. there might
be changes in the whitespace used between tokens. Therefore, you should
not do any kind of simple substring matching on the output string (as
produced by to_string
) to implement a proc macro, because that matching
might stop working if such changes happen. Instead, you should work at the
TokenTree
level, e.g. matching against TokenTree::Ident
,
TokenTree::Punct
, or TokenTree::Literal
.
1.30.0 · source§impl Extend<TokenStream> for TokenStream
impl Extend<TokenStream> for TokenStream
source§fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I)
fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I)
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
#72631)1.30.0 · source§impl Extend<TokenTree> for TokenStream
impl Extend<TokenTree> for TokenStream
source§fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, trees: I)
fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, trees: I)
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
#72631)1.29.0 · source§impl From<TokenTree> for TokenStream
impl From<TokenTree> for TokenStream
Creates a token stream containing a single token tree.
source§fn from(tree: TokenTree) -> TokenStream
fn from(tree: TokenTree) -> TokenStream
source§impl FromIterator<TokenStream> for TokenStream
impl FromIterator<TokenStream> for TokenStream
A “flattening” operation on token streams, collects token trees from multiple token streams into a single stream.
source§fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self
fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self
1.29.0 · source§impl FromIterator<TokenTree> for TokenStream
impl FromIterator<TokenTree> for TokenStream
Collects a number of token trees into a single stream.
source§impl FromStr for TokenStream
impl FromStr for TokenStream
Attempts to break the string into tokens and parse those tokens into a token stream.
May fail for a number of reasons, for example, if the string contains unbalanced delimiters
or characters not existing in the language.
All tokens in the parsed stream get Span::call_site()
spans.
NOTE: some errors may cause panics instead of returning LexError
. We reserve the right to
change these errors into LexError
s later.