about summary refs log tree commit diff
path: root/src/tools/rustfmt
diff options
context:
space:
mode:
authorEric Holk <ericholk@microsoft.com>2025-03-13 14:36:02 -0700
committerEric Holk <ericholk@microsoft.com>2025-03-14 12:21:59 -0700
commit635eae2d4fc724cb53a3a45975bc18779a3293b1 (patch)
treed09e252392e598d39b17e5454e3d8ef54ae08e31 /src/tools/rustfmt
parent1c0916a2b3cd6c595e1c7b69a31d507f7619bb67 (diff)
downloadrust-635eae2d4fc724cb53a3a45975bc18779a3293b1.tar.gz
rust-635eae2d4fc724cb53a3a45975bc18779a3293b1.zip
Teach rustfmt to handle postfix yield
Diffstat (limited to 'src/tools/rustfmt')
-rw-r--r--src/tools/rustfmt/src/expr.rs5
-rw-r--r--src/tools/rustfmt/tests/source/postfix-yield.rs15
-rw-r--r--src/tools/rustfmt/tests/target/postfix-yield.rs12
3 files changed, 30 insertions, 2 deletions
diff --git a/src/tools/rustfmt/src/expr.rs b/src/tools/rustfmt/src/expr.rs
index eff2d2e3ff4..92c1ffa6076 100644
--- a/src/tools/rustfmt/src/expr.rs
+++ b/src/tools/rustfmt/src/expr.rs
@@ -221,7 +221,7 @@ pub(crate) fn format_expr(
                 Ok(format!("break{id_str}"))
             }
         }
-        ast::ExprKind::Yield(ref opt_expr) => {
+        ast::ExprKind::Yield(ref opt_expr, ast::YieldKind::Prefix) => {
             if let Some(ref expr) = *opt_expr {
                 rewrite_unary_prefix(context, "yield ", &**expr, shape)
             } else {
@@ -243,7 +243,8 @@ pub(crate) fn format_expr(
         ast::ExprKind::Try(..)
         | ast::ExprKind::Field(..)
         | ast::ExprKind::MethodCall(..)
-        | ast::ExprKind::Await(_, _) => rewrite_chain(expr, context, shape),
+        | ast::ExprKind::Await(_, _)
+        | ast::ExprKind::Yield(_, ast::YieldKind::Postfix) => rewrite_chain(expr, context, shape),
         ast::ExprKind::MacCall(ref mac) => {
             rewrite_macro(mac, None, context, shape, MacroPosition::Expression).or_else(|_| {
                 wrap_str(
diff --git a/src/tools/rustfmt/tests/source/postfix-yield.rs b/src/tools/rustfmt/tests/source/postfix-yield.rs
new file mode 100644
index 00000000000..8a8958f3ad4
--- /dev/null
+++ b/src/tools/rustfmt/tests/source/postfix-yield.rs
@@ -0,0 +1,15 @@
+// This demonstrates a proposed alternate or additional option of having yield in postfix position.
+//@ edition: 2024
+
+#![feature(gen_blocks, coroutines, coroutine_trait, yield_expr)]
+
+use std::ops::{Coroutine, CoroutineState};
+use std::pin::pin;
+
+fn main() {
+    let mut coro =
+        pin!(#[coroutine] |_: i32| { let x = 1.yield;
+            
+            
+             (x + 2).yield; });
+}
diff --git a/src/tools/rustfmt/tests/target/postfix-yield.rs b/src/tools/rustfmt/tests/target/postfix-yield.rs
new file mode 100644
index 00000000000..7e94e1e095a
--- /dev/null
+++ b/src/tools/rustfmt/tests/target/postfix-yield.rs
@@ -0,0 +1,12 @@
+// This demonstrates a proposed alternate or additional option of having yield in postfix position.
+//@ edition: 2024
+
+#![feature(gen_blocks, coroutines, coroutine_trait, yield_expr)]
+
+use std::ops::{Coroutine, CoroutineState};
+use std::pin::pin;
+
+fn main() {
+    let mut coro =
+        pin!(#[coroutine] |_: i32| { let x = 1.yield; (x + 2).yield; });
+}