rust/tests/target/macros.rs

975 lines
16 KiB
Rust
Raw Normal View History

// rustfmt-normalize_comments: true
2016-01-22 13:40:26 -06:00
itemmacro!(this, is.now().formatted(yay));
2015-09-14 15:53:30 -05:00
2017-06-11 23:01:41 -05:00
itemmacro!(
really,
long.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb()
.is
.formatted()
);
2016-01-24 13:11:18 -06:00
itemmacro!{this, is.bracket().formatted()}
peg_file! modname("mygrammarfile.rustpeg");
2015-09-14 15:53:30 -05:00
fn main() {
foo!();
foo!(,);
2015-09-14 15:53:30 -05:00
bar!(a, b, c);
bar!(a, b, c,);
2015-09-14 15:53:30 -05:00
baz!(1 + 2 + 3, quux.kaas());
2017-06-11 23:01:41 -05:00
quux!(
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
);
2015-09-14 15:53:30 -05:00
2017-06-11 23:01:41 -05:00
kaas!(
2018-01-25 07:30:23 -06:00
// comments
a, // post macro
b // another
2017-06-11 23:01:41 -05:00
);
2015-09-14 15:53:30 -05:00
trailingcomma!(a, b, c,);
2017-10-27 02:35:40 -05:00
// Preserve trailing comma only when necessary.
ok!(file.seek(SeekFrom::Start(
table.map(|table| fixture.offset(table)).unwrap_or(0),
)));
2015-09-14 15:53:30 -05:00
noexpr!( i am not an expression, OK? );
vec![a, b, c];
2017-06-11 23:01:41 -05:00
vec![
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
AAAAAA,
BBBBB,
5,
100 - 30,
1.33,
b,
b,
b,
];
2015-09-14 15:53:30 -05:00
vec![a /* comment */];
// Trailing spaces after a comma
vec![a];
2017-05-19 05:25:53 -05:00
vec![a; b];
vec![a; b];
vec![a; b];
vec![a, b; c];
vec![a; b, c];
2017-06-14 06:39:07 -05:00
vec![
a;
(|x| {
2017-07-19 10:35:00 -05:00
let y = x + 1;
let z = y + 1;
z
})(2)
2017-06-14 06:39:07 -05:00
];
vec![
a;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
];
2017-05-21 18:50:46 -05:00
vec![a; unsafe { x + 1 }];
unknown_bracket_macro__comma_should_not_be_stripped![a,];
2015-09-14 15:53:30 -05:00
foo(makro!(1, 3));
hamkaas!{ () };
macrowithbraces! {dont, format, me}
x!(fn);
some_macro!();
some_macro![];
some_macro!{
// comment
};
some_macro!{
// comment
};
some_macro!(
// comment
not function like
);
// #1712
let image = gray_image!(
00, 01, 02;
10, 11, 12;
20, 21, 22);
// #1092
2017-12-04 17:44:26 -06:00
chain!(input, a: take!(max_size), || []);
2018-05-23 10:13:56 -05:00
// #2727
foo!("bar");
}
impl X {
empty_invoc!{}
2015-09-14 15:53:30 -05:00
}
fn issue_1279() {
println!("dsfs"); // a comment
}
fn issue_1555() {
let hello = &format!(
"HTTP/1.1 200 OK\r\nServer: {}\r\n\r\n{}",
2017-11-30 22:30:21 -06:00
"65454654654654654654654655464", "4"
);
}
2017-05-27 21:41:16 -05:00
fn issue1178() {
macro_rules! foo {
2018-03-22 02:09:21 -05:00
(#[$attr:meta] $name:ident) => {};
2017-05-27 21:41:16 -05:00
}
2017-08-11 03:54:20 -05:00
foo!(
#[doc = "bar"]
baz
);
2017-05-27 21:41:16 -05:00
}
fn issue1739() {
sql_function!(
add_rss_item,
add_rss_item_t,
(
a: types::Integer,
b: types::Timestamptz,
c: types::Text,
d: types::Text,
e: types::Text
)
);
w.slice_mut(s![
..,
init_size[1] - extreeeeeeeeeeeeeeeeeeeeeeeem..init_size[1],
..
]).par_map_inplace(|el| *el = 0.);
}
fn issue_1885() {
let threads = people
.into_iter()
.map(|name| {
chan_select! {
rx.recv() => {}
}
})
.collect::<Vec<_>>();
}
fn issue_1917() {
mod x {
quickcheck! {
fn test(a: String, s: String, b: String) -> TestResult {
if a.find(&s).is_none() {
TestResult::from_bool(true)
} else {
TestResult::discard()
}
}
}
}
}
2017-08-26 23:44:49 -05:00
fn issue_1921() {
// Macro with tabs.
lazy_static! {
static ref ONE: u32 = 1;
static ref TWO: u32 = 2;
static ref THREE: u32 = 3;
static ref FOUR: u32 = {
let mut acc = 1;
acc += 1;
acc += 2;
acc
2018-02-23 10:04:54 -06:00
};
2017-08-26 23:44:49 -05:00
}
}
// #1577
fn issue1577() {
let json = json!({
"foo": "bar",
});
}
gfx_pipeline!(pipe {
vbuf: gfx::VertexBuffer<Vertex> = (),
out: gfx::RenderTarget<ColorFormat> = "Target0",
});
2017-08-29 22:00:10 -05:00
// #1919
#[test]
fn __bindgen_test_layout_HandleWithDtor_open0_int_close0_instantiation() {
assert_eq!(
::std::mem::size_of::<HandleWithDtor<::std::os::raw::c_int>>(),
8usize,
concat!(
"Size of template specialization: ",
stringify!(HandleWithDtor<::std::os::raw::c_int>)
)
);
assert_eq!(
::std::mem::align_of::<HandleWithDtor<::std::os::raw::c_int>>(),
8usize,
concat!(
"Alignment of template specialization: ",
stringify!(HandleWithDtor<::std::os::raw::c_int>)
)
);
}
2017-10-05 05:44:45 -05:00
// #878
macro_rules! try_opt {
2018-03-22 02:09:21 -05:00
($expr:expr) => {
2018-01-24 13:25:57 -06:00
match $expr {
Some(val) => val,
2017-10-05 05:44:45 -05:00
2018-01-24 13:25:57 -06:00
None => {
return None;
}
}
};
2017-10-05 05:44:45 -05:00
}
2017-11-30 07:12:55 -06:00
// #2214
// macro call whose argument is an array with trailing comma.
fn issue2214() {
make_test!(
str_searcher_ascii_haystack,
"bb",
"abbcbbd",
[
Reject(0, 1),
Match(1, 3),
Reject(3, 4),
Match(4, 6),
Reject(6, 7),
]
);
}
fn special_case_macros() {
let p = eprint!();
let q = eprint!("{}", 1);
let r = eprint!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = eprint!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = eprintln!("{}", 1);
let r = eprintln!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = eprintln!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = format!("{}", 1);
let r = format!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = format!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = format_args!("{}", 1);
let r = format_args!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = format_args!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = print!("{}", 1);
let r = print!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = print!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = println!("{}", 1);
let r = println!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = println!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
let q = unreachable!("{}", 1);
let r = unreachable!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
let s = unreachable!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
debug!("{}", 1);
debug!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
debug!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
error!("{}", 1);
error!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
error!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
info!("{}", 1);
info!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
info!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
panic!("{}", 1);
panic!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
panic!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
warn!("{}", 1);
warn!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
);
warn!(
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
assert!();
assert!(result == 42);
assert!(result == 42, "Ahoy there, {}!", target);
assert!(
result == 42,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result,
input,
expected
);
assert!(
result == 42,
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
assert_eq!();
assert_eq!(left);
assert_eq!(left, right);
assert_eq!(left, right, "Ahoy there, {}!", target);
assert_eq!(
left, right,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result, input, expected
);
assert_eq!(
first_realllllllllllly_long_variable_that_doesnt_fit_one_one_line,
second_reallllllllllly_long_variable_that_doesnt_fit_one_one_line,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result,
input,
expected
);
assert_eq!(
left + 42,
right,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result,
input,
expected
);
assert_eq!(
left,
right,
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
write!(&mut s, "Ahoy there, {}!", target);
write!(
&mut s,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result, input, expected
);
write!(
&mut s,
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
writeln!(&mut s, "Ahoy there, {}!", target);
writeln!(
&mut s,
"Arr! While plunderin' the hold, we got '{}' when given '{}' (we expected '{}')",
result, input, expected
);
writeln!(
&mut s,
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26
);
}
2017-12-04 17:41:10 -06:00
// #1209
impl Foo {
/// foo
pub fn foo(&self) -> Bar<foo!()> {}
}
// #819
fn macro_in_pattern_position() {
let x = match y {
foo!() => (),
bar!(a, b, c) => (),
bar!(a, b, c,) => (),
baz!(1 + 2 + 3, quux.kaas()) => (),
quux!(
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
) => (),
};
}
2018-01-01 00:51:30 -06:00
2018-01-25 08:12:18 -06:00
macro foo() {}
2018-01-01 00:51:30 -06:00
2018-03-22 02:09:21 -05:00
pub macro bar($x:ident + $y:expr;) {
fn foo($x: Foo) {
long_function(
a_long_argument_to_a_long_function_is_what_this_is(AAAAAAAAAAAAAAAAAAAAAAAAAAAA),
$x.bar($y),
);
2018-01-01 00:51:30 -06:00
}
}
macro foo() {
// a comment
fn foo() {
// another comment
bar();
}
}
2018-02-03 17:52:50 -06:00
2018-03-31 10:54:44 -05:00
// #2574
macro_rules! test {
() => {{}};
}
2018-02-03 17:52:50 -06:00
macro lex_err($kind: ident $(, $body: expr)*) {
Err(QlError::LexError(LexError::$kind($($body,)*)))
}
2018-02-23 20:48:07 -06:00
// Preserve trailing comma on item-level macro with `()` or `[]`.
methods![get, post, delete,];
methods!(get, post, delete,);
2018-04-02 08:52:39 -05:00
// #2588
macro_rules! m {
() => {
r#"
test
"#
};
}
fn foo() {
f!{r#"
test
"#};
}
// #2591
fn foo() {
match 0u32 {
0 => (),
_ => unreachable!(/* obviously */),
}
}
fn foo() {
let _ = column!(/* here */);
}
// #2616
// Preserve trailing comma when using mixed layout for macro call.
fn foo() {
foo!(
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
);
foo!(
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
);
}
2018-04-28 01:09:36 -05:00
// #2652
// Preserve trailing comma inside macro, even if it looks an array.
macro_rules! bar {
($m:ident) => {
$m!([a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]);
};
}