Expand description
Tokens representing Rust punctuation, keywords, and delimiters.
The type names in this module can be difficult to keep straight, so we
prefer to use the Token!
macro instead. This is a type-macro that
expands to the token type of the given token.
§Example
The ItemStatic
syntax tree node is defined like this.
pub struct ItemStatic {
pub attrs: Vec<Attribute>,
pub vis: Visibility,
pub static_token: Token![static],
pub mutability: Option<Token![mut]>,
pub ident: Ident,
pub colon_token: Token![:],
pub ty: Box<Type>,
pub eq_token: Token![=],
pub expr: Box<Expr>,
pub semi_token: Token![;],
}
§Parsing
Keywords and punctuation can be parsed through the ParseStream::parse
method. Delimiter tokens are parsed using the parenthesized!
,
bracketed!
and braced!
macros.
use syn::{Attribute, Result};
use syn::parse::{Parse, ParseStream};
// Parse the ItemStatic struct shown above.
impl Parse for ItemStatic {
fn parse(input: ParseStream) -> Result<Self> {
Ok(ItemStatic {
attrs: input.call(Attribute::parse_outer)?,
vis: input.parse()?,
static_token: input.parse()?,
mutability: input.parse()?,
ident: input.parse()?,
colon_token: input.parse()?,
ty: input.parse()?,
eq_token: input.parse()?,
expr: input.parse()?,
semi_token: input.parse()?,
})
}
}
§Other operations
Every keyword and punctuation token supports the following operations.
Structs§
- Abstract
abstract
- And
&
- AndAnd
&&
- AndEq
&=
- As
as
- Async
async
- At
@
- Auto
auto
- Await
await
- Become
become
- Box
box
- Brace
{
…}
- Bracket
[
…]
- Break
break
- Caret
^
- CaretEq
^=
- Colon
:
- Comma
,
- Const
const
- Continue
continue
- Crate
crate
- Default
default
- Do
do
- Dollar
$
- Dot
.
- DotDot
..
- DotDot
Dot ...
- DotDot
Eq ..=
- Dyn
dyn
- Else
else
- Enum
enum
- Eq
=
- EqEq
==
- Extern
extern
- FatArrow
=>
- Final
final
- Fn
fn
- For
for
- Ge
>=
- Group
- None-delimited group
- Gt
>
- If
if
- Impl
impl
- In
in
- LArrow
<-
- Le
<=
- Let
let
- Loop
loop
- Lt
<
- Macro
macro
- Match
match
- Minus
-
- MinusEq
-=
- Mod
mod
- Move
move
- Mut
mut
- Ne
!=
- Not
!
- Or
|
- OrEq
|=
- OrOr
||
- Override
override
- Paren
(
…)
- PathSep
::
- Percent
%
- Percent
Eq %=
- Plus
+
- PlusEq
+=
- Pound
#
- Priv
priv
- Pub
pub
- Question
?
- RArrow
->
- Raw
raw
- Ref
ref
- Return
return
- Self
Type Self
- Self
Value self
- Semi
;
- Shl
<<
- ShlEq
<<=
- Shr
>>
- ShrEq
>>=
- Slash
/
- SlashEq
/=
- Star
*
- StarEq
*=
- Static
static
- Struct
struct
- Super
super
- Tilde
~
- Trait
trait
- Try
try
- Type
type
- Typeof
typeof
- Underscore
_
- Union
union
- Unsafe
unsafe
- Unsized
unsized
- Use
use
- Virtual
virtual
- Where
where
- While
while
- Yield
yield
Traits§
- Token
- Marker trait for types that represent single tokens.