rtic/dev/api/syn/enum.Expr.html

267 lines
123 KiB
HTML
Raw Permalink Normal View History

<!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-b0742ba02757f159.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.83.0 (90b35a623 2024-11-26)" data-channel="1.83.0" data-search-js="search-f0d225181b97f9a4.js" data-settings-js="settings-805db61a62df4bd2.js" ><script src="../static.files/storage-1d39b6787ed640ff.js"></script><script defer src="sidebar-items.js"></script><script defer src="../static.files/main-f070b9041d14864c.js"></script><noscript><link rel="stylesheet" href="../static.files/noscript-0111fcff984fae8f.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.90</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Expr</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#syntax-tree-enums" title="Syntax tree enums">Syntax tree enums</a></li></ul><h3><a href="#variants">Variants</a></h3><ul class="block variant"><li><a href="#variant.Array" title="Array">Array</a></li><li><a href="#variant.Assign" title="Assign">Assign</a></li><li><a href="#variant.Async" title="Async">Async</a></li><li><a href="#variant.Await" title="Await">Await</a></li><li><a href="#variant.Binary" title="Binary">Binary</a></li><li><a href="#variant.Block" title="Block">Block</a></li><li><a href="#variant.Break" title="Break">Break</a></li><li><a href="#variant.Call" title="Call">Call</a></li><li><a href="#variant.Cast" title="Cast">Cast</a></li><li><a href="#variant.Closure" title="Closure">Closure</a></li><li><a href="#variant.Const" title="Const">Const</a></li><li><a href="#variant.Continue" title="Continue">Continue</a></li><li><a href="#variant.Field" title="Field">Field</a></li><li><a href="#variant.ForLoop" title="ForLoop">ForLoop</a></li><li><a href="#variant.Group" title="Group">Group</a></li><li><a href="#variant.If" title="If">If</a></li><li><a href="#variant.Index" title="Index">Index</a></li><li><a href="#variant.Infer" title="Infer">Infer</a></li><li><a href="#variant.Let" title="Let">Let</a></li><li><a href="#variant.Lit" title="Lit">Lit</a></li><li><a href="#variant.Loop" title="Loop">Loop</a></li><li><a href="#variant.Macro" title="Macro">Macro</a></li><li><a href="#variant.Match" title="Match">Match</a></li><li><a href="#variant.MethodCall" title="MethodCall">MethodCall</a></li><li><a href="#variant.Paren" title="Paren">Paren</a></li><li><a href="#variant.Path" title="Path">Path</a></li><li><a href="#variant.Range" title="Range">Range</a></li><li><a href="#variant.RawAddr" title="RawAddr">RawAddr</a></li><li><a href="#variant.Reference" title="Reference">Reference</a></li><li><a href="#variant.Repeat" title="Repeat">Repeat</a
<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) =&gt; {
<span class="comment">/* ... */
</span>}
Expr::Cast(expr) =&gt; {
<span class="comment">/* ... */
</span>}
Expr::If(expr) =&gt; {
<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, .. }) =&gt; {</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) =&gt; {}, None =&gt; {} }</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::&lt;T&gt;(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>&amp;raw const place</code> or <code>&amp;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>&amp;a</code> or <code>&amp;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">&amp;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">&amp;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">&amp;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>&lt;'_&gt;) -&gt; <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a>&lt;<a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a>&gt;</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 grammars 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>&lt;'_&gt;) -&gt; <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a>&lt;<a class="enum" href="enum.Expr.html" title="enum syn::Expr">Expr</a>&gt;</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 =&gt; <span class="kw">if </span>cond { f } <span class="kw">else </span>{ g }
() =&gt; <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>&lt;'_&gt;) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.83.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 &lt;</code> will
never parse <code>&lt;</code> as a binary operator regardless of what comes after,
because <code>&lt;</code> is a legal starting token for an expression and so its
required to be continued as a return value, such as <code>return &lt;Struct as Trait&gt;::CONST</code>. Meanwhile <code>return &gt;</code> treats the <code>&gt;</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.83.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.83.0/core/clone/trait.Clone.html#tymethod.clone" class="fn">clone</a>(&amp;self) -&gt; Self</h4></section></summary><div class='docblock'>Returns a copy of the value. <a href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/clone/trait.Clone.html#method.clone_from" class="fn">clone_from</a>(&amp;mut self, source: &amp;Self)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&amp;self, formatter: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.83.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;<a class="struct" href="struct.ExprArray.html" title="struct syn::ExprArray">ExprArray</a>&gt; 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.83.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.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/hash/trait.Hash.html#method.hash_slice" class="fn">hash_slice</a>&lt;H&gt;(data: &amp;[Self], state: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/std/primitive.reference.html">&amp;mut H</a>)<div class="where">where
H: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
Self: <a class="trait" href="https://doc.rust-lang.org/1.83.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.83.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.83.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#1228-1236">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#1229-1235">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>&lt;'_&gt;) -&gt; <a class="type" href="parse/type.Result.html" title="type syn::parse::Result">Result</a>&lt;Self&gt;</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.83.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.83.0/core/cmp/trait.PartialEq.html#tymethod.eq" class="fn">eq</a>(&amp;self, other: &amp;Self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/cmp/trait.PartialEq.html#method.ne" class="fn">ne</a>(&amp;self, other: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/std/primitive.reference.html">&amp;Rhs</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.83.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>(&amp;self, tokens: &amp;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>(&amp;self) -&gt; <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) -&gt; <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.83.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.83.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.83.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.83.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.83.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.83.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.83.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.83.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.83.0/src/core/any.rs.html#138">source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.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.83.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.83.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.83.0/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.83.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.83.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.83.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&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/std/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.83.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.83.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&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.83.0/std/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.83.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.83.0/src/core/clone.rs.html#273">source</a><a href="#impl-CloneToUninit-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.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.83.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.83.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.83.0/core/clone/trait.CloneToUninit.html#tymethod.clone_to_uninit" class="fn">clone_to_uninit</a>(&amp;self, dst: <a class="primitive" href="https://doc.rust-lang.org/1.83.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.83.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.83.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&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; 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.83.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.83.0/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; 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.83.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&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</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.83.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.83.0/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; 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.83.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; 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&lt;T&gt; <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.83.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>(&amp;self) -&gt; <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.83.0/src/alloc/borrow.rs.html#82-84">source</a><a href="#impl-ToOwned-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.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.83.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.83.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.83.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.83.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.83.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned" class="fn">to_owned</a>(&amp;self) -&gt; T</h4></section></summary><div class='docblock'>Creates owned data from borrowed data, usually by cloning. <a href="https://doc.rust-lang.org/1.83.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.83.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.83.0/alloc/borrow/trait.ToOwned.html#method.clone_into" class="fn">clone_into</a>(&amp;self, target: <a class="primitive" href="https://doc.rust-lang.org/1.83.0/std/primitive.reference.html">&amp;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.83.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.83.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&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</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.83.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.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</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.83.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&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</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.83.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.83.0/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.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.83.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.83.0/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.83.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.83.0/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>