rust/tests/target/match.rs

459 lines
12 KiB
Rust
Raw Normal View History

// rustfmt-normalize_comments: true
2015-08-14 03:00:22 -05:00
// Match expressions.
fn foo() {
// A match expression.
match x {
// Some comment.
a => foo(),
b if 0 < 42 => foo(),
2015-10-19 14:41:47 -05:00
c => {
// Another comment.
2015-08-14 03:00:22 -05:00
// Comment.
an_expression;
foo()
}
2015-11-20 14:05:10 -06:00
Foo(ref bar) => {
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
}
2015-08-14 03:00:22 -05:00
Pattern1 | Pattern2 | Pattern3 => false,
Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn |
Paternnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn => blah,
2015-08-14 03:00:22 -05:00
Patternnnnnnnnnnnnnnnnnnn |
Patternnnnnnnnnnnnnnnnnnn |
Patternnnnnnnnnnnnnnnnnnn |
Patternnnnnnnnnnnnnnnnnnn => meh,
2017-07-09 12:25:26 -05:00
Patternnnnnnnnnnnnnnnnnnn | Patternnnnnnnnnnnnnnnnnnn if looooooooooooooooooong_guard => {
2015-11-20 14:05:10 -06:00
meh
}
2015-08-16 16:41:45 -05:00
2017-07-09 12:25:26 -05:00
Patternnnnnnnnnnnnnnnnnnnnnnnnn | Patternnnnnnnnnnnnnnnnnnnnnnnnn
2017-07-19 10:01:38 -05:00
if looooooooooooooooooooooooooooooooooooooooong_guard =>
{
meh
}
2017-07-09 12:25:26 -05:00
2015-08-16 16:41:45 -05:00
// Test that earlier patterns can take the guard space
(aaaa, bbbbb, ccccccc, aaaaa, bbbbbbbb, cccccc, aaaa, bbbbbbbb, cccccc, dddddd) |
2015-08-16 16:41:45 -05:00
Patternnnnnnnnnnnnnnnnnnnnnnnnn if loooooooooooooooooooooooooooooooooooooooooong_guard => {}
2015-08-14 03:00:22 -05:00
_ => {}
2017-06-14 06:39:07 -05:00
ast::PathParameters::AngleBracketedParameters(ref data)
if data.lifetimes.len() > 0 || data.types.len() > 0 || data.bindings.len() > 0 => {}
2015-08-14 03:00:22 -05:00
}
let whatever = match something {
/// DOC COMMENT!
Some(_) => 42,
// Comment on an attribute.
2015-08-14 03:00:22 -05:00
#[an_attribute]
2015-08-16 16:41:45 -05:00
// Comment after an attribute.
2015-08-14 03:00:22 -05:00
None => 0,
2015-08-16 16:41:45 -05:00
#[rustfmt_skip]
Blurb => { }
2015-08-14 03:00:22 -05:00
};
}
// Test that a match on an overflow line is laid out properly.
fn main() {
let sub_span =
2015-09-09 16:15:37 -05:00
match xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {
Some(sub_span) => Some(sub_span),
None => sub_span,
};
}
// Test that one-line bodies align.
fn main() {
match r {
2017-06-11 23:01:41 -05:00
Variableeeeeeeeeeeeeeeeee => (
"variable",
vec!["id", "name", "qualname", "value", "type", "scopeid"],
true,
true,
),
Enummmmmmmmmmmmmmmmmmmmm => (
"enum",
vec!["id", "qualname", "scopeid", "value"],
true,
true,
),
Variantttttttttttttttttttttttt => (
"variant",
2017-06-16 04:56:38 -05:00
vec!["id", "name", "qualname", "type", "value", "scopeid"],
2017-06-11 23:01:41 -05:00
true,
true,
),
2015-11-14 14:59:04 -06:00
};
match x {
y => { /*Block with comment. Preserve me.*/ }
2015-11-14 14:59:04 -06:00
z => {
stmt();
}
}
}
fn matches() {
match 1 {
2015-10-17 08:56:53 -05:00
-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 => {
}
2015-10-19 14:41:47 -05:00
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 => {}
2015-10-19 14:41:47 -05:00
p => {
// Dont collapse me
}
q => {}
r => {}
s => 0, // s comment
// t comment
t => 1,
u => 2,
// TODO uncomment when block-support exists
// v => {
// } /* funky block
// * comment */
// final comment
}
}
fn issue355() {
match mac {
a => println!("a", b),
2015-10-16 15:54:32 -05:00
b => vec![1, 2],
2017-05-19 05:25:53 -05:00
c => vec![3; 4],
d => println!("a", b),
e => vec![1, 2],
2017-05-19 05:25:53 -05:00
f => vec![3; 4],
h => println!("a", b), // h comment
2015-10-16 15:54:32 -05:00
i => vec![1, 2], // i comment
2017-05-19 05:25:53 -05:00
j => vec![3; 4], // j comment
// k comment
k => println!("a", b),
// l comment
2015-10-16 15:54:32 -05:00
l => vec![1, 2],
// m comment
2017-05-19 05:25:53 -05:00
m => vec![3; 4],
// Rewrite splits macro
2015-11-20 14:05:10 -06:00
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn => {
println!("a", b)
}
// Rewrite splits macro
2015-11-20 14:05:10 -06:00
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo => {
vec![1, 2]
}
// Macro support fails to recognise this macro as splitable
// We push the whole expr to a new line, TODO split this macro as well
2015-11-20 14:05:10 -06:00
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp => {
2017-05-19 05:25:53 -05:00
vec![3; 4]
2015-11-20 14:05:10 -06:00
}
// q, r and s: Rewrite splits match arm
2015-11-20 14:05:10 -06:00
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq => {
println!("a", b)
}
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr => {
vec![1, 2]
}
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss => {
2017-05-19 05:25:53 -05:00
vec![3; 4]
2015-11-20 14:05:10 -06:00
}
// Funky bracketing styles
t => println!{"a", b},
2015-10-16 15:54:32 -05:00
u => vec![1, 2],
2017-05-19 05:25:53 -05:00
v => vec![3; 4],
w => println!["a", b],
x => vec![1, 2],
y => vec![3; 4],
// Brackets with comments
tc => println!{"a", b}, // comment
2015-10-16 15:54:32 -05:00
uc => vec![1, 2], // comment
2017-05-19 05:25:53 -05:00
vc => vec![3; 4], // comment
wc => println!["a", b], // comment
xc => vec![1, 2], // comment
yc => vec![3; 4], // comment
2017-07-11 07:53:48 -05:00
yd => looooooooooooooooooooooooooooooooooooooooooooooooooooooooong_func(
aaaaaaaaaa,
bbbbbbbbbb,
cccccccccc,
dddddddddd,
),
}
}
fn issue280() {
{
match x {
2017-07-09 12:25:26 -05:00
CompressionMode::DiscardNewline | CompressionMode::CompressWhitespaceNewline => {
ch == '\n'
}
2015-11-20 14:05:10 -06:00
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,
}
}
2015-10-23 14:20:43 -05:00
fn issue496() {
{
{
{
match def {
2017-07-09 12:25:26 -05:00
def::DefConst(def_id) | def::DefAssociatedConst(def_id) => {
2015-10-23 14:20:43 -05:00
match const_eval::lookup_const_by_id(cx.tcx, def_id, Some(self.pat.id)) {
Some(const_expr) => x,
2015-11-20 14:05:10 -06:00
}
}
2015-10-23 14:20:43 -05:00
}
}
}
}
}
fn issue494() {
{
match stmt.node {
2017-07-09 12:25:26 -05:00
hir::StmtExpr(ref expr, id) | hir::StmtSemi(ref expr, id) => {
2015-10-23 14:20:43 -05:00
result.push(StmtRef::Mirror(Box::new(Stmt {
2017-06-11 23:01:41 -05:00
span: stmt.span,
kind: StmtKind::Expr {
scope: cx.tcx.region_maps.node_extent(id),
expr: expr.to_ref(),
},
})))
2015-11-20 14:05:10 -06:00
}
2015-10-23 14:20:43 -05:00
}
}
}
fn issue386() {
match foo {
BiEq | BiLt | BiLe | BiNe | BiGt | BiGe => true,
2017-07-09 12:25:26 -05:00
BiAnd |
BiOr |
BiAdd |
BiSub |
BiMul |
BiDiv |
BiRem |
BiBitXor |
BiBitAnd |
BiBitOr |
BiShl |
BiShr => false,
}
}
fn guards() {
match foo {
2017-06-14 06:39:07 -05:00
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if foooooooooooooo && barrrrrrrrrrrr => {}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
2017-06-14 06:39:07 -05:00
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if foooooooooooooo && barrrrrrrrrrrr => {}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
if fooooooooooooooooooooo &&
2017-07-10 02:52:55 -05:00
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb ||
cccccccccccccccccccccccccccccccccccccccc) => {}
}
}
2017-04-18 20:14:27 -05:00
fn issue1371() {
Some(match type_ {
2017-06-11 23:01:41 -05:00
sfEvtClosed => Closed,
sfEvtResized => {
let e = unsafe { *event.size.as_ref() };
2017-04-18 20:14:27 -05:00
2017-06-11 23:01:41 -05:00
Resized {
width: e.width,
height: e.height,
}
}
sfEvtLostFocus => LostFocus,
sfEvtGainedFocus => GainedFocus,
2017-07-11 07:53:48 -05:00
sfEvtTextEntered => TextEntered {
unicode: unsafe {
::std::char::from_u32((*event.text.as_ref()).unicode)
.expect("Invalid unicode encountered on TextEntered event")
},
},
2017-06-11 23:01:41 -05:00
sfEvtKeyPressed => {
let e = unsafe { event.key.as_ref() };
2017-04-18 20:14:27 -05:00
2017-06-11 23:01:41 -05:00
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() };
2017-04-18 20:14:27 -05:00
2017-06-11 23:01:41 -05:00
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(),
}
}
})
2017-04-18 20:14:27 -05:00
}
fn issue1395() {
let bar = Some(true);
let foo = Some(true);
let mut x = false;
bar.and_then(|_| match foo {
2017-06-11 23:01:41 -05:00
None => None,
Some(b) => {
x = true;
Some(b)
}
});
2017-04-18 20:14:27 -05:00
}
fn issue1456() {
Ok(Recording {
artists: match reader.evaluate(".//mb:recording/mb:artist-credit/mb:name-credit")? {
2017-06-11 23:01:41 -05:00
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(),
},
})
2017-04-18 20:14:27 -05:00
}
2017-05-01 06:00:21 -05:00
fn issue1460() {
let _ = match foo {
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT => {
"internal_spec_insert_internal_spec_insert_internal_spec_insert"
}
_ => "reorder_something",
};
}
fn issue525() {
2017-06-11 23:01:41 -05:00
foobar(
f,
"{}",
match *self {
TaskState::Started => "started",
TaskState::Success => "success",
TaskState::Failed => "failed",
},
);
}
2017-07-31 02:24:18 -05:00
// #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 => {}
}
}
2017-08-05 01:24:20 -05:00
fn match_with_trailing_spaces() {
match x {
#![allow(simple_match)]
Some(..) => 0,
None => 1,
}
}