Struct rustc_parse::parser::AttrWrapper
source · pub struct AttrWrapper {
attrs: AttrVec,
start_pos: usize,
}
Expand description
A wrapper type to ensure that the parser handles outer attributes correctly. When we parse outer attributes, we need to ensure that we capture tokens for the attribute target. This allows us to perform cfg-expansion on a token stream before we invoke a derive proc-macro.
This wrapper prevents direct access to the underlying ast::AttrVec>
.
Parsing code can only get access to the underlying attributes
by passing an AttrWrapper
to collect_tokens_trailing_tokens
.
This makes it difficult to accidentally construct an AST node
(which stores an ast::AttrVec
) without first collecting tokens.
This struct has its own module, to ensure that the parser code
cannot directly access the attrs
field
Fields§
§attrs: AttrVec
§start_pos: usize
Implementations§
source§impl AttrWrapper
impl AttrWrapper
pub(super) fn new(attrs: AttrVec, start_pos: usize) -> AttrWrapper
pub fn empty() -> AttrWrapper
pub(crate) fn take_for_recovery(self, psess: &ParseSess) -> AttrVec
sourcepub(crate) fn prepend_to_nt_inner(self, attrs: &mut AttrVec)
pub(crate) fn prepend_to_nt_inner(self, attrs: &mut AttrVec)
Prepend self.attrs
to attrs
.
pub fn is_empty(&self) -> bool
pub fn is_complete(&self) -> bool
Trait Implementations§
source§impl Clone for AttrWrapper
impl Clone for AttrWrapper
source§fn clone(&self) -> AttrWrapper
fn clone(&self) -> AttrWrapper
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl DynSend for AttrWrapper
impl DynSync for AttrWrapper
impl Freeze for AttrWrapper
impl !RefUnwindSafe for AttrWrapper
impl !Send for AttrWrapper
impl !Sync for AttrWrapper
impl Unpin for AttrWrapper
impl !UnwindSafe for AttrWrapper
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
§impl<T> Filterable for T
impl<T> Filterable for T
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>
§impl<T> Pointable for T
impl<T> Pointable for 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,
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: 16 bytes