mirror of
https://github.com/rtic-rs/rtic.git
synced 2024-12-02 00:14:33 +01:00
267 lines
120 KiB
HTML
267 lines
120 KiB
HTML
|
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A Rust expression."><title>Expr in syn - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,FiraSans-Regular-018c141bf0843ffd.woff2,FiraSans-Medium-8f9a781e4970d388.woff2,SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2,SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../static.files/rustdoc-492a78a4a87dcc01.css"><meta name="rustdoc-vars" data-root-path="../" data-static-root-path="../static.files/" data-current-crate="syn" data-themes="" data-resource-suffix="" data-rustdoc-version="1.82.0 (f6e511eec 2024-10-15)" data-channel="1.82.0" data-search-js="search-a99f1315e7cc5121.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../static.files/storage-118b08c4c78b968e.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-921df33f47b8780c.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-3b12f09e550e0385.css"></noscript><link rel="alternate icon" type="image/png" href="../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc enum"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button></nav><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../syn/index.html">syn</a><span class="version">2.0.89</span></h2></div><h2 class="location"><a href="#">Expr</a></h2><div class="sidebar-elems"><section><h3><a href="#variants">Variants</a></h3><ul class="block variant"><li><a href="#variant.Array">Array</a></li><li><a href="#variant.Assign">Assign</a></li><li><a href="#variant.Async">Async</a></li><li><a href="#variant.Await">Await</a></li><li><a href="#variant.Binary">Binary</a></li><li><a href="#variant.Block">Block</a></li><li><a href="#variant.Break">Break</a></li><li><a href="#variant.Call">Call</a></li><li><a href="#variant.Cast">Cast</a></li><li><a href="#variant.Closure">Closure</a></li><li><a href="#variant.Const">Const</a></li><li><a href="#variant.Continue">Continue</a></li><li><a href="#variant.Field">Field</a></li><li><a href="#variant.ForLoop">ForLoop</a></li><li><a href="#variant.Group">Group</a></li><li><a href="#variant.If">If</a></li><li><a href="#variant.Index">Index</a></li><li><a href="#variant.Infer">Infer</a></li><li><a href="#variant.Let">Let</a></li><li><a href="#variant.Lit">Lit</a></li><li><a href="#variant.Loop">Loop</a></li><li><a href="#variant.Macro">Macro</a></li><li><a href="#variant.Match">Match</a></li><li><a href="#variant.MethodCall">MethodCall</a></li><li><a href="#variant.Paren">Paren</a></li><li><a href="#variant.Path">Path</a></li><li><a href="#variant.Range">Range</a></li><li><a href="#variant.RawAddr">RawAddr</a></li><li><a href="#variant.Reference">Reference</a></li><li><a href="#variant.Repeat">Repeat</a></li><li><a href="#variant.Return">Return</a></li><li><a href="#variant.Struct">Struct</a></li><li><a href="#variant.Try">Try</a></li><li><a href="#variant.TryBlock">TryBlock</a></li><li><a href="#variant.Tuple">Tuple</a></li><li><a href="#variant.Unary">Unary</a></li><li><a href="#variant.Unsafe">Unsafe</a></li><li><a href="#variant.Verbatim">Verbatim</a></li><li><a href="#variant.While">While</a></li><li><a href="#variant.Yield">Yield</a></li></ul><h3><a href="#implementations">Associated Constants</a></h3><ul class="block associatedconstant"><li><a href="#associatedconstant.PLACEHOLDER
|
|||
|
<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 40 variants</span></summary> Array(<a class="struct" href="struct.ExprArray.html" title="struct syn::ExprArray">ExprArray</a>),
|
|||
|
Assign(<a class="struct" href="struct.ExprAssign.html" title="struct syn::ExprAssign">ExprAssign</a>),
|
|||
|
Async(<a class="struct" href="struct.ExprAsync.html" title="struct syn::ExprAsync">ExprAsync</a>),
|
|||
|
Await(<a class="struct" href="struct.ExprAwait.html" title="struct syn::ExprAwait">ExprAwait</a>),
|
|||
|
Binary(<a class="struct" href="struct.ExprBinary.html" title="struct syn::ExprBinary">ExprBinary</a>),
|
|||
|
Block(<a class="struct" href="struct.ExprBlock.html" title="struct syn::ExprBlock">ExprBlock</a>),
|
|||
|
Break(<a class="struct" href="struct.ExprBreak.html" title="struct syn::ExprBreak">ExprBreak</a>),
|
|||
|
Call(<a class="struct" href="struct.ExprCall.html" title="struct syn::ExprCall">ExprCall</a>),
|
|||
|
Cast(<a class="struct" href="struct.ExprCast.html" title="struct syn::ExprCast">ExprCast</a>),
|
|||
|
Closure(<a class="struct" href="struct.ExprClosure.html" title="struct syn::ExprClosure">ExprClosure</a>),
|
|||
|
Const(<a class="struct" href="struct.ExprConst.html" title="struct syn::ExprConst">ExprConst</a>),
|
|||
|
Continue(<a class="struct" href="struct.ExprContinue.html" title="struct syn::ExprContinue">ExprContinue</a>),
|
|||
|
Field(<a class="struct" href="struct.ExprField.html" title="struct syn::ExprField">ExprField</a>),
|
|||
|
ForLoop(<a class="struct" href="struct.ExprForLoop.html" title="struct syn::ExprForLoop">ExprForLoop</a>),
|
|||
|
Group(<a class="struct" href="struct.ExprGroup.html" title="struct syn::ExprGroup">ExprGroup</a>),
|
|||
|
If(<a class="struct" href="struct.ExprIf.html" title="struct syn::ExprIf">ExprIf</a>),
|
|||
|
Index(<a class="struct" href="struct.ExprIndex.html" title="struct syn::ExprIndex">ExprIndex</a>),
|
|||
|
Infer(<a class="struct" href="struct.ExprInfer.html" title="struct syn::ExprInfer">ExprInfer</a>),
|
|||
|
Let(<a class="struct" href="struct.ExprLet.html" title="struct syn::ExprLet">ExprLet</a>),
|
|||
|
Lit(<a class="struct" href="struct.ExprLit.html" title="struct syn::ExprLit">ExprLit</a>),
|
|||
|
Loop(<a class="struct" href="struct.ExprLoop.html" title="struct syn::ExprLoop">ExprLoop</a>),
|
|||
|
Macro(<a class="struct" href="struct.ExprMacro.html" title="struct syn::ExprMacro">ExprMacro</a>),
|
|||
|
Match(<a class="struct" href="struct.ExprMatch.html" title="struct syn::ExprMatch">ExprMatch</a>),
|
|||
|
MethodCall(<a class="struct" href="struct.ExprMethodCall.html" title="struct syn::ExprMethodCall">ExprMethodCall</a>),
|
|||
|
Paren(<a class="struct" href="struct.ExprParen.html" title="struct syn::ExprParen">ExprParen</a>),
|
|||
|
Path(<a class="struct" href="struct.ExprPath.html" title="struct syn::ExprPath">ExprPath</a>),
|
|||
|
Range(<a class="struct" href="struct.ExprRange.html" title="struct syn::ExprRange">ExprRange</a>),
|
|||
|
RawAddr(<a class="struct" href="struct.ExprRawAddr.html" title="struct syn::ExprRawAddr">ExprRawAddr</a>),
|
|||
|
Reference(<a class="struct" href="struct.ExprReference.html" title="struct syn::ExprReference">ExprReference</a>),
|
|||
|
Repeat(<a class="struct" href="struct.ExprRepeat.html" title="struct syn::ExprRepeat">ExprRepeat</a>),
|
|||
|
Return(<a class="struct" href="struct.ExprReturn.html" title="struct syn::ExprReturn">ExprReturn</a>),
|
|||
|
Struct(<a class="struct" href="struct.ExprStruct.html" title="struct syn::ExprStruct">ExprStruct</a>),
|
|||
|
Try(<a class="struct" href="struct.ExprTry.html" title="struct syn::ExprTry">ExprTry</a>),
|
|||
|
TryBlock(<a class="struct" href="struct.ExprTryBlock.html" title="struct syn::ExprTryBlock">ExprTryBlock</a>),
|
|||
|
Tuple(<a class="struct" href="struct.ExprTuple.html" title="struct syn::ExprTuple">ExprTuple</a>),
|
|||
|
Unary(<a class="struct" href="struct.ExprUnary.html" title="struct syn::ExprUnary">ExprUnary</a>),
|
|||
|
Unsafe(<a class="struct" href="struct.ExprUnsafe.html" title="struct syn::ExprUnsafe">ExprUnsafe</a>),
|
|||
|
Verbatim(<a class="struct" href="../proc_macro2/struct.TokenStream.html" title="struct proc_macro2::TokenStream">TokenStream</a>),
|
|||
|
While(<a class="struct" href="struct.ExprWhile.html" title="struct syn::ExprWhile">ExprWhile</a>),
|
|||
|
Yield(<a class="struct" href="struct.ExprYield.html" title="struct syn::ExprYield">ExprYield</a>),
|
|||
|
</details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A Rust expression.</p>
|
|||
|
<p><em>This type is available only if Syn is built with the <code>"derive"</code> or <code>"full"</code>
|
|||
|
feature, but most of the variants are not available unless “full” is enabled.</em></p>
|
|||
|
<h2 id="syntax-tree-enums"><a class="doc-anchor" href="#syntax-tree-enums">§</a>Syntax tree enums</h2>
|
|||
|
<p>This type is a syntax tree enum. In Syn this and other syntax tree enums
|
|||
|
are designed to be traversed using the following rebinding idiom.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>expr: Expr = <span class="comment">/* ... */</span>;
|
|||
|
<span class="kw">match </span>expr {
|
|||
|
Expr::MethodCall(expr) => {
|
|||
|
<span class="comment">/* ... */
|
|||
|
</span>}
|
|||
|
Expr::Cast(expr) => {
|
|||
|
<span class="comment">/* ... */
|
|||
|
</span>}
|
|||
|
Expr::If(expr) => {
|
|||
|
<span class="comment">/* ... */
|
|||
|
</span>}
|
|||
|
|
|||
|
<span class="comment">/* ... */</span></code></pre></div>
|
|||
|
<p>We begin with a variable <code>expr</code> of type <code>Expr</code> that has no fields
|
|||
|
(because it is an enum), and by matching on it and rebinding a variable
|
|||
|
with the same name <code>expr</code> we effectively imbue our variable with all of
|
|||
|
the data fields provided by the variant that it turned out to be. So for
|
|||
|
example above if we ended up in the <code>MethodCall</code> case then we get to use
|
|||
|
<code>expr.receiver</code>, <code>expr.args</code> etc; if we ended up in the <code>If</code> case we get
|
|||
|
to use <code>expr.cond</code>, <code>expr.then_branch</code>, <code>expr.else_branch</code>.</p>
|
|||
|
<p>This approach avoids repeating the variant names twice on every line.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="comment">// Repetitive; recommend not doing this.
|
|||
|
</span><span class="kw">match </span>expr {
|
|||
|
Expr::MethodCall(ExprMethodCall { method, args, .. }) => {</code></pre></div>
|
|||
|
<p>In general, the name to which a syntax tree enum variant is bound should
|
|||
|
be a suitable name for the complete syntax tree enum type.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="comment">// Binding is called `base` which is the name I would use if I were
|
|||
|
// assigning `*discriminant.base` without an `if let`.
|
|||
|
</span><span class="kw">if let </span>Expr::Tuple(base) = <span class="kw-2">*</span>discriminant.base {</code></pre></div>
|
|||
|
<p>A sign that you may not be choosing the right variable names is if you
|
|||
|
see names getting repeated in your code, like accessing
|
|||
|
<code>receiver.receiver</code> or <code>pat.pat</code> or <code>cond.cond</code>.</p>
|
|||
|
</div></details><h2 id="variants" class="variants section-header">Variants (Non-exhaustive)<a href="#variants" class="anchor">§</a></h2><details class="toggle non-exhaustive"><summary class="hideme"><span>This enum is marked as non-exhaustive</span></summary><div class="docblock">Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.</div></details><div class="variants"><section id="variant.Array" class="variant"><a href="#variant.Array" class="anchor">§</a><h3 class="code-header">Array(<a class="struct" href="struct.ExprArray.html" title="struct syn::ExprArray">ExprArray</a>)</h3></section><div class="docblock"><p>A slice literal expression: <code>[a, b, c, d]</code>.</p>
|
|||
|
</div><section id="variant.Assign" class="variant"><a href="#variant.Assign" class="anchor">§</a><h3 class="code-header">Assign(<a class="struct" href="struct.ExprAssign.html" title="struct syn::ExprAssign">ExprAssign</a>)</h3></section><div class="docblock"><p>An assignment expression: <code>a = compute()</code>.</p>
|
|||
|
</div><section id="variant.Async" class="variant"><a href="#variant.Async" class="anchor">§</a><h3 class="code-header">Async(<a class="struct" href="struct.ExprAsync.html" title="struct syn::ExprAsync">ExprAsync</a>)</h3></section><div class="docblock"><p>An async block: <code>async { ... }</code>.</p>
|
|||
|
</div><section id="variant.Await" class="variant"><a href="#variant.Await" class="anchor">§</a><h3 class="code-header">Await(<a class="struct" href="struct.ExprAwait.html" title="struct syn::ExprAwait">ExprAwait</a>)</h3></section><div class="docblock"><p>An await expression: <code>fut.await</code>.</p>
|
|||
|
</div><section id="variant.Binary" class="variant"><a href="#variant.Binary" class="anchor">§</a><h3 class="code-header">Binary(<a class="struct" href="struct.ExprBinary.html" title="struct syn::ExprBinary">ExprBinary</a>)</h3></section><div class="docblock"><p>A binary operation: <code>a + b</code>, <code>a += b</code>.</p>
|
|||
|
</div><section id="variant.Block" class="variant"><a href="#variant.Block" class="anchor">§</a><h3 class="code-header">Block(<a class="struct" href="struct.ExprBlock.html" title="struct syn::ExprBlock">ExprBlock</a>)</h3></section><div class="docblock"><p>A blocked scope: <code>{ ... }</code>.</p>
|
|||
|
</div><section id="variant.Break" class="variant"><a href="#variant.Break" class="anchor">§</a><h3 class="code-header">Break(<a class="struct" href="struct.ExprBreak.html" title="struct syn::ExprBreak">ExprBreak</a>)</h3></section><div class="docblock"><p>A <code>break</code>, with an optional label to break and an optional
|
|||
|
expression.</p>
|
|||
|
</div><section id="variant.Call" class="variant"><a href="#variant.Call" class="anchor">§</a><h3 class="code-header">Call(<a class="struct" href="struct.ExprCall.html" title="struct syn::ExprCall">ExprCall</a>)</h3></section><div class="docblock"><p>A function call expression: <code>invoke(a, b)</code>.</p>
|
|||
|
</div><section id="variant.Cast" class="variant"><a href="#variant.Cast" class="anchor">§</a><h3 class="code-header">Cast(<a class="struct" href="struct.ExprCast.html" title="struct syn::ExprCast">ExprCast</a>)</h3></section><div class="docblock"><p>A cast expression: <code>foo as f64</code>.</p>
|
|||
|
</div><section id="variant.Closure" class="variant"><a href="#variant.Closure" class="anchor">§</a><h3 class="code-header">Closure(<a class="struct" href="struct.ExprClosure.html" title="struct syn::ExprClosure">ExprClosure</a>)</h3></section><div class="docblock"><p>A closure expression: <code>|a, b| a + b</code>.</p>
|
|||
|
</div><section id="variant.Const" class="variant"><a href="#variant.Const" class="anchor">§</a><h3 class="code-header">Const(<a class="struct" href="struct.ExprConst.html" title="struct syn::ExprConst">ExprConst</a>)</h3></section><div class="docblock"><p>A const block: <code>const { ... }</code>.</p>
|
|||
|
</div><section id="variant.Continue" class="variant"><a href="#variant.Continue" class="anchor">§</a><h3 class="code-header">Continue(<a class="struct" href="struct.ExprContinue.html" title="struct syn::ExprContinue">ExprContinue</a>)</h3></section><div class="docblock"><p>A <code>continue</code>, with an optional label.</p>
|
|||
|
</div><section id="variant.Field" class="variant"><a href="#variant.Field" class="anchor">§</a><h3 class="code-header">Field(<a class="struct" href="struct.ExprField.html" title="struct syn::ExprField">ExprField</a>)</h3></section><div class="docblock"><p>Access of a named struct field (<code>obj.k</code>) or unnamed tuple struct
|
|||
|
field (<code>obj.0</code>).</p>
|
|||
|
</div><section id="variant.ForLoop" class="variant"><a href="#variant.ForLoop" class="anchor">§</a><h3 class="code-header">ForLoop(<a class="struct" href="struct.ExprForLoop.html" title="struct syn::ExprForLoop">ExprForLoop</a>)</h3></section><div class="docblock"><p>A for loop: <code>for pat in expr { ... }</code>.</p>
|
|||
|
</div><section id="variant.Group" class="variant"><a href="#variant.Group" class="anchor">§</a><h3 class="code-header">Group(<a class="struct" href="struct.ExprGroup.html" title="struct syn::ExprGroup">ExprGroup</a>)</h3></section><div class="docblock"><p>An expression contained within invisible delimiters.</p>
|
|||
|
<p>This variant is important for faithfully representing the precedence
|
|||
|
of expressions and is related to <code>None</code>-delimited spans in a
|
|||
|
<code>TokenStream</code>.</p>
|
|||
|
</div><section id="variant.If" class="variant"><a href="#variant.If" class="anchor">§</a><h3 class="code-header">If(<a class="struct" href="struct.ExprIf.html" title="struct syn::ExprIf">ExprIf</a>)</h3></section><div class="docblock"><p>An <code>if</code> expression with an optional <code>else</code> block: <code>if expr { ... } else { ... }</code>.</p>
|
|||
|
<p>The <code>else</code> branch expression may only be an <code>If</code> or <code>Block</code>
|
|||
|
expression, not any of the other types of expression.</p>
|
|||
|
</div><section id="variant.Index" class="variant"><a href="#variant.Index" class="anchor">§</a><h3 class="code-header">Index(<a class="struct" href="struct.ExprIndex.html" title="struct syn::ExprIndex">ExprIndex</a>)</h3></section><div class="docblock"><p>A square bracketed indexing expression: <code>vector[2]</code>.</p>
|
|||
|
</div><section id="variant.Infer" class="variant"><a href="#variant.Infer" class="anchor">§</a><h3 class="code-header">Infer(<a class="struct" href="struct.ExprInfer.html" title="struct syn::ExprInfer">ExprInfer</a>)</h3></section><div class="docblock"><p>The inferred value of a const generic argument, denoted <code>_</code>.</p>
|
|||
|
</div><section id="variant.Let" class="variant"><a href="#variant.Let" class="anchor">§</a><h3 class="code-header">Let(<a class="struct" href="struct.ExprLet.html" title="struct syn::ExprLet">ExprLet</a>)</h3></section><div class="docblock"><p>A <code>let</code> guard: <code>let Some(x) = opt</code>.</p>
|
|||
|
</div><section id="variant.Lit" class="variant"><a href="#variant.Lit" class="anchor">§</a><h3 class="code-header">Lit(<a class="struct" href="struct.ExprLit.html" title="struct syn::ExprLit">ExprLit</a>)</h3></section><div class="docblock"><p>A literal in place of an expression: <code>1</code>, <code>"foo"</code>.</p>
|
|||
|
</div><section id="variant.Loop" class="variant"><a href="#variant.Loop" class="anchor">§</a><h3 class="code-header">Loop(<a class="struct" href="struct.ExprLoop.html" title="struct syn::ExprLoop">ExprLoop</a>)</h3></section><div class="docblock"><p>Conditionless loop: <code>loop { ... }</code>.</p>
|
|||
|
</div><section id="variant.Macro" class="variant"><a href="#variant.Macro" class="anchor">§</a><h3 class="code-header">Macro(<a class="struct" href="struct.ExprMacro.html" title="struct syn::ExprMacro">ExprMacro</a>)</h3></section><div class="docblock"><p>A macro invocation expression: <code>format!("{}", q)</code>.</p>
|
|||
|
</div><section id="variant.Match" class="variant"><a href="#variant.Match" class="anchor">§</a><h3 class="code-header">Match(<a class="struct" href="struct.ExprMatch.html" title="struct syn::ExprMatch">ExprMatch</a>)</h3></section><div class="docblock"><p>A <code>match</code> expression: <code>match n { Some(n) => {}, None => {} }</code>.</p>
|
|||
|
</div><section id="variant.MethodCall" class="variant"><a href="#variant.MethodCall" class="anchor">§</a><h3 class="code-header">MethodCall(<a class="struct" href="struct.ExprMethodCall.html" title="struct syn::ExprMethodCall">ExprMethodCall</a>)</h3></section><div class="docblock"><p>A method call expression: <code>x.foo::<T>(a, b)</code>.</p>
|
|||
|
</div><section id="variant.Paren" class="variant"><a href="#variant.Paren" class="anchor">§</a><h3 class="code-header">Paren(<a class="struct" href="struct.ExprParen.html" title="struct syn::ExprParen">ExprParen</a>)</h3></section><div class="docblock"><p>A parenthesized expression: <code>(a + b)</code>.</p>
|
|||
|
</div><section id="variant.Path" class="variant"><a href="#variant.Path" class="anchor">§</a><h3 class="code-header">Path(<a class="struct" href="struct.ExprPath.html" title="struct syn::ExprPath">ExprPath</a>)</h3></section><div class="docblock"><p>A path like <code>std::mem::replace</code> possibly containing generic
|
|||
|
parameters and a qualified self-type.</p>
|
|||
|
<p>A plain identifier like <code>x</code> is a path of length 1.</p>
|
|||
|
</div><section id="variant.Range" class="variant"><a href="#variant.Range" class="anchor">§</a><h3 class="code-header">Range(<a class="struct" href="struct.ExprRange.html" title="struct syn::ExprRange">ExprRange</a>)</h3></section><div class="docblock"><p>A range expression: <code>1..2</code>, <code>1..</code>, <code>..2</code>, <code>1..=2</code>, <code>..=2</code>.</p>
|
|||
|
</div><section id="variant.RawAddr" class="variant"><a href="#variant.RawAddr" class="anchor">§</a><h3 class="code-header">RawAddr(<a class="struct" href="struct.ExprRawAddr.html" title="struct syn::ExprRawAddr">ExprRawAddr</a>)</h3></section><div class="docblock"><p>Address-of operation: <code>&raw const place</code> or <code>&raw mut place</code>.</p>
|
|||
|
</div><section id="variant.Reference" class="variant"><a href="#variant.Reference" class="anchor">§</a><h3 class="code-header">Reference(<a class="struct" href="struct.ExprReference.html" title="struct syn::ExprReference">ExprReference</a>)</h3></section><div class="docblock"><p>A referencing operation: <code>&a</code> or <code>&mut a</code>.</p>
|
|||
|
</div><section id="variant.Repeat" class="variant"><a href="#variant.Repeat" class="anchor">§</a><h3 class="code-header">Repeat(<a class="struct" href="struct.ExprRepeat.html" title="struct syn::ExprRepeat">ExprRepeat</a>)</h3></section><div class="docblock"><p>An array literal constructed from one repeated element: <code>[0u8; N]</code>.</p>
|
|||
|
</div><section id="variant.Return" class="variant"><a href="#variant.Return" class="anchor">§</a><h3 class="code-header">Return(<a class="struct" href="struct.ExprReturn.html" title="struct syn::ExprReturn">ExprReturn</a>)</h3></section><div class="docblock"><p>A <code>return</code>, with an optional value to be returned.</p>
|
|||
|
</div><section id="variant.Struct" class="variant"><a href="#variant.Struct" class="anchor">§</a><h3 class="code-header">Struct(<a class="struct" href="struct.ExprStruct.html" title="struct syn::ExprStruct">ExprStruct</a>)</h3></section><div class="docblock"><p>A struct literal expression: <code>Point { x: 1, y: 1 }</code>.</p>
|
|||
|
<p>The <code>rest</code> provides the value of the remaining fields as in <code>S { a: 1, b: 1, ..rest }</code>.</p>
|
|||
|
</div><section id="variant.Try" class="variant"><a href="#variant.Try" class="anchor">§</a><h3 class="code-header">Try(<a class="struct" href="struct.ExprTry.html" title="struct syn::ExprTry">ExprTry</a>)</h3></section><div class="docblock"><p>A try-expression: <code>expr?</code>.</p>
|
|||
|
</div><section id="variant.TryBlock" class="variant"><a href="#variant.TryBlock" class="anchor">§</a><h3 class="code-header">TryBlock(<a class="struct" href="struct.ExprTryBlock.html" title="struct syn::ExprTryBlock">ExprTryBlock</a>)</h3></section><div class="docblock"><p>A try block: <code>try { ... }</code>.</p>
|
|||
|
</div><section id="variant.Tuple" class="variant"><a href="#variant.Tuple" class="anchor">§</a><h3 class="code-header">Tuple(<a class="struct" href="struct.ExprTuple.html" title="struct syn::ExprTuple">ExprTuple</a>)</h3></section><div class="docblock"><p>A tuple expression: <code>(a, b, c, d)</code>.</p>
|
|||
|
</div><section id="variant.Unary" class="variant"><a href="#variant.Unary" class="anchor">§</a><h3 class="code-header">Unary(<a class="struct" href="struct.ExprUnary.html" title="struct syn::ExprUnary">ExprUnary</a>)</h3></section><div class="docblock"><p>A unary operation: <code>!x</code>, <code>*x</code>.</p>
|
|||
|
</div><section id="variant.Unsafe" class="variant"><a href="#variant.Unsafe" class="anchor">§</a><h3 class="code-header">Unsafe(<a class="struct" href="struct.ExprUnsafe.html" title="struct syn::ExprUnsafe">ExprUnsafe</a>)</h3></section><div class="docblock"><p>An unsafe block: <code>unsafe { ... }</code>.</p>
|
|||
|
</div><section id="variant.Verbatim" class="variant"><a href="#variant.Verbatim" class="anchor">§</a><h3 class="code-header">Verbatim(<a class="struct" href="../proc_macro2/struct.TokenStream.html" title="struct proc_macro2::TokenStream">TokenStream</a>)</h3></section><div class="docblock"><p>Tokens in expression position not interpreted by Syn.</p>
|
|||
|
</div><section id="variant.While" class="variant"><a href="#variant.While" class="anchor">§</a><h3 class="code-header">While(<a class="struct" href="struct.ExprWhile.html" title="struct syn::ExprWhile">ExprWhile</a>)</h3></section><div class="docblock"><p>A while loop: <code>while expr { ... }</code>.</p>
|
|||
|
</div><section id="variant.Yield" class="variant"><a href="#variant.Yield" class="anchor">§</a><h3 class="code-header">Yield(<a class="struct" href="struct.ExprYield.html" title="struct syn::ExprYield">ExprYield</a>)</h3></section><div class="docblock"><p>A yield expression: <code>yield expr</code>.</p>
|
|||
|
</div></div><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Expr" class="impl"><a class="src rightside" href="../src/syn/expr.rs.html#716-969">source</a><a href="#impl-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.PLACEHOLDER" class="associatedconstant"><a class="src rightside" href="../src/syn/expr.rs.html#736-743">source</a><h4 class="code-header">pub const <a href="#associatedconstant.PLACEHOLDER" class="constant">PLACEHOLDER</a>: Self = _</h4></section></summary><div class="docblock"><p>An unspecified invalid expression.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>quote::ToTokens;
|
|||
|
<span class="kw">use </span>std::mem;
|
|||
|
<span class="kw">use </span>syn::{parse_quote, Expr};
|
|||
|
|
|||
|
<span class="kw">fn </span>unparenthesize(e: <span class="kw-2">&mut </span>Expr) {
|
|||
|
<span class="kw">while let </span>Expr::Paren(paren) = e {
|
|||
|
<span class="kw-2">*</span>e = mem::replace(<span class="kw-2">&mut *</span>paren.expr, Expr::PLACEHOLDER);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
<span class="kw">fn </span>main() {
|
|||
|
<span class="kw">let </span><span class="kw-2">mut </span>e: Expr = <span class="macro">parse_quote!</span> { ((<span class="number">1 </span>+ <span class="number">1</span>)) };
|
|||
|
unparenthesize(<span class="kw-2">&mut </span>e);
|
|||
|
<span class="macro">assert_eq!</span>(<span class="string">"1 + 1"</span>, e.to_token_stream().to_string());
|
|||
|
}</code></pre></div>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.parse_without_eager_brace" class="method"><a class="src rightside" href="../src/syn/expr.rs.html#828-830">source</a><h4 class="code-header">pub fn <a href="#method.parse_without_eager_brace" class="fn">parse_without_eager_brace</a>(input: <a class="type" href="parse/type.ParseStream.html" title="type syn::parse::ParseStream">ParseStream</a><'_>) -> <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a><<a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a>></h4></section></summary><div class="docblock"><p>An alternative to the primary <code>Expr::parse</code> parser (from the <a href="parse/trait.Parse.html" title="trait syn::parse::Parse"><code>Parse</code></a>
|
|||
|
trait) for ambiguous syntactic positions in which a trailing brace
|
|||
|
should not be taken as part of the expression.</p>
|
|||
|
<p>Rust grammar has an ambiguity where braces sometimes turn a path
|
|||
|
expression into a struct initialization and sometimes do not. In the
|
|||
|
following code, the expression <code>S {}</code> is one expression. Presumably
|
|||
|
there is an empty struct <code>struct S {}</code> defined somewhere which it is
|
|||
|
instantiating.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let _ </span>= <span class="kw-2">*</span>S {};
|
|||
|
|
|||
|
<span class="comment">// parsed by rustc as: `*(S {})`</span></code></pre></div>
|
|||
|
<p>We would want to parse the above using <code>Expr::parse</code> after the <code>=</code>
|
|||
|
token.</p>
|
|||
|
<p>But in the following, <code>S {}</code> is <em>not</em> a struct init expression.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">if </span><span class="kw-2">*</span>S {} {}
|
|||
|
|
|||
|
<span class="comment">// parsed by rustc as:
|
|||
|
//
|
|||
|
// if (*S) {
|
|||
|
// /* empty block */
|
|||
|
// }
|
|||
|
// {
|
|||
|
// /* another empty block */
|
|||
|
// }</span></code></pre></div>
|
|||
|
<p>For that reason we would want to parse if-conditions using
|
|||
|
<code>Expr::parse_without_eager_brace</code> after the <code>if</code> token. Same for similar
|
|||
|
syntactic positions such as the condition expr after a <code>while</code> token or
|
|||
|
the expr at the top of a <code>match</code>.</p>
|
|||
|
<p>The Rust grammar’s choices around which way this ambiguity is resolved
|
|||
|
at various syntactic positions is fairly arbitrary. Really either parse
|
|||
|
behavior could work in most positions, and language designers just
|
|||
|
decide each case based on which is more likely to be what the programmer
|
|||
|
had in mind most of the time.</p>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">if return </span>S {} {}
|
|||
|
|
|||
|
<span class="comment">// parsed by rustc as:
|
|||
|
//
|
|||
|
// if (return (S {})) {
|
|||
|
// }
|
|||
|
//
|
|||
|
// but could equally well have been this other arbitrary choice:
|
|||
|
//
|
|||
|
// if (return S) {
|
|||
|
// }
|
|||
|
// {}</span></code></pre></div>
|
|||
|
<p>Note the grammar ambiguity on trailing braces is distinct from
|
|||
|
precedence and is not captured by assigning a precedence level to the
|
|||
|
braced struct init expr in relation to other operators. This can be
|
|||
|
illustrated by <code>return 0..S {}</code> vs <code>match 0..S {}</code>. The former parses as
|
|||
|
<code>return (0..(S {}))</code> implying tighter precedence for struct init than
|
|||
|
<code>..</code>, while the latter parses as <code>match (0..S) {}</code> implying tighter
|
|||
|
precedence for <code>..</code> than struct init, a contradiction.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.parse_with_earlier_boundary_rule" class="method"><a class="src rightside" href="../src/syn/expr.rs.html#890-892">source</a><h4 class="code-header">pub fn <a href="#method.parse_with_earlier_boundary_rule" class="fn">parse_with_earlier_boundary_rule</a>(input: <a class="type" href="parse/type.ParseStream.html" title="type syn::parse::ParseStream">ParseStream</a><'_>) -> <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a><<a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a>></h4></section></summary><div class="docblock"><p>An alternative to the primary <code>Expr::parse</code> parser (from the <a href="parse/trait.Parse.html" title="trait syn::parse::Parse"><code>Parse</code></a>
|
|||
|
trait) for syntactic positions in which expression boundaries are placed
|
|||
|
more eagerly than done by the typical expression grammar. This includes
|
|||
|
expressions at the head of a statement or in the right-hand side of a
|
|||
|
<code>match</code> arm.</p>
|
|||
|
<p>Compare the following cases:</p>
|
|||
|
<ol>
|
|||
|
<li></li>
|
|||
|
</ol>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let _ </span>= <span class="kw">match </span>result {
|
|||
|
() <span class="kw">if </span>guard => <span class="kw">if </span>cond { f } <span class="kw">else </span>{ g }
|
|||
|
() => <span class="bool-val">false</span>,
|
|||
|
};</code></pre></div>
|
|||
|
<ol start="2">
|
|||
|
<li></li>
|
|||
|
</ol>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let _ </span>= || {
|
|||
|
<span class="kw">if </span>cond { f } <span class="kw">else </span>{ g }
|
|||
|
()
|
|||
|
};</code></pre></div>
|
|||
|
<ol start="3">
|
|||
|
<li></li>
|
|||
|
</ol>
|
|||
|
|
|||
|
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let _ </span>= [<span class="kw">if </span>cond { f } <span class="kw">else </span>{ g } ()];</code></pre></div>
|
|||
|
<p>The same sequence of tokens <code>if cond { f } else { g } ()</code> appears in
|
|||
|
expression position 3 times. The first two syntactic positions use eager
|
|||
|
placement of expression boundaries, and parse as <code>Expr::If</code>, with the
|
|||
|
adjacent <code>()</code> becoming <code>Pat::Tuple</code> or <code>Expr::Tuple</code>. In contrast, the
|
|||
|
third case uses standard expression boundaries and parses as
|
|||
|
<code>Expr::Call</code>.</p>
|
|||
|
<p>As with <a href="enum.Expr.html#method.parse_without_eager_brace" title="associated function syn::Expr::parse_without_eager_brace"><code>parse_without_eager_brace</code></a>, this ambiguity in the Rust
|
|||
|
grammar is independent of precedence.</p>
|
|||
|
</div></details><details class="toggle method-toggle" open><summary><section id="method.peek" class="method"><a class="src rightside" href="../src/syn/expr.rs.html#906-922">source</a><h4 class="code-header">pub fn <a href="#method.peek" class="fn">peek</a>(input: <a class="type" href="parse/type.ParseStream.html" title="type syn::parse::ParseStream">ParseStream</a><'_>) -> <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns whether the next token in the parse stream is one that might
|
|||
|
possibly form the beginning of an expr.</p>
|
|||
|
<p>This classification is a load-bearing part of the grammar of some Rust
|
|||
|
expressions, notably <code>return</code> and <code>break</code>. For example <code>return < …</code> will
|
|||
|
never parse <code><</code> as a binary operator regardless of what comes after,
|
|||
|
because <code><</code> is a legal starting token for an expression and so it’s
|
|||
|
required to be continued as a return value, such as <code>return <Struct as Trait>::CONST</code>. Meanwhile <code>return > …</code> treats the <code>></code> as a binary
|
|||
|
operator because it cannot be a starting token for any Rust expression.</p>
|
|||
|
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Expr" class="impl"><a class="src rightside" href="../src/syn/gen/clone.rs.html#239-310">source</a><a href="#impl-Clone-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone" class="method trait-impl"><a class="src rightside" href="../src/syn/gen/clone.rs.html#240-309">source</a><a href="#method.clone" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html#tymethod.clone" class="fn">clone</a>(&self) -> Self</h4></section></summary><div class='docblock'>Returns a copy of the value. <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html#tymethod.clone">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clone_from" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.82.0/src/core/clone.rs.html#174">source</a></span><a href="#method.clone_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html#method.clone_from" class="fn">clone_from</a>(&mut self, source: &Self)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html#method.clone_from">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-Expr" class="impl"><a class="src rightside" href="../src/syn/gen/debug.rs.html#416-492">source</a><a href="#impl-Debug-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a class="src rightside" href="../src/syn/gen/debug.rs.html#417-491">source</a><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&self, formatter: &mut <a class="struct" href="https://doc.rust-lang.org/1.82.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a><'_>) -> <a class="type" href="https://doc.rust-lang.org/1.82.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.82.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-From%3CExprArray%3E-for-Expr" class="impl"><a class="src rightside" href="../src/syn/expr.rs.html#35-267">source</a><a href="#impl-From%3CExprArray%3E-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><<a class="struct" href="struct.ExprArray.html" title="struct syn::ExprArray">ExprArray</a>> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><
|
|||
|
H: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,</div></h4></section></summary><div class='docblock'>Feeds this value into the given <a href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hash.html#tymethod.hash">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.hash_slice" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.3.0">1.3.0</span> · <a class="src" href="https://doc.rust-lang.org/1.82.0/src/core/hash/mod.rs.html#235-237">source</a></span><a href="#method.hash_slice" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hash.html#method.hash_slice" class="fn">hash_slice</a><H>(data: &[Self], state: <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.reference.html">&mut H</a>)<div class="where">where
|
|||
|
H: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.82.0/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Parse-for-Expr" class="impl"><a class="src rightside" href="../src/syn/expr.rs.html#1218-1226">source</a><a href="#impl-Parse-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="parse/trait.Parse.html" title="trait syn::parse::Parse">Parse</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><section id="method.parse" class="method trait-impl"><a class="src rightside" href="../src/syn/expr.rs.html#1219-1225">source</a><a href="#method.parse" class="anchor">§</a><h4 class="code-header">fn <a href="parse/trait.Parse.html#tymethod.parse" class="fn">parse</a>(input: <a class="type" href="parse/type.ParseStream.html" title="type syn::parse::ParseStream">ParseStream</a><'_>) -> <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a><Self></h4></section></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-PartialEq-for-Expr" class="impl"><a class="src rightside" href="../src/syn/gen/eq.rs.html#265-351">source</a><a href="#impl-PartialEq-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.eq" class="method trait-impl"><a class="src rightside" href="../src/syn/gen/eq.rs.html#266-350">source</a><a href="#method.eq" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&self, other: &Self) -> <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.82.0/src/core/cmp.rs.html#261">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.reference.html">&Rhs</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Tests for <code>!=</code>. The default implementation is almost always sufficient,
|
|||
|
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-ToTokens-for-Expr" class="impl"><a class="src rightside" href="../src/syn/expr.rs.html#35-267">source</a><a href="#impl-ToTokens-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="../quote/to_tokens/trait.ToTokens.html" title="trait quote::to_tokens::ToTokens">ToTokens</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.to_tokens" class="method trait-impl"><a class="src rightside" href="../src/syn/expr.rs.html#35-267">source</a><a href="#method.to_tokens" class="anchor">§</a><h4 class="code-header">fn <a href="../quote/to_tokens/trait.ToTokens.html#tymethod.to_tokens" class="fn">to_tokens</a>(&self, tokens: &mut <a class="struct" href="../proc_macro2/struct.TokenStream.html" title="struct proc_macro2::TokenStream">TokenStream</a>)</h4></section></summary><div class='docblock'>Write <code>self</code> to the given <code>TokenStream</code>. <a href="../quote/to_tokens/trait.ToTokens.html#tymethod.to_tokens">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.to_token_stream" class="method trait-impl"><a class="src rightside" href="../src/quote/to_tokens.rs.html#60">source</a><a href="#method.to_token_stream" class="anchor">§</a><h4 class="code-header">fn <a href="../quote/to_tokens/trait.ToTokens.html#method.to_token_stream" class="fn">to_token_stream</a>(&self) -> <a class="struct" href="../proc_macro2/struct.TokenStream.html" title="struct proc_macro2::TokenStream">TokenStream</a></h4></section></summary><div class='docblock'>Convert <code>self</code> directly into a <code>TokenStream</code> object. <a href="../quote/to_tokens/trait.ToTokens.html#method.to_token_stream">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.into_token_stream" class="method trait-impl"><a class="src rightside" href="../src/quote/to_tokens.rs.html#70-72">source</a><a href="#method.into_token_stream" class="anchor">§</a><h4 class="code-header">fn <a href="../quote/to_tokens/trait.ToTokens.html#method.into_token_stream" class="fn">into_token_stream</a>(self) -> <a class="struct" href="../proc_macro2/struct.TokenStream.html" title="struct proc_macro2::TokenStream">TokenStream</a><div class="where">where
|
|||
|
Self: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Convert <code>self</code> directly into a <code>TokenStream</code> object. <a href="../quote/to_tokens/trait.ToTokens.html#method.into_token_stream">Read more</a></div></details></div></details><section id="impl-Eq-for-Expr" class="impl"><a class="src rightside" href="../src/syn/gen/eq.rs.html#262">source</a><a href="#impl-Eq-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-Expr" class="impl"><a href="#impl-Freeze-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section><section id="impl-RefUnwindSafe-for-Expr" class="impl"><a href="#impl-RefUnwindSafe-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section><section id="impl-Send-for-Expr" class="impl"><a href="#impl-Send-for-Expr" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section><section id="impl-Sync-for-Expr" class="impl"><a href="#impl-Sync-for-Expr" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section><section id="impl-Unpin-for-Expr" class="impl"><a href="#impl-Unpin-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section><section id="impl-UnwindSafe-for-Expr" class="impl"><a href="#impl-UnwindSafe-for-Expr" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/any.rs.html#138">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
|
|||
|
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/any.rs.html#139">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.82.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.82.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/borrow.rs.html#209">source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><T> for T<div class="where">where
|
|||
|
T: ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/borrow.rs.html#211">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.reference.html">&T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/borrow.rs.html#217">source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<div class="where">where
|
|||
|
T: ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/borrow.rs.html#218">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.reference.html">&mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.82.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CloneToUninit-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/clone.rs.html#273">source</a><a href="#impl-CloneToUninit-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/clone/trait.CloneToUninit.html" title="trait core::clone::CloneToUninit">CloneToUninit</a> for T<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone_to_uninit" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/clone.rs.html#275">source</a><a href="#method.clone_to_uninit" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit" class="fn">clone_to_uninit</a>(&self, dst: <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.pointer.html">*mut T</a>)</h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>clone_to_uninit</code>)</span></div></span><div class='docblock'>Performs copy-assignment from <code>self</code> to <code>dst</code>. <a href="https://doc.rust-lang.org/1.82.0/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#765">source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from-39" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#768">source</a><a href="#method.from-39" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -> T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
|
|||
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#748-750">source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#758">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -> U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
|
|||
|
<p>That is, this conversion is whatever the implementation of
|
|||
|
<code><a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
|
|||
|
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Spanned-for-T" class="impl"><a class="src rightside" href="../src/syn/spanned.rs.html#104-108">source</a><a href="#impl-Spanned-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="spanned/trait.Spanned.html" title="trait syn::spanned::Spanned">Spanned</a> for T<div class="where">where
|
|||
|
T: Spanned + ?<a class="trait" href="https://doc.rust-lang.org/1.82.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.span" class="method trait-impl"><a class="src rightside" href="../src/syn/spanned.rs.html#105-107">source</a><a href="#method.span" class="anchor">§</a><h4 class="code-header">fn <a href="spanned/trait.Spanned.html#tymethod.span" class="fn">span</a>(&self) -> <a class="struct" href="../proc_macro2/struct.Span.html" title="struct proc_macro2::Span">Span</a></h4></section></summary><div class='docblock'>Returns a <code>Span</code> covering the complete contents of this syntax tree
|
|||
|
node, or <a href="../proc_macro2/struct.Span.html#method.call_site" title="associated function proc_macro2::Span::call_site"><code>Span::call_site()</code></a> if this node is empty.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ToOwned-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/alloc/borrow.rs.html#82-84">source</a><a href="#impl-ToOwned-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html" title="trait alloc::borrow::ToOwned">ToOwned</a> for T<div class="where">where
|
|||
|
T: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/alloc/borrow.rs.html#86">source</a><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associatedtype">Owned</a> = T</h4></section></summary><div class='docblock'>The resulting type after obtaining ownership.</div></details><details class="toggle method-toggle" open><summary><section id="method.to_owned" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/alloc/borrow.rs.html#87">source</a><a href="#method.to_owned" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned" class="fn">to_owned</a>(&self) -> T</h4></section></summary><div class='docblock'>Creates owned data from borrowed data, usually by cloning. <a href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.clone_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/alloc/borrow.rs.html#91">source</a><a href="#method.clone_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html#method.clone_into" class="fn">clone_into</a>(&self, target: <a class="primitive" href="https://doc.rust-lang.org/1.82.0/std/primitive.reference.html">&mut T</a>)</h4></section></summary><div class='docblock'>Uses borrowed data to replace owned data, usually by cloning. <a href="https://doc.rust-lang.org/1.82.0/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#805-807">source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#809">source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#812">source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -> <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, <T as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#790-792">source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><U> for T<div class="where">where
|
|||
|
U: <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#794">source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = <U as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.82.0/src/core/convert/mod.rs.html#797">source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -> <a class="enum" href="https://doc.rust-lang.org/1.82.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a><U, <U as <a class="trait" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.82.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>
|