Items

Struct Items 

Source
pub struct Items {
    span: Span,
    items: Vec<Item>,
    errors: Vec<Error>,
    atoms: Vec<AtomForReport>,
}
Expand description

Accumulator for things to be pasted

Implements ExpansionOutput and SubstParseContext: i.e., it corresponds to the lexical context for a ${paste }, and collects the identifier fragments being pasted.

Fields§

§span: Span

Error reporting for bad identifiers, and also the output span

§items: Vec<Item>§errors: Vec<Error>§atoms: Vec<AtomForReport>

Implementations§

Source§

impl Items

Source

pub fn new(span: Span) -> Self

Source§

impl Items

Source

fn append_atom(&mut self, item: Item)

Source

fn append_item_raw(&mut self, item: Item)

Source

fn append_plain<V: Display>(&mut self, span: Span, v: V)

Append a plain entry from something Display

Like ExpansionOutput::append_display but doesn’t need Spanned

Source

pub fn append_fixed_string(&mut self, text: &'static str)

Source

pub fn assemble( self, out: &mut impl ExpansionOutput, change_case: Option<ChangeCase>, ) -> Result<()>

Combine the accumulated pieces and append them to out

Calls append_idpath if the content contained a nontrivial expansion or append_identfrag_toks otherwise.

Source

fn assemble_inner( tspan: Span, items: Vec<Item>, change_case: Option<ChangeCase>, atoms: Vec<AtomForReport>, ) -> Result<AssemblyInstruction>

Combine the accumulated pieces and say what to do

Inner, non-monomorphised, function for Items::assemble.

Returns Right with values to pass to append_idpath or Left with the value to pass to append_identfrag_toks.

Trait Implementations§

Source§

impl Debug for Items

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Expand<Items> for TemplateElement<Items>

Source§

fn expand<'c>(&self, ctx: GeneralContext<'c>, out: &mut Items) -> Result<()>

Source§

impl ExpansionOutput for Items

Source§

fn append_identfrag_toks<I: IdentFrag>( &mut self, ident: &I, ) -> Result<(), I::BadIdent>

An identifier (or fragment of one) Read more
Source§

fn append_idpath<A, B, I>( &mut self, te_span: Span, pre_: A, ident: &I, post_: B, grouping: Grouping, ) -> Result<(), I::BadIdent>

Append a Rust path (scoped identifier, perhaps with generics) Read more
Source§

fn append_syn_litstr(&mut self, lit: &LitStr)

Source§

fn append_syn_type_inner(&mut self, te_span: Span, ty: Type, grouping: Grouping)

Append a syn::Type, which has been grouping-normalised
Source§

fn append_tokens_with( &mut self, (not_in_paste, _not_in_compat): &(Void, ()), _: impl FnOnce(&mut TokenAccumulator) -> Result<()>, ) -> Result<()>

Append using a function which generates tokens Read more
Source§

fn append_bool_only(&mut self, bool_only: &Self::BoolOnly) -> !

“Append” a substitution which can only be used within a boolean Read more
Source§

fn record_error(&mut self, err: Error)

Note that an error occurred Read more
Source§

fn new_with_span(kw_span: Span) -> Self

Make a new empty expansion output, introduced at kw_span Read more
Source§

fn default_subst_meta_as(_: Span) -> Result<SubstAs<Self>>

Source§

fn ignore_impl(self) -> Result<()>

Implement the core of the ignore keyword Read more
Source§

fn dbg_expand<'c>( &mut self, kw_span: Span, ctx: GeneralContext<'c>, msg: &mut String, content: &Template<Items>, ) -> Result

Implement the dbg keyword Read more
Source§

fn append_syn_type(&mut self, te_span: Span, v: Type, grouping: Grouping)

Source§

fn write_error<S: Spanned, M: Display>(&mut self, span: &S, message: M)

Convenience method for noting an error with span and message
Source§

fn append_tokens( &mut self, allow_tokens: &(<Self as SubstParseContext>::NotInPaste, <Self as SubstParseContext>::NotInConcat), tokens: impl ToTokens, ) -> Result<()>

Convenience method for writing a ToTokens Read more
Source§

impl SubstParseContext for Items

Source§

type NotInPaste = Void

Uninhabited iff this lexical context is within ${paste }
Source§

type NotInConcat = ()

Uninhabited iff this lexical context is within ${concat }
Source§

type NotInBool = ()

Uninhabited iff this lexical context is within a condition.
Source§

type BoolOnly = Void

Uninhabited unless this lexical context is within a condition.
Source§

type ConcatOnly = Void

Uninhabited unless this lexical context is within ${concat }
Source§

type DbgContent = Template<Items>

Content of the dbg keyword Read more
Source§

type SpecialParseContext = Option<AngleBrackets>

For communicating through parse_special Read more
Source§

fn not_in_bool(_: &impl Spanned) -> Result<()>

Source§

fn not_in_concat(_: &impl Spanned) -> Result<()>

Source§

fn not_in_paste(span: &impl Spanned) -> Result<Void>

Source§

const IS_BOOL: bool = false

Whether this is a boolean context
Source§

fn bool_only(span: &impl Spanned) -> Result<Self::BoolOnly>

Source§

fn concat_only(span: &impl Spanned) -> Result<Self::ConcatOnly>

Source§

fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>

When we find a fmeta etc. in this context, does it allow a value? Read more
Source§

fn parse_maybe_within_parens<T>( input: ParseStream<'_>, f: impl FnOnce(ParseStream<'_>) -> Result<T>, ) -> Result<T>

Parse using f, within parens in boolean context, not otherwise Read more
Source§

fn parse_maybe_comma(input: ParseStream<'_>) -> Result<()>

Parse maybe a comma (comma in boolean contegxt, not otherwise) Read more
Source§

fn missing_keyword_arguments(kw_span: Span) -> Result<Void>

Return an error suitable for reporting missing arguments Read more

Auto Trait Implementations§

§

impl Freeze for Items

§

impl RefUnwindSafe for Items

§

impl !Send for Items

§

impl !Sync for Items

§

impl Unpin for Items

§

impl UnwindSafe for Items

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.