summaryrefslogtreecommitdiffstats
path: root/src/tools/rustfmt/tests/target/expr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rustfmt/tests/target/expr.rs')
-rw-r--r--src/tools/rustfmt/tests/target/expr.rs671
1 files changed, 671 insertions, 0 deletions
diff --git a/src/tools/rustfmt/tests/target/expr.rs b/src/tools/rustfmt/tests/target/expr.rs
new file mode 100644
index 000000000..84df802bc
--- /dev/null
+++ b/src/tools/rustfmt/tests/target/expr.rs
@@ -0,0 +1,671 @@
+// rustfmt-normalize_comments: true
+// rustfmt-wrap_comments: true
+// Test expressions
+
+fn foo() -> bool {
+ let boxed: Box<i32> = box 5;
+ let referenced = &5;
+
+ let very_long_variable_name = (a + first + simple + test);
+ let very_long_variable_name =
+ (a + first + simple + test + AAAAAAAAAAAAA + BBBBBBBBBBBBBBBBB + b + c);
+
+ let is_internalxxxx =
+ self.source_map.span_to_filename(s) == self.source_map.span_to_filename(m.inner);
+
+ let some_val = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa * bbbb
+ / (bbbbbb - function_call(x, *very_long_pointer, y))
+ + 1000;
+
+ some_ridiculously_loooooooooooooooooooooong_function(
+ 10000 * 30000000000 + 40000 / 1002200000000 - 50000 * sqrt(-1),
+ trivial_value,
+ );
+ (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + a
+ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + aaaaa);
+
+ {
+ for _ in 0..10 {}
+ }
+
+ {
+ {
+ {
+ {}
+ }
+ }
+ }
+
+ if 1 + 2 > 0 {
+ let result = 5;
+ result
+ } else {
+ 4
+ };
+
+ if let Some(x) = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa {
+ // Nothing
+ }
+
+ if let Some(x) =
+ (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
+ {}
+
+ if let (
+ some_very_large,
+ tuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuple,
+ ) = 1 + 2 + 3
+ {}
+
+ if let (
+ some_very_large,
+ tuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuple,
+ ) = 1111 + 2222
+ {}
+
+ if let (
+ some_very_large,
+ tuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuple,
+ ) = 1 + 2 + 3
+ {}
+
+ if let ast::ItemKind::Trait(_, unsafety, ref generics, ref type_param_bounds, ref trait_items) =
+ item.node
+ {
+ // nothing
+ }
+
+ let test = if true { 5 } else { 3 };
+
+ if cond() {
+ something();
+ } else if different_cond() {
+ something_else();
+ } else {
+ // Check subformatting
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ }
+
+ // #2884
+ let _ = [0; {
+ struct Foo;
+ impl Foo {
+ const fn get(&self) -> usize {
+ 5
+ }
+ };
+ Foo.get()
+ }];
+}
+
+fn bar() {
+ let range =
+ (111111111 + 333333333333333333 + 1111 + 400000000000000000)..(2222 + 2333333333333333);
+
+ let another_range = 5..some_func(a, b /* comment */);
+
+ for _ in 1.. {
+ call_forever();
+ }
+
+ syntactically_correct(
+ loop {
+ sup('?');
+ },
+ if cond { 0 } else { 1 },
+ );
+
+ let third = ..10;
+ let infi_range = ..;
+ let foo = 1..;
+ let bar = 5;
+ let nonsense = (10..0)..(0..10);
+
+ loop {
+ if true {
+ break;
+ }
+ }
+
+ let x = (
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
+ a,
+ );
+}
+
+fn baz() {
+ unsafe /* {}{}{}{{{{}} */ {
+ let foo = 1u32;
+ }
+
+ unsafe /* very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
+ * comment */ {
+ }
+
+ unsafe /* So this is a very long comment.
+ * Multi-line, too.
+ * Will it still format correctly? */ {
+ }
+
+ unsafe {
+ // Regular unsafe block
+ }
+
+ unsafe { foo() }
+
+ unsafe {
+ foo();
+ }
+
+ // #2289
+ let identifier_0 = unsafe { this_is_58_chars_long_and_line_is_93_chars_long_xxxxxxxxxx };
+ let identifier_1 = unsafe { this_is_59_chars_long_and_line_is_94_chars_long_xxxxxxxxxxx };
+ let identifier_2 = unsafe { this_is_65_chars_long_and_line_is_100_chars_long_xxxxxxxxxxxxxxxx };
+ let identifier_3 =
+ unsafe { this_is_66_chars_long_and_line_is_101_chars_long_xxxxxxxxxxxxxxxxx };
+}
+
+// Test some empty blocks.
+fn qux() {
+ {}
+ // FIXME this one could be done better.
+ { /* a block with a comment */ }
+ {}
+ {
+ // A block with a comment.
+ }
+}
+
+fn issue227() {
+ {
+ let handler =
+ box DocumentProgressHandler::new(addr, DocumentProgressTask::DOMContentLoaded);
+ }
+}
+
+fn issue184(source: &str) {
+ for c in source.chars() {
+ if index < 'a' {
+ continue;
+ }
+ }
+}
+
+fn arrays() {
+ let x = [
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 8, 9, 0, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 0,
+ ];
+
+ let y = [/* comment */ 1, 2 /* post comment */, 3];
+
+ let xy = [
+ strukt {
+ test123: value_one_two_three_four,
+ turbo: coolio(),
+ },
+ // comment
+ 1,
+ ];
+
+ let a = WeightedChoice::new(&mut [
+ Weighted {
+ weightweight: x,
+ item: 0,
+ },
+ Weighted {
+ weightweight: 1,
+ item: 1,
+ },
+ Weighted {
+ weightweight: x,
+ item: 2,
+ },
+ Weighted {
+ weightweight: 1,
+ item: 3,
+ },
+ ]);
+
+ let z = [
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ yyyyyyyyyyyyyyyyyyyyyyyyyyy,
+ zzzzzzzzzzzzzzzzzz,
+ q,
+ ];
+
+ [1 + 3, 4, 5, 6, 7, 7, fncall::<Vec<_>>(3 - 1)]
+}
+
+fn returns() {
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ && return;
+
+ return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
+}
+
+fn addrof() {
+ &mut (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);
+ &(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);
+
+ // raw reference operator
+ &raw const a;
+ &raw mut b;
+}
+
+fn casts() {
+ fn unpack(packed: u32) -> [u16; 2] {
+ [(packed >> 16) as u16, (packed >> 0) as u16]
+ }
+
+ let some_trait_xxx = xxxxxxxxxxx + xxxxxxxxxxxxx as SomeTraitXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;
+ let slightly_longer_trait =
+ yyyyyyyyy + yyyyyyyyyyy as SomeTraitYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY;
+}
+
+fn indices() {
+ let x = (aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc)
+ [x + y + z];
+ let y = (aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc)
+ [xxxxx + yyyyy + zzzzz];
+ let z = xxxxxxxxxx
+ .x()
+ .y()
+ .zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()[aaaaa];
+ let z = xxxxxxxxxx
+ .x()
+ .y()
+ .zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz()
+ [aaaaa];
+}
+
+fn repeats() {
+ let x = [aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc;
+ x + y + z];
+ let y = [aaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb + cccccccccccccccc;
+ xxxxx + yyyyy + zzzzz];
+}
+
+fn blocks() {
+ if 1 + 1 == 2 {
+ println!("yay arithmetix!");
+ };
+}
+
+fn issue767() {
+ if false {
+ if false {
+ } else {
+ // A let binding here seems necessary to trigger it.
+ let _ = ();
+ }
+ } else if let false = false {
+ }
+}
+
+fn ranges() {
+ let x = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
+ let y =
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;
+ let z = ..=x;
+
+ // #1766
+ let x = [0. ..10.0];
+ let x = [0. ..=10.0];
+
+ a..=b
+
+ // the expr below won't compile because inclusive ranges need a defined end
+ // let a = 0 ..= ;
+}
+
+fn if_else() {
+ let exact = diff / (if size == 0 { 1 } else { size });
+
+ let cx = tp1.x + any * radius * if anticlockwise { 1.0 } else { -1.0 };
+}
+
+fn complex_if_else() {
+ if let Some(x) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {
+ } else if let Some(x) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {
+ ha();
+ } else if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxx {
+ yo();
+ } else if let Some(x) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ {
+ ha();
+ } else if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxx
+ {
+ yo();
+ }
+}
+
+fn issue1106() {
+ {
+ if let hir::ItemEnum(ref enum_def, ref generics) =
+ self.ast_map.expect_item(enum_node_id).node
+ {}
+ }
+
+ for entry in WalkDir::new(path)
+ .into_iter()
+ .filter_entry(|entry| exclusions.filter_entry(entry))
+ {}
+}
+
+fn issue1570() {
+ a_very_long_function_name({ some_func(1, { 1 }) })
+}
+
+fn issue1714() {
+ v = &mut { v }[mid..];
+ let (left, right) = { v }.split_at_mut(mid);
+}
+
+// Multi-lined index should be put on the next line if it fits in one line.
+fn issue1749() {
+ {
+ {
+ {
+ if self.shape[(r as f32 + self.x_offset) as usize]
+ [(c as f32 + self.y_offset) as usize]
+ != 0
+ {
+ // hello
+ }
+ }
+ }
+ }
+}
+
+// #1172
+fn newlines_between_list_like_expr() {
+ foo(
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
+ zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz,
+ );
+
+ vec![
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
+ yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
+ zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz,
+ ];
+
+ match x {
+ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ | yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+ | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz => foo(a, b, c),
+ _ => bar(),
+ };
+}
+
+fn issue2178() {
+ Ok(result
+ .iter()
+ .map(|item| ls_util::rls_to_location(item))
+ .collect())
+}
+
+// #2493
+impl Foo {
+ fn bar(&self) {
+ {
+ let x = match () {
+ () => {
+ let i;
+ i == self
+ .install_config
+ .storage
+ .experimental_compressed_block_size as usize
+ }
+ };
+ }
+ }
+}
+
+fn dots() {
+ .. .. ..; // (.. (.. (..)))
+ ..= ..= ..;
+ (..).. ..; // ((..) .. (..))
+}
+
+// #2676
+// A function call with a large single argument.
+fn foo() {
+ let my_var = Mutex::new(
+ RpcClientType::connect(server_iddd).chain_err(|| "Unable to create RPC client")?,
+ );
+}
+
+// #2704
+// Method call with prefix and suffix.
+fn issue2704() {
+ // We should not combine the callee with a multi-lined method call.
+ let requires = requires.set(
+ &requires0
+ .concat(&requires1)
+ .concat(&requires2)
+ .distinct_total(),
+ );
+ let requires = requires.set(
+ box requires0
+ .concat(&requires1)
+ .concat(&requires2)
+ .distinct_total(),
+ );
+ let requires = requires.set(
+ requires0
+ .concat(&requires1)
+ .concat(&requires2)
+ .distinct_total() as u32,
+ );
+ let requires = requires.set(
+ requires0
+ .concat(&requires1)
+ .concat(&requires2)
+ .distinct_total()?,
+ );
+ let requires = requires.set(
+ !requires0
+ .concat(&requires1)
+ .concat(&requires2)
+ .distinct_total(),
+ );
+ // We should combine a small callee with an argument.
+ bar(vec![22]
+ .into_iter()
+ .map(|x| x * 2)
+ .filter(|_| true)
+ .collect());
+ // But we should not combine a long callee with an argument.
+ barrrr(
+ vec![22]
+ .into_iter()
+ .map(|x| x * 2)
+ .filter(|_| true)
+ .collect(),
+ );
+}
+
+// #2782
+fn issue2782() {
+ {
+ let f = {
+ let f = {
+ {
+ match f {
+ F(f, _) => loop {
+ let f = {
+ match f {
+ F(f, _) => match f {
+ F(f, _) => loop {
+ let f = {
+ let f = {
+ match f {
+ '-' => F(f, ()),
+ }
+ };
+ };
+ },
+ },
+ }
+ };
+ },
+ }
+ }
+ };
+ };
+ }
+}
+
+fn issue_2802() {
+ function_to_fill_this_line(some_arg, some_arg, some_arg)
+ * a_very_specific_length(specific_length_arg)
+ * very_specific_length(Foo {
+ a: some_much_much_longer_value,
+ })
+ * some_value
+}
+
+fn issue_3003() {
+ let mut path: PathBuf = [
+ env!("CARGO_MANIFEST_DIR"),
+ "tests",
+ "support",
+ "dejavu-fonts-ttf-2.37",
+ "ttf",
+ ]
+ .iter()
+ .collect();
+}
+
+fn issue3226() {
+ {
+ {
+ {
+ return Err(
+ ErrorKind::ManagementInterfaceError("Server exited unexpectedly").into(),
+ );
+ }
+ }
+ }
+ {
+ {
+ {
+ break Err(
+ ErrorKind::ManagementInterfaceError("Server exited unexpectedlyy").into(),
+ );
+ }
+ }
+ }
+}
+
+// #3457
+fn issue3457() {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ {
+ println!("Test");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// #3498
+static REPRO: &[usize] = &[
+ #[cfg(feature = "zero")]
+ 0,
+];
+
+fn overflow_with_attr() {
+ foo(
+ #[cfg(feature = "zero")]
+ 0,
+ );
+ foobar(
+ #[cfg(feature = "zero")]
+ 0,
+ );
+ foobar(
+ x,
+ y,
+ #[cfg(feature = "zero")]
+ {},
+ );
+}
+
+// https://github.com/rust-lang/rustfmt/issues/3765
+fn foo() {
+ async {
+ // Do
+ // some
+ // work
+ }
+ .await;
+
+ async {
+ // Do
+ // some
+ // work
+ }
+ .await;
+}
+
+fn underscore() {
+ _ = 1;
+ _;
+ [_, a, _] = [1, 2, 3];
+ (a, _) = (8, 9);
+ TupleStruct(_, a) = TupleStruct(2, 2);
+
+ let _: usize = foo(_, _);
+}