use std::cmp::min;
use config::lists::*;
-use syntax::codemap::{BytePos, CodeMap, Span};
use syntax::parse::token::DelimToken;
+use syntax::source_map::{BytePos, SourceMap, Span};
use syntax::{ast, ptr};
use chains::rewrite_chain;
use closures;
-use codemap::{LineRangeUtils, SpanUtils};
use comment::{
combine_strs_with_missing_comments, contains_comment, recover_comment_removed, rewrite_comment,
rewrite_missing_comment, CharClasses, FindUncommented,
use patterns::{can_be_overflowed_pat, is_short_pattern, TuplePatField};
use rewrite::{Rewrite, RewriteContext};
use shape::{Indent, Shape};
+use source_map::{LineRangeUtils, SpanUtils};
use spanned::Spanned;
use string::{rewrite_string, StringFormat};
use types::{can_be_overflowed_type, rewrite_path, PathContext};
)
})
}
- ast::ExprKind::Unary(ref op, ref subexpr) => rewrite_unary_op(context, op, subexpr, shape),
+ ast::ExprKind::Unary(op, ref subexpr) => rewrite_unary_op(context, op, subexpr, shape),
ast::ExprKind::Struct(ref path, ref fields, ref base) => rewrite_struct_lit(
context,
path,
Some(format!("break{}", id_str))
}
}
- ast::ExprKind::Yield(ref opt_expr) => if let Some(ref expr) = *opt_expr {
- rewrite_unary_prefix(context, "yield ", &**expr, shape)
- } else {
- Some("yield".to_string())
- },
+ ast::ExprKind::Yield(ref opt_expr) => {
+ if let Some(ref expr) = *opt_expr {
+ rewrite_unary_prefix(context, "yield ", &**expr, shape)
+ } else {
+ Some("yield".to_string())
+ }
+ }
ast::ExprKind::Closure(capture, asyncness, movability, ref fn_decl, ref body, _) => {
closures::rewrite_closure(
capture, asyncness, movability, fn_decl, body, expr.span, context, shape,
// We do not format these expressions yet, but they should still
// satisfy our width restrictions.
ast::ExprKind::InlineAsm(..) => Some(context.snippet(expr.span).to_owned()),
- ast::ExprKind::Catch(ref block) => {
- if let rw @ Some(_) = rewrite_single_line_block(
- context,
- "do catch ",
- block,
- Some(&expr.attrs),
- None,
- shape,
- ) {
+ ast::ExprKind::TryBlock(ref block) => {
+ if let rw @ Some(_) =
+ rewrite_single_line_block(context, "try ", block, Some(&expr.attrs), None, shape)
+ {
rw
} else {
- // 9 = `do catch `
+ // 9 = `try `
let budget = shape.width.saturating_sub(9);
Some(format!(
"{}{}",
- "do catch ",
+ "try ",
rewrite_block(
block,
Some(&expr.attrs),
))
}
}
- // FIXME(#2743)
- ast::ExprKind::ObsoleteInPlace(..) => unimplemented!(),
+ ast::ExprKind::ObsoleteInPlace(ref lhs, ref rhs) => lhs
+ .rewrite(context, shape)
+ .map(|s| s + " <-")
+ .and_then(|lhs| rewrite_assign_rhs(context, lhs, &**rhs, shape)),
ast::ExprKind::Async(capture_by, _node_id, ref block) => {
let mover = if capture_by == ast::CaptureBy::Value {
"move "
return None;
}
- if block.stmts.is_empty() && !block_contains_comment(block, context.codemap) && shape.width >= 2
+ if block.stmts.is_empty()
+ && !block_contains_comment(block, context.source_map)
+ && shape.width >= 2
{
return Some(format!("{}{}{{}}", prefix, label_str));
}
label: Option<ast::Label>,
shape: Shape,
) -> Option<String> {
- if is_simple_block(block, attrs, context.codemap) {
+ if is_simple_block(block, attrs, context.source_map) {
let expr_shape = shape.offset_left(last_line_width(prefix))?;
let expr_str = block.stmts[0].rewrite(context, expr_shape)?;
let label_str = rewrite_label(label);
let fixed_cost = self.keyword.len() + " { } else { }".len();
if let ast::ExprKind::Block(ref else_node, _) = else_block.node {
- if !is_simple_block(self.block, None, context.codemap)
- || !is_simple_block(else_node, None, context.codemap)
+ if !is_simple_block(self.block, None, context.source_map)
+ || !is_simple_block(else_node, None, context.source_map)
|| pat_expr_str.contains('\n')
{
return None;
}
}
-pub fn block_contains_comment(block: &ast::Block, codemap: &CodeMap) -> bool {
- let snippet = codemap.span_to_snippet(block.span).unwrap();
+pub fn block_contains_comment(block: &ast::Block, source_map: &SourceMap) -> bool {
+ let snippet = source_map.span_to_snippet(block.span).unwrap();
contains_comment(&snippet)
}
pub fn is_simple_block(
block: &ast::Block,
attrs: Option<&[ast::Attribute]>,
- codemap: &CodeMap,
+ source_map: &SourceMap,
) -> bool {
(block.stmts.len() == 1
&& stmt_is_expr(&block.stmts[0])
- && !block_contains_comment(block, codemap)
+ && !block_contains_comment(block, source_map)
&& attrs.map_or(true, |a| a.is_empty()))
}
pub fn is_simple_block_stmt(
block: &ast::Block,
attrs: Option<&[ast::Attribute]>,
- codemap: &CodeMap,
+ source_map: &SourceMap,
) -> bool {
block.stmts.len() <= 1
- && !block_contains_comment(block, codemap)
+ && !block_contains_comment(block, source_map)
&& attrs.map_or(true, |a| a.is_empty())
}
pub fn is_empty_block(
block: &ast::Block,
attrs: Option<&[ast::Attribute]>,
- codemap: &CodeMap,
+ source_map: &SourceMap,
) -> bool {
block.stmts.is_empty()
- && !block_contains_comment(block, codemap)
+ && !block_contains_comment(block, source_map)
&& attrs.map_or(true, |a| inner_attributes(a).is_empty())
}
}
}
-fn struct_lit_can_be_aligned(fields: &[ast::Field], base: &Option<&ast::Expr>) -> bool {
+fn struct_lit_can_be_aligned(fields: &[ast::Field], base: Option<&ast::Expr>) -> bool {
if base.is_some() {
return false;
}
let one_line_width = h_shape.map_or(0, |shape| shape.width);
let body_lo = context.snippet_provider.span_after(span, "{");
- let fields_str = if struct_lit_can_be_aligned(fields, &base)
+ let fields_str = if struct_lit_can_be_aligned(fields, base)
&& context.config.struct_field_align_threshold() > 0
{
rewrite_with_alignment(
};
let name = context.snippet(field.ident.span);
if field.is_shorthand {
- Some(attrs_str + &name)
+ Some(attrs_str + name)
} else {
let mut separator = String::from(struct_lit_field_separator(context.config));
for _ in 0..prefix_max_width.saturating_sub(name.len()) {
match expr {
Some(ref e) if e.as_str() == name && context.config.use_field_init_shorthand() => {
- Some(attrs_str + &name)
+ Some(attrs_str + name)
}
Some(e) => Some(format!("{}{}{}{}", attrs_str, name, separator, e)),
None => {
Separator::Comma,
nested_shape.width,
);
- let fmt = ListFormatting::new(shape, context.config)
+ let fmt = ListFormatting::new(nested_shape, context.config)
.tactic(tactic)
.ends_with_newline(false);
let list_str = write_list(&item_vec, &fmt)?;
fn rewrite_unary_op(
context: &RewriteContext,
- op: &ast::UnOp,
+ op: ast::UnOp,
expr: &ast::Expr,
shape: Shape,
) -> Option<String> {
// For some reason, an UnOp is not spanned like BinOp!
- let operator_str = match *op {
+ let operator_str = match op {
ast::UnOp::Deref => "*",
ast::UnOp::Not => "!",
ast::UnOp::Neg => "-",