| // rustfmt-normalize_comments: true |
| // Match expressions. |
| |
| fn foo() { |
| // A match expression. |
| match x { |
| // Some comment. |
| a => foo(), |
| b if 0 < 42 => foo(), |
| c => { |
| // Another comment. |
| // Comment. |
| an_expression; |
| foo() |
| } |
| Foo(ref bar) => { |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| } |
| Pattern1 | Pattern2 | Pattern3 => false, |
| Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
| | Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn => blah, |
| Patternnnnnnnnnnnnnnnnnnn |
| | Patternnnnnnnnnnnnnnnnnnn |
| | Patternnnnnnnnnnnnnnnnnnn |
| | Patternnnnnnnnnnnnnnnnnnn => meh, |
| |
| Patternnnnnnnnnnnnnnnnnnn | Patternnnnnnnnnnnnnnnnnnn if looooooooooooooooooong_guard => { |
| meh |
| } |
| |
| Patternnnnnnnnnnnnnnnnnnnnnnnnn | Patternnnnnnnnnnnnnnnnnnnnnnnnn |
| if looooooooooooooooooooooooooooooooooooooooong_guard => |
| { |
| meh |
| } |
| |
| // Test that earlier patterns can take the guard space |
| (aaaa, bbbbb, ccccccc, aaaaa, bbbbbbbb, cccccc, aaaa, bbbbbbbb, cccccc, dddddd) |
| | Patternnnnnnnnnnnnnnnnnnnnnnnnn |
| if loooooooooooooooooooooooooooooooooooooooooong_guard => {} |
| |
| _ => {} |
| ast::PathParameters::AngleBracketedParameters(ref data) |
| if data.lifetimes.len() > 0 || data.types.len() > 0 || data.bindings.len() > 0 => {} |
| } |
| |
| let whatever = match something { |
| /// DOC COMMENT! |
| Some(_) => 42, |
| // Comment on an attribute. |
| #[an_attribute] |
| // Comment after an attribute. |
| None => 0, |
| #[rustfmt::skip] |
| Blurb => { } |
| }; |
| } |
| |
| // Test that a match on an overflow line is laid out properly. |
| fn main() { |
| let sub_span = |
| match xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx { |
| Some(sub_span) => Some(sub_span), |
| None => sub_span, |
| }; |
| } |
| |
| // Test that one-line bodies align. |
| fn main() { |
| match r { |
| Variableeeeeeeeeeeeeeeeee => ( |
| "variable", |
| vec!["id", "name", "qualname", "value", "type", "scopeid"], |
| true, |
| true, |
| ), |
| Enummmmmmmmmmmmmmmmmmmmm => ( |
| "enum", |
| vec!["id", "qualname", "scopeid", "value"], |
| true, |
| true, |
| ), |
| Variantttttttttttttttttttttttt => ( |
| "variant", |
| vec!["id", "name", "qualname", "type", "value", "scopeid"], |
| true, |
| true, |
| ), |
| }; |
| |
| match x { |
| y => { /*Block with comment. Preserve me.*/ } |
| z => { |
| stmt(); |
| } |
| } |
| } |
| |
| fn matches() { |
| match 1 { |
| -1 => 10, |
| 1 => 1, // foo |
| 2 => 2, |
| // bar |
| 3 => 3, |
| _ => 0, // baz |
| } |
| } |
| |
| fn match_skip() { |
| let _ = match Some(1) { |
| #[rustfmt::skip] |
| Some( n ) => n, |
| None => 1, |
| }; |
| } |
| |
| fn issue339() { |
| match a { |
| b => {} |
| c => {} |
| d => {} |
| e => {} |
| // collapsing here is safe |
| ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff => {} |
| // collapsing here exceeds line length |
| ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffg => { |
| } |
| h => { // comment above block |
| } |
| i => {} // comment below block |
| j => { |
| // comment inside block |
| } |
| j2 => { |
| // comments inside... |
| } // ... and after |
| // TODO uncomment when vertical whitespace is handled better |
| // k => { |
| // |
| // // comment with WS above |
| // } |
| // l => { |
| // // comment with ws below |
| // |
| // } |
| m => {} |
| n => {} |
| o => {} |
| p => { // Don't collapse me |
| } |
| q => {} |
| r => {} |
| s => 0, // s comment |
| // t comment |
| t => 1, |
| u => 2, |
| v => {} /* funky block |
| * comment */ |
| /* final comment */ |
| } |
| } |
| |
| fn issue355() { |
| match mac { |
| a => println!("a", b), |
| b => vec![1, 2], |
| c => vec![3; 4], |
| d => { |
| println!("a", b) |
| } |
| e => { |
| vec![1, 2] |
| } |
| f => { |
| vec![3; 4] |
| } |
| h => println!("a", b), // h comment |
| i => vec![1, 2], // i comment |
| j => vec![3; 4], // j comment |
| // k comment |
| k => println!("a", b), |
| // l comment |
| l => vec![1, 2], |
| // m comment |
| m => vec![3; 4], |
| // Rewrite splits macro |
| nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn => { |
| println!("a", b) |
| } |
| // Rewrite splits macro |
| oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo => { |
| vec![1, 2] |
| } |
| // Macro support fails to recognise this macro as splittable |
| // We push the whole expr to a new line, TODO split this macro as well |
| pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp => { |
| vec![3; 4] |
| } |
| // q, r and s: Rewrite splits match arm |
| qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq => { |
| println!("a", b) |
| } |
| rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr => { |
| vec![1, 2] |
| } |
| ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss => { |
| vec![3; 4] |
| } |
| // Funky bracketing styles |
| t => println! {"a", b}, |
| u => vec![1, 2], |
| v => vec![3; 4], |
| w => println!["a", b], |
| x => vec![1, 2], |
| y => vec![3; 4], |
| // Brackets with comments |
| tc => println! {"a", b}, // comment |
| uc => vec![1, 2], // comment |
| vc => vec![3; 4], // comment |
| wc => println!["a", b], // comment |
| xc => vec![1, 2], // comment |
| yc => vec![3; 4], // comment |
| yd => looooooooooooooooooooooooooooooooooooooooooooooooooooooooong_func( |
| aaaaaaaaaa, bbbbbbbbbb, cccccccccc, dddddddddd, |
| ), |
| } |
| } |
| |
| fn issue280() { |
| { |
| match x { |
| CompressionMode::DiscardNewline | CompressionMode::CompressWhitespaceNewline => { |
| ch == '\n' |
| } |
| ast::ItemConst(ref typ, ref expr) => { |
| self.process_static_or_const_item(item, &typ, &expr) |
| } |
| } |
| } |
| } |
| |
| fn issue383() { |
| match resolution.last_private { |
| LastImport { .. } => false, |
| _ => true, |
| }; |
| } |
| |
| fn issue507() { |
| match 1 { |
| 1 => unsafe { std::intrinsics::abort() }, |
| _ => (), |
| } |
| } |
| |
| fn issue508() { |
| match s.type_id() { |
| Some(NodeTypeId::Element(ElementTypeId::HTMLElement( |
| HTMLElementTypeId::HTMLCanvasElement, |
| ))) => true, |
| Some(NodeTypeId::Element(ElementTypeId::HTMLElement( |
| HTMLElementTypeId::HTMLObjectElement, |
| ))) => s.has_object_data(), |
| Some(NodeTypeId::Element(_)) => false, |
| } |
| } |
| |
| fn issue496() { |
| { |
| { |
| { |
| match def { |
| def::DefConst(def_id) | def::DefAssociatedConst(def_id) => { |
| match const_eval::lookup_const_by_id(cx.tcx, def_id, Some(self.pat.id)) { |
| Some(const_expr) => x, |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| fn issue494() { |
| { |
| match stmt.node { |
| hir::StmtExpr(ref expr, id) | hir::StmtSemi(ref expr, id) => { |
| result.push(StmtRef::Mirror(Box::new(Stmt { |
| span: stmt.span, |
| kind: StmtKind::Expr { |
| scope: cx.tcx.region_maps.node_extent(id), |
| expr: expr.to_ref(), |
| }, |
| }))) |
| } |
| } |
| } |
| } |
| |
| fn issue386() { |
| match foo { |
| BiEq | BiLt | BiLe | BiNe | BiGt | BiGe => true, |
| BiAnd | BiOr | BiAdd | BiSub | BiMul | BiDiv | BiRem | BiBitXor | BiBitAnd | BiBitOr |
| | BiShl | BiShr => false, |
| } |
| } |
| |
| fn guards() { |
| match foo { |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| if foooooooooooooo && barrrrrrrrrrrr => {} |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| if foooooooooooooo && barrrrrrrrrrrr => {} |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| if fooooooooooooooooooooo |
| && (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb |
| || cccccccccccccccccccccccccccccccccccccccc) => {} |
| } |
| } |
| |
| fn issue1371() { |
| Some(match type_ { |
| sfEvtClosed => Closed, |
| sfEvtResized => { |
| let e = unsafe { *event.size.as_ref() }; |
| |
| Resized { |
| width: e.width, |
| height: e.height, |
| } |
| } |
| sfEvtLostFocus => LostFocus, |
| sfEvtGainedFocus => GainedFocus, |
| sfEvtTextEntered => TextEntered { |
| unicode: unsafe { |
| ::std::char::from_u32((*event.text.as_ref()).unicode) |
| .expect("Invalid unicode encountered on TextEntered event") |
| }, |
| }, |
| sfEvtKeyPressed => { |
| let e = unsafe { event.key.as_ref() }; |
| |
| KeyPressed { |
| code: unsafe { ::std::mem::transmute(e.code) }, |
| alt: e.alt.to_bool(), |
| ctrl: e.control.to_bool(), |
| shift: e.shift.to_bool(), |
| system: e.system.to_bool(), |
| } |
| } |
| sfEvtKeyReleased => { |
| let e = unsafe { event.key.as_ref() }; |
| |
| KeyReleased { |
| code: unsafe { ::std::mem::transmute(e.code) }, |
| alt: e.alt.to_bool(), |
| ctrl: e.control.to_bool(), |
| shift: e.shift.to_bool(), |
| system: e.system.to_bool(), |
| } |
| } |
| }) |
| } |
| |
| fn issue1395() { |
| let bar = Some(true); |
| let foo = Some(true); |
| let mut x = false; |
| bar.and_then(|_| match foo { |
| None => None, |
| Some(b) => { |
| x = true; |
| Some(b) |
| } |
| }); |
| } |
| |
| fn issue1456() { |
| Ok(Recording { |
| artists: match reader.evaluate(".//mb:recording/mb:artist-credit/mb:name-credit")? { |
| Nodeset(nodeset) => { |
| let res: Result<Vec<ArtistRef>, ReadError> = nodeset |
| .iter() |
| .map(|node| { |
| XPathNodeReader::new(node, &context).and_then(|r| ArtistRef::from_xml(&r)) |
| }) |
| .collect(); |
| res? |
| } |
| _ => Vec::new(), |
| }, |
| }) |
| } |
| |
| fn issue1460() { |
| let _ = match foo { |
| REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT => { |
| "internal_spec_insert_internal_spec_insert_internal_spec_insert" |
| } |
| _ => "reorder_something", |
| }; |
| } |
| |
| fn issue525() { |
| foobar( |
| f, |
| "{}", |
| match *self { |
| TaskState::Started => "started", |
| TaskState::Success => "success", |
| TaskState::Failed => "failed", |
| }, |
| ); |
| } |
| |
| // #1838, #1839 |
| fn match_with_near_max_width() { |
| let (this_line_uses_99_characters_and_is_formatted_properly, x012345) = match some_expression { |
| _ => unimplemented!(), |
| }; |
| |
| let (should_be_formatted_like_the_line_above_using_100_characters, x0) = match some_expression { |
| _ => unimplemented!(), |
| }; |
| |
| let (should_put_the_brace_on_the_next_line_using_101_characters, x0000) = match some_expression |
| { |
| _ => unimplemented!(), |
| }; |
| match m { |
| Variant::Tag |
| | Variant::Tag2 |
| | Variant::Tag3 |
| | Variant::Tag4 |
| | Variant::Tag5 |
| | Variant::Tag6 => {} |
| } |
| } |
| |
| fn match_with_trailing_spaces() { |
| match x { |
| Some(..) => 0, |
| None => 1, |
| } |
| } |
| |
| fn issue_2099() { |
| let a = match x {}; |
| let b = match x {}; |
| |
| match x {} |
| } |
| |
| // #2021 |
| impl<'tcx> Const<'tcx> { |
| pub fn from_constval<'a>() -> Const<'tcx> { |
| let val = match *cv { |
| ConstVal::Variant(_) | ConstVal::Aggregate(..) | ConstVal::Unevaluated(..) => bug!( |
| "MIR must not use `{:?}` (aggregates are expanded to MIR rvalues)", |
| cv |
| ), |
| }; |
| } |
| } |
| |
| // #2151 |
| fn issue_2151() { |
| match either { |
| x => {} |
| y => (), |
| } |
| } |
| |
| // #2152 |
| fn issue_2152() { |
| match m { |
| "aaaaaaaaaaaaa" | "bbbbbbbbbbbbb" | "cccccccccccccccccccccccccccccccccccccccccccc" |
| if true => {} |
| "bind" | "writev" | "readv" | "sendmsg" | "recvmsg" if android && (aarch64 || x86_64) => { |
| true |
| } |
| } |
| } |
| |
| // #2376 |
| // Preserve block around expressions with condition. |
| fn issue_2376() { |
| let mut x = None; |
| match x { |
| Some(0) => { |
| for i in 1..11 { |
| x = Some(i); |
| } |
| } |
| Some(ref mut y) => { |
| while *y < 10 { |
| *y += 1; |
| } |
| } |
| None => { |
| while let None = x { |
| x = Some(10); |
| } |
| } |
| } |
| } |
| |
| // #2621 |
| // Strip leading `|` in match arm patterns |
| fn issue_2621() { |
| let x = Foo::A; |
| match x { |
| Foo::A => println!("No vert single condition"), |
| Foo::B | Foo::C => println!("Center vert two conditions"), |
| Foo::D => println!("Preceding vert single condition"), |
| Foo::E | Foo::F => println!("Preceding vert over two lines"), |
| Foo::G | Foo::H => println!("Trailing vert over two lines"), |
| // Comment on its own line |
| Foo::I => println!("With comment"), // Comment after line |
| } |
| } |
| |
| fn issue_2377() { |
| match tok { |
| Tok::Not |
| | Tok::BNot |
| | Tok::Plus |
| | Tok::Minus |
| | Tok::PlusPlus |
| | Tok::MinusMinus |
| | Tok::Void |
| | Tok::Delete |
| if prec <= 16 => |
| { |
| // code here... |
| } |
| Tok::TypeOf if prec <= 16 => {} |
| } |
| } |
| |
| // #3040 |
| fn issue_3040() { |
| { |
| match foo { |
| DevtoolScriptControlMsg::WantsLiveNotifications(id, to_send) => { |
| match documents.find_window(id) { |
| Some(window) => { |
| devtools::handle_wants_live_notifications(window.upcast(), to_send) |
| } |
| None => return warn!("Message sent to closed pipeline {}.", id), |
| } |
| } |
| } |
| } |
| } |
| |
| // #3030 |
| fn issue_3030() { |
| match input.trim().parse::<f64>() { |
| Ok(val) |
| if !( |
| // A valid number is the same as what rust considers to be valid, |
| // except for +1., NaN, and Infinity. |
| val.is_infinite() || val.is_nan() || input.ends_with(".") || input.starts_with("+") |
| ) => {} |
| } |
| } |
| |
| fn issue_3005() { |
| match *token { |
| Token::Dimension { |
| value, ref unit, .. |
| } if num_context.is_ok(context.parsing_mode, value) => { |
| return NoCalcLength::parse_dimension(context, value, unit) |
| .map(LengthOrPercentage::Length) |
| .map_err(|()| location.new_unexpected_token_error(token.clone())); |
| } |
| } |
| } |
| |
| // #3774 |
| fn issue_3774() { |
| { |
| { |
| { |
| match foo { |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => unreachab(), |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => unreacha!(), |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => { |
| unreachabl() |
| } |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => { |
| unreachae!() |
| } |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => { |
| unreachable() |
| } |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => { |
| unreachable!() |
| } |
| Lam(_, _, _) | Pi(_, _, _) | Let(_, _, _, _) | Embed(_) | Var(_) => { |
| rrunreachable!() |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| // #4109 |
| fn issue_4109() { |
| match () { |
| _ => { |
| #[cfg(debug_assertions)] |
| { |
| println!("Foo"); |
| } |
| } |
| } |
| |
| match () { |
| _ => { |
| #[allow(unsafe_code)] |
| unsafe {} |
| } |
| } |
| } |