| // 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) => {} |
| Hi { friend } if let None = friend => {} |
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa if let Some(foooooooooooooo) = hiiiiiiiiiiiiiii => {} |
| aaaaaaaaaaaaaaaaa if let Superman { powers: Some(goteem), .. } = all::get_random_being::<Super>() => {} |
| } |
| } |
| |
| 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 {} |
| } |
| } |
| } |