about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libstd/macros.rs13
-rw-r--r--src/test/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs22
2 files changed, 34 insertions, 1 deletions
diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs
index e245a048955..9eba76cc04a 100644
--- a/src/libstd/macros.rs
+++ b/src/libstd/macros.rs
@@ -321,6 +321,15 @@ macro_rules! eprintln {
 /// assert_eq!(dbg!(1usize, 2u32), (1, 2));
 /// ```
 ///
+/// However, a single argument with a trailing comma will still not be treated
+/// as a tuple, following the convention of ignoring trailing commas in macro
+/// invocations. You can use a 1-tuple directly if you need one:
+///
+/// ```
+/// assert_eq!(1, dbg!(1u32,)); // trailing comma ignored
+/// assert_eq!((1,), dbg!((1u32,))); // 1-tuple
+/// ```
+///
 /// [stderr]: https://en.wikipedia.org/wiki/Standard_streams#Standard_error_(stderr)
 /// [`debug!`]: https://docs.rs/log/*/log/macro.debug.html
 /// [`log`]: https://crates.io/crates/log
@@ -341,9 +350,11 @@ macro_rules! dbg {
             }
         }
     };
+    // Trailing comma with single argument is ignored
+    ($val:expr,) => { dbg!($val) };
     ($($val:expr),+ $(,)?) => {
         ($(dbg!($val)),+,)
-    }
+    };
 }
 
 /// Awaits the completion of an async call.
diff --git a/src/test/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs b/src/test/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
index f1b73ee115d..e2a7ac349ec 100644
--- a/src/test/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
+++ b/src/test/ui/rfc-2361-dbg-macro/dbg-macro-expected-behavior.rs
@@ -54,6 +54,17 @@ fn test() {
         7331
     }));
     assert_eq!(foo, 42);
+
+    // Test trailing comma:
+    assert_eq!(("Yeah",), dbg!(("Yeah",)));
+
+    // Test multiple arguments:
+    assert_eq!((1u8, 2u32), dbg!(1,
+                                 2));
+
+    // Test multiple arguments + trailing comma:
+    assert_eq!((1u8, 2u32, "Yeah"), dbg!(1u8, 2u32,
+                                         "Yeah",));
 }
 
 fn validate_stderr(stderr: Vec<String>) {
@@ -85,6 +96,17 @@ fn validate_stderr(stderr: Vec<String>) {
 
         "before",
         ":51] { foo += 1; eprintln!(\"before\"); 7331 } = 7331",
+
+        ":59] (\"Yeah\",) = (",
+        "    \"Yeah\",",
+        ")",
+
+        ":62] 1 = 1",
+        ":62] 2 = 2",
+
+        ":66] 1u8 = 1",
+        ":66] 2u32 = 2",
+        ":66] \"Yeah\" = \"Yeah\"",
     ]);
 }