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: SpanError reporting for bad identifiers, and also the output span
items: Vec<Item>§errors: Vec<Error>§atoms: Vec<AtomForReport>Implementations§
Source§impl Items
impl Items
fn append_atom(&mut self, item: Item)
fn append_item_raw(&mut self, item: Item)
Sourcefn append_plain<V: Display>(&mut self, span: Span, v: V)
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
pub fn append_fixed_string(&mut self, text: &'static str)
Sourcepub fn assemble(
self,
out: &mut impl ExpansionOutput,
change_case: Option<ChangeCase>,
) -> Result<()>
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.
Sourcefn assemble_inner(
tspan: Span,
items: Vec<Item>,
change_case: Option<ChangeCase>,
atoms: Vec<AtomForReport>,
) -> Result<AssemblyInstruction>
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 ExpansionOutput for Items
impl ExpansionOutput for Items
Source§fn append_identfrag_toks<I: IdentFrag>(
&mut self,
ident: &I,
) -> Result<(), I::BadIdent>
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>
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)
fn append_syn_litstr(&mut self, lit: &LitStr)
Append a
syn::LitStr Read moreSource§fn append_syn_type_inner(&mut self, te_span: Span, ty: Type, grouping: Grouping)
fn append_syn_type_inner(&mut self, te_span: Span, ty: Type, grouping: Grouping)
Append a
syn::Type, which has been grouping-normalisedSource§fn append_tokens_with(
&mut self,
(not_in_paste, _not_in_compat): &(Void, ()),
_: impl FnOnce(&mut TokenAccumulator) -> Result<()>,
) -> Result<()>
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) -> !
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)
fn record_error(&mut self, err: Error)
Note that an error occurred Read more
Source§fn new_with_span(kw_span: Span) -> Self
fn new_with_span(kw_span: Span) -> Self
Make a new empty expansion output, introduced at
kw_span Read morefn default_subst_meta_as(_: Span) -> Result<SubstAs<Self>>
Source§fn dbg_expand<'c>(
&mut self,
kw_span: Span,
ctx: GeneralContext<'c>,
msg: &mut String,
content: &Template<Items>,
) -> Result
fn dbg_expand<'c>( &mut self, kw_span: Span, ctx: GeneralContext<'c>, msg: &mut String, content: &Template<Items>, ) -> Result
Implement the
dbg keyword Read moreSource§fn write_error<S: Spanned, M: Display>(&mut self, span: &S, message: M)
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<()>
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 moreSource§impl SubstParseContext for Items
impl SubstParseContext for Items
Source§type NotInPaste = Void
type NotInPaste = Void
Uninhabited iff this lexical context is within
${paste }Source§type NotInConcat = ()
type NotInConcat = ()
Uninhabited iff this lexical context is within
${concat }Source§type ConcatOnly = Void
type ConcatOnly = Void
Uninhabited unless this lexical context is within
${concat }Source§type SpecialParseContext = Option<AngleBrackets>
type SpecialParseContext = Option<AngleBrackets>
For communicating through
parse_special Read morefn not_in_bool(_: &impl Spanned) -> Result<()>
fn not_in_concat(_: &impl Spanned) -> Result<()>
fn not_in_paste(span: &impl Spanned) -> Result<Void>
fn bool_only(span: &impl Spanned) -> Result<Self::BoolOnly>
fn concat_only(span: &impl Spanned) -> Result<Self::ConcatOnly>
Source§fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>
fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>
When we find a
fmeta etc. in this context, does it allow a value? Read moreSource§fn parse_maybe_within_parens<T>(
input: ParseStream<'_>,
f: impl FnOnce(ParseStream<'_>) -> Result<T>,
) -> Result<T>
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 moreSource§fn parse_maybe_comma(input: ParseStream<'_>) -> Result<()>
fn parse_maybe_comma(input: ParseStream<'_>) -> Result<()>
Parse maybe a comma (comma in boolean contegxt, not otherwise) 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> 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
Mutably borrows from an owned value. Read more
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> ⓘ
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 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> ⓘ
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