} else {
(mk_sp(arm.span().lo(), arm.span().lo()), String::new())
};
- let pats_str =
- rewrite_match_pattern(context, &arm.pats, &arm.guard, shape).and_then(|pats_str| {
- combine_strs_with_missing_comments(
- context,
- &attrs_str,
- &pats_str,
- missing_span,
- shape,
- false,
- )
- })?;
+ let pats_str = rewrite_match_pattern(
+ context,
+ &arm.pats,
+ &arm.guard,
+ arm.beginning_vert.is_some(),
+ shape,
+ ).and_then(|pats_str| {
+ combine_strs_with_missing_comments(
+ context,
+ &attrs_str,
+ &pats_str,
+ missing_span,
+ shape,
+ false,
+ )
+ })?;
rewrite_match_body(
context,
&arm.body,
context: &RewriteContext,
pats: &[ptr::P<ast::Pat>],
guard: &Option<ptr::P<ast::Expr>>,
+ has_beginning_vert: bool,
shape: Shape,
) -> Option<String> {
// Patterns
// 5 = ` => {`
- let pat_shape = shape.sub_width(5)?;
+ // 2 = `| `
+ let pat_shape = shape
+ .sub_width(5)?
+ .offset_left(if has_beginning_vert { 2 } else { 0 })?;
let pat_strs = pats.iter()
.map(|p| p.rewrite(context, pat_shape))
config: context.config,
};
let pats_str = write_list(&items, &fmt)?;
+ let beginning_vert = if has_beginning_vert { "| " } else { "" };
// Guard
let guard_str = rewrite_guard(context, guard, shape, trimmed_last_line_width(&pats_str))?;
- Some(format!("{}{}", pats_str, guard_str))
+ Some(format!("{}{}{}", beginning_vert, pats_str, guard_str))
}
// (extend, body)
impl Spanned for ast::Arm {
fn span(&self) -> Span {
- span_with_attrs_lo_hi!(self, self.pats[0].span.lo(), self.body.span.hi())
+ let lo = if let Some(sp) = self.beginning_vert {
+ sp.lo()
+ } else {
+ self.pats[0].span.lo()
+ };
+ span_with_attrs_lo_hi!(self, lo, self.body.span.hi())
}
}
"bind" | "writev" | "readv" | "sendmsg" | "recvmsg" if android && (aarch64 || x86_64) => true,
}
}
+
+// #2462
+// Preserve a `|` at the beginning of a match arm.
+fn match_with_beginning_vert() {
+ let x = Foo::A;
+ match x {
+ | Foo::A
+ | Foo::B => println!("AB"),
+ | Foo::C => println!("C"),
+ }
+}