about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2015-09-05 18:26:28 +1200
committerNick Cameron <ncameron@mozilla.com>2015-09-07 07:31:02 +1200
commite0c197cab4fb8ffeb87ca56be850894be2ec7e25 (patch)
tree4912f179f316440fbf35e0408927cc5b2e6a03e0
parent6c5d3500bb805b37865fe961a7054f8435d176fc (diff)
Single line unsafe blocks
-rw-r--r--src/expr.rs15
-rw-r--r--tests/source/expr.rs8
-rw-r--r--tests/target/expr.rs6
3 files changed, 28 insertions, 1 deletions
diff --git a/src/expr.rs b/src/expr.rs
index aac13f552d0..3a8b9c9ab4b 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -262,13 +262,26 @@ impl Rewrite for ast::Block {
                 // Extract comment between unsafe and block start.
                 let trimmed = &snippet[6..open_pos].trim();
 
-                if !trimmed.is_empty() {
+                let prefix = if !trimmed.is_empty() {
                     // 9 = "unsafe  {".len(), 7 = "unsafe ".len()
                     let budget = try_opt!(width.checked_sub(9));
                     format!("unsafe {} ", rewrite_comment(trimmed, true, budget, offset + 7))
                 } else {
                     "unsafe ".to_owned()
+                };
+
+                if is_simple_block(self, context.codemap) && prefix.len() < width {
+                    let body =
+                        self.expr.as_ref().unwrap().rewrite(context, width - prefix.len(), offset);
+                    if let Some(ref expr_str) = body {
+                        let result = format!("{}{{ {} }}", prefix, expr_str);
+                        if result.len() <= width && !result.contains('\n') {
+                            return Some(result);
+                        }
+                    }
                 }
+
+                prefix
             }
             ast::BlockCheckMode::PopUnsafeBlock(..) |
             ast::BlockCheckMode::DefaultBlock => {
diff --git a/tests/source/expr.rs b/tests/source/expr.rs
index 0bb46086ca8..bf9a8359aad 100644
--- a/tests/source/expr.rs
+++ b/tests/source/expr.rs
@@ -93,6 +93,14 @@ fn baz() {
     unsafe {
         // Regular unsafe block
     }
+
+    unsafe {
+        foo()
+    }
+
+    unsafe {
+        foo();
+    }
 }
 
 // Test some empty blocks.
diff --git a/tests/target/expr.rs b/tests/target/expr.rs
index e2ed9c598ce..9bfe51e0b26 100644
--- a/tests/target/expr.rs
+++ b/tests/target/expr.rs
@@ -130,6 +130,12 @@ fn baz() {
     unsafe {
         // Regular unsafe block
     }
+
+    unsafe { foo() }
+
+    unsafe {
+        foo();
+    }
 }
 
 // Test some empty blocks.