| // 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 {} | |
| } | |
| } | |
| } |