rollup merge of #19215: aochagavia/pretty

Closes https://github.com/rust-lang/rust/issues/19077

I would appreciate any guidance on how to write a test for this. I saw some examples in `test/pretty`, but there are different ways to test... With or without `.pp` files, with a `pp-exact` comment, etc.
This commit is contained in:
Jakub Bukaj 2014-11-23 14:11:57 -05:00
commit 4dbd6574b0
2 changed files with 36 additions and 21 deletions

View File

@ -11,31 +11,25 @@
pub use self::AnnNode::*;
use abi;
use ast::{FnUnboxedClosureKind, FnMutUnboxedClosureKind};
use ast::{mod, FnUnboxedClosureKind, FnMutUnboxedClosureKind};
use ast::{FnOnceUnboxedClosureKind};
use ast::{MethodImplItem, RegionTyParamBound, TraitTyParamBound};
use ast::{RequiredMethod, ProvidedMethod, TypeImplItem, TypeTraitItem};
use ast::{UnboxedClosureKind};
use ast;
use ast_util;
use owned_slice::OwnedSlice;
use attr::{AttrMetaMethods, AttributeMethods};
use codemap::{CodeMap, BytePos};
use codemap;
use codemap::{mod, CodeMap, BytePos};
use diagnostic;
use parse::token::{BinOpToken, Token};
use parse::token;
use parse::token::{mod, BinOpToken, Token};
use parse::lexer::comments;
use parse;
use print::pp::{break_offset, word, space, zerobreak, hardbreak};
use print::pp::{mod, break_offset, word, space, zerobreak, hardbreak};
use print::pp::{Breaks, Consistent, Inconsistent, eof};
use print::pp;
use ptr::P;
use std::ascii;
use std::io::IoResult;
use std::io;
use std::mem;
use std::{ascii, mem};
use std::io::{mod, IoResult};
pub enum AnnNode<'a> {
NodeIdent(&'a ast::Ident),
@ -2150,21 +2144,22 @@ impl<'a> State<'a> {
try!(self.print_pat(&**p));
}
try!(space(&mut self.s));
match arm.guard {
Some(ref e) => {
try!(self.word_space("if"));
try!(self.print_expr(&**e));
try!(space(&mut self.s));
}
None => ()
if let Some(ref e) = arm.guard {
try!(self.word_space("if"));
try!(self.print_expr(&**e));
try!(space(&mut self.s));
}
try!(self.word_space("=>"));
match arm.body.node {
ast::ExprBlock(ref blk) => {
// the block will close the pattern's ibox
try!(self.print_block_unclosed_indent(&**blk,
indent_unit));
try!(self.print_block_unclosed_indent(&**blk, indent_unit));
// If it is a user-provided unsafe block, print a comma after it
if let ast::UnsafeBlock(ast::UserProvided) = blk.rules {
try!(word(&mut self.s, ","));
}
}
_ => {
try!(self.end()); // close the ibox for the pattern

View File

@ -0,0 +1,20 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// Testing that unsafe blocks in match arms are followed by a comma
// pp-exact
fn main() {
match true {
true if true => (),
false => unsafe { },
true => { }
false => (),
}
}