Struct rustc_span::symbol::IdentPrinter
source · Expand description
The most general type to print identifiers.
AST pretty-printer is used as a fallback for turning AST structures into token streams for
proc macros. Additionally, proc macros may stringify their input and expect it survive the
stringification (especially true for proc macro derives written between Rust 1.15 and 1.30).
So we need to somehow pretty-print $crate
in a way preserving at least some of its
hygiene data, most importantly name of the crate it refers to.
As a result we print $crate
as crate
if it refers to the local crate
and as ::other_crate_name
if it refers to some other crate.
Note, that this is only done if the ident token is printed from inside of AST pretty-printing,
but not otherwise. Pretty-printing is the only way for proc macros to discover token contents,
so we should not perform this lossy conversion if the top level call to the pretty-printer was
done for a token stream or a single token.
Fields§
§symbol: Symbol
§is_raw: bool
§convert_dollar_crate: Option<Span>
Span used for retrieving the crate name to which $crate
refers to,
if this field is None
then the $crate
conversion doesn’t happen.
Implementations§
source§impl IdentPrinter
impl IdentPrinter
sourcepub fn new(
symbol: Symbol,
is_raw: bool,
convert_dollar_crate: Option<Span>
) -> IdentPrinter
pub fn new(
symbol: Symbol,
is_raw: bool,
convert_dollar_crate: Option<Span>
) -> IdentPrinter
The most general IdentPrinter
constructor. Do not use this.
sourcepub fn for_ast_ident(ident: Ident, is_raw: bool) -> IdentPrinter
pub fn for_ast_ident(ident: Ident, is_raw: bool) -> IdentPrinter
This implementation is supposed to be used when printing identifiers as a part of pretty-printing for larger AST pieces. Do not use this either.
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for IdentPrinter
impl !Send for IdentPrinter
impl !Sync for IdentPrinter
impl Unpin for IdentPrinter
impl UnwindSafe for IdentPrinter
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 20 bytes