Handle #![rustfmt_skip] in block statements

This commit is contained in:
Matthew McAllister 2017-10-20 02:34:12 -07:00
parent 108e2cd776
commit 1853d02ea9
3 changed files with 25 additions and 75 deletions

View File

@ -150,8 +150,17 @@ impl<'a> FmtVisitor<'a> {
}
// Format inner attributes if available.
if let Some(attrs) = inner_attrs {
self.visit_attrs(attrs, ast::AttrStyle::Inner);
let skip_rewrite = if let Some(attrs) = inner_attrs {
self.visit_attrs(attrs, ast::AttrStyle::Inner)
} else {
false
};
if skip_rewrite {
self.push_rewrite(b.span, None);
self.close_block(false);
self.last_pos = source!(self, b.span).hi();
return;
}
self.walk_block_stmts(b);

View File

@ -1,73 +0,0 @@
// Test the skip attribute works
#[rustfmt_skip]
fn foo() { badly; formatted; stuff
; }
#[rustfmt_skip]
trait Foo
{
fn foo(
);
}
impl LateLintPass for UsedUnderscoreBinding {
#[cfg_attr(rustfmt, rustfmt_skip)]
fn check_expr() { // comment
}
}
fn issue1346() {
#[cfg_attr(rustfmt, rustfmt_skip)]
Box::new(self.inner.call(req).then(move |result| {
match result {
Ok(resp) => Box::new(future::done(Ok(resp))),
Err(e) => {
try_error!(clo_stderr, "{}", e);
Box::new(future::err(e))
}
}
}))
}
fn skip_on_statements() {
// Semi
#[cfg_attr(rustfmt, rustfmt_skip)]
foo(
1, 2, 3, 4,
1, 2,
1, 2, 3,
);
// Local
#[cfg_attr(rustfmt, rustfmt_skip)]
let x = foo( a, b , c);
// Item
#[cfg_attr(rustfmt, rustfmt_skip)]
use foobar ;
// Mac
#[cfg_attr(rustfmt, rustfmt_skip)]
vec![
1, 2, 3, 4,
1, 2, 3, 4,
1, 2, 3, 4,
1, 2, 3,
1,
1, 2,
1,
];
// Expr
#[cfg_attr(rustfmt, rustfmt_skip)]
foo( a, b , c)
}
// Check that the skip attribute applies to other attributes.
#[rustfmt_skip]
#[cfg
( a , b
)]
fn
main() {}

View File

@ -31,6 +31,20 @@ fn issue1346() {
}
fn skip_on_statements() {
// Outside block
#[rustfmt_skip]
{
foo; bar;
// junk
}
{
// Inside block
#![rustfmt_skip]
foo; bar;
// junk
}
// Semi
#[cfg_attr(rustfmt, rustfmt_skip)]
foo(