Struct rustc_expand::config::StripUnconfigured
source · pub struct StripUnconfigured<'a> {
pub sess: &'a Session,
pub features: Option<&'a Features>,
pub config_tokens: bool,
pub lint_node_id: NodeId,
}
Expand description
A folder that strips out items that do not belong in the current configuration.
Fields§
§sess: &'a Session
§features: Option<&'a Features>
§config_tokens: bool
If true
, perform cfg-stripping on attached tokens.
This is only used for the input to derive macros,
which needs eager expansion of cfg
and cfg_attr
lint_node_id: NodeId
Implementations§
source§impl<'a> StripUnconfigured<'a>
impl<'a> StripUnconfigured<'a>
pub fn configure<T: HasAttrs + HasTokens>(&self, node: T) -> Option<T>
fn try_configure_tokens<T: HasTokens>(&self, node: &mut T)
sourcefn configure_tokens(&self, stream: &AttrTokenStream) -> AttrTokenStream
fn configure_tokens(&self, stream: &AttrTokenStream) -> AttrTokenStream
Performs cfg-expansion on stream
, producing a new AttrTokenStream
.
This is only used during the invocation of derive
proc-macros,
which require that we cfg-expand their entire input.
Normal cfg-expansion operates on parsed AST nodes via the configure
method
sourcefn process_cfg_attrs<T: HasAttrs>(&self, node: &mut T)
fn process_cfg_attrs<T: HasAttrs>(&self, node: &mut T)
Parse and expand all cfg_attr
attributes into a list of attributes
that are within each cfg_attr
that has a true configuration predicate.
Gives compiler warnings if any cfg_attr
does not contain any
attributes and is in the original source code. Gives compiler errors if
the syntax of any cfg_attr
is incorrect.
fn process_cfg_attr(&self, attr: &Attribute) -> Vec<Attribute>
sourcepub(crate) fn expand_cfg_attr(
&self,
cfg_attr: &Attribute,
recursive: bool,
) -> Vec<Attribute>
pub(crate) fn expand_cfg_attr( &self, cfg_attr: &Attribute, recursive: bool, ) -> Vec<Attribute>
Parse and expand a single cfg_attr
attribute into a list of attributes
when the configuration predicate is true, or otherwise expand into an
empty list of attributes.
Gives a compiler warning when the cfg_attr
contains no attributes and
is in the original source file. Gives a compiler error if the syntax of
the attribute is incorrect.
fn expand_cfg_attr_item( &self, cfg_attr: &Attribute, (item, item_span): (AttrItem, Span), ) -> Attribute
sourcefn in_cfg(&self, attrs: &[Attribute]) -> bool
fn in_cfg(&self, attrs: &[Attribute]) -> bool
Determines if a node with the given attributes should be included in this configuration.
pub(crate) fn cfg_true(&self, attr: &Attribute) -> (bool, Option<MetaItem>)
sourcepub(crate) fn maybe_emit_expr_attr_err(&self, attr: &Attribute)
pub(crate) fn maybe_emit_expr_attr_err(&self, attr: &Attribute)
If attributes are not allowed on expressions, emit an error for attr
pub fn configure_expr(&self, expr: &mut P<Expr>, method_receiver: bool)
Auto Trait Implementations§
impl<'a> Freeze for StripUnconfigured<'a>
impl<'a> !RefUnwindSafe for StripUnconfigured<'a>
impl<'a> !Send for StripUnconfigured<'a>
impl<'a> !Sync for StripUnconfigured<'a>
impl<'a> Unpin for StripUnconfigured<'a>
impl<'a> !UnwindSafe for StripUnconfigured<'a>
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
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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: 24 bytes