about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2024-06-28 14:18:36 -0400
committerMichael Goulet <michael@errs.io>2024-06-28 14:20:44 -0400
commit88f98c2929eebf2c4547dc5adbdaaf3ec651906a (patch)
tree6d4540aab62d4cdcd6022d7d0cedfc8b3016344a
parent51df533d06286cf509dd76b4a604db09fbc85c41 (diff)
downloadrust-88f98c2929eebf2c4547dc5adbdaaf3ec651906a.tar.gz
rust-88f98c2929eebf2c4547dc5adbdaaf3ec651906a.zip
Implement RTN support in rustfmt
-rw-r--r--src/types.rs34
-rw-r--r--tests/target/return-type-notation.rs10
2 files changed, 29 insertions, 15 deletions
diff --git a/src/types.rs b/src/types.rs
index c0bf9482b11..c826547e9d0 100644
--- a/src/types.rs
+++ b/src/types.rs
@@ -484,21 +484,25 @@ fn rewrite_generic_args(
     span: Span,
 ) -> Option<String> {
     match gen_args {
-        ast::GenericArgs::AngleBracketed(ref data) if !data.args.is_empty() => {
-            let args = data
-                .args
-                .iter()
-                .map(|x| match x {
-                    ast::AngleBracketedArg::Arg(generic_arg) => {
-                        SegmentParam::from_generic_arg(generic_arg)
-                    }
-                    ast::AngleBracketedArg::Constraint(constraint) => {
-                        SegmentParam::Binding(constraint)
-                    }
-                })
-                .collect::<Vec<_>>();
+        ast::GenericArgs::AngleBracketed(ref data) => {
+            if data.args.is_empty() {
+                Some("".to_owned())
+            } else {
+                let args = data
+                    .args
+                    .iter()
+                    .map(|x| match x {
+                        ast::AngleBracketedArg::Arg(generic_arg) => {
+                            SegmentParam::from_generic_arg(generic_arg)
+                        }
+                        ast::AngleBracketedArg::Constraint(constraint) => {
+                            SegmentParam::Binding(constraint)
+                        }
+                    })
+                    .collect::<Vec<_>>();
 
-            overflow::rewrite_with_angle_brackets(context, "", args.iter(), shape, span)
+                overflow::rewrite_with_angle_brackets(context, "", args.iter(), shape, span)
+            }
         }
         ast::GenericArgs::Parenthesized(ref data) => format_function_type(
             data.inputs.iter().map(|x| &**x),
@@ -508,7 +512,7 @@ fn rewrite_generic_args(
             context,
             shape,
         ),
-        _ => Some("".to_owned()),
+        ast::GenericArgs::ParenthesizedElided(..) => Some("(..)".to_owned()),
     }
 }
 
diff --git a/tests/target/return-type-notation.rs b/tests/target/return-type-notation.rs
new file mode 100644
index 00000000000..0f26e7e272b
--- /dev/null
+++ b/tests/target/return-type-notation.rs
@@ -0,0 +1,10 @@
+fn rtn()
+where
+    T: Trait<method(..): Send + 'static>,
+    T::method(..): Send + 'static,
+{
+}
+
+fn test() {
+    let x: T::method(..);
+}