about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarcus Klaas de Vries <mail@marcusklaas.nl>2015-09-06 22:44:06 +0200
committerMarcus Klaas de Vries <mail@marcusklaas.nl>2015-09-06 22:44:06 +0200
commit072c54beba5f81dc028428c1a3e88290cfbcc935 (patch)
tree01070c9a1deb0e8ef94393ea543ab5e0b0e55e04
parent8750399ef4f6a95148d2839423969f05adfca5dd (diff)
parente0c197cab4fb8ffeb87ca56be850894be2ec7e25 (diff)
Merge pull request #265 from nrc/unsafe_one_line
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 66a4327a7ac..3f88e45884e 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.