Downgrade #[test]
on macro call to warning
Follow up to #92959. Address #94508.
This commit is contained in:
parent
32cbc7630b
commit
050d589991
@ -105,14 +105,18 @@ pub fn expand_test_or_bench(
|
|||||||
|
|
||||||
// Note: non-associated fn items are already handled by `expand_test_or_bench`
|
// Note: non-associated fn items are already handled by `expand_test_or_bench`
|
||||||
if !matches!(item.kind, ast::ItemKind::Fn(_)) {
|
if !matches!(item.kind, ast::ItemKind::Fn(_)) {
|
||||||
cx.sess
|
let diag = &cx.sess.parse_sess.span_diagnostic;
|
||||||
.parse_sess
|
let msg = "the `#[test]` attribute may only be used on a non-associated function";
|
||||||
.span_diagnostic
|
let mut err = match item.kind {
|
||||||
.struct_span_err(
|
// These were a warning before #92959 and need to continue being that to avoid breaking
|
||||||
attr_sp,
|
// stable user code (#94508).
|
||||||
"the `#[test]` attribute may only be used on a non-associated function",
|
ast::ItemKind::MacCall(_) => diag.struct_span_warn(attr_sp, msg),
|
||||||
)
|
// `.forget_guarantee()` needed to get these two arms to match types. Because of how
|
||||||
.note("the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions")
|
// locally close the `.emit()` call is I'm comfortable with it, but if it can be
|
||||||
|
// reworked in the future to not need it, it'd be nice.
|
||||||
|
_ => diag.struct_span_err(attr_sp, msg).forget_guarantee(),
|
||||||
|
};
|
||||||
|
err.span_label(attr_sp, "the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions")
|
||||||
.span_label(item.span, format!("expected a non-associated function, found {} {}", item.kind.article(), item.kind.descr()))
|
.span_label(item.span, format!("expected a non-associated function, found {} {}", item.kind.article(), item.kind.descr()))
|
||||||
.span_suggestion(attr_sp, "replace with conditional compilation to make the item only exist when tests are being run", String::from("#[cfg(test)]"), Applicability::MaybeIncorrect)
|
.span_suggestion(attr_sp, "replace with conditional compilation to make the item only exist when tests are being run", String::from("#[cfg(test)]"), Applicability::MaybeIncorrect)
|
||||||
.emit();
|
.emit();
|
||||||
|
@ -58,7 +58,7 @@ macro_rules! foo {
|
|||||||
() => {};
|
() => {};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test] //~ ERROR: the `#[test]` attribute may only be used on a non-associated function
|
#[test] //~ WARN: the `#[test]` attribute may only be used on a non-associated function
|
||||||
foo!();
|
foo!();
|
||||||
|
|
||||||
// make sure it doesn't erroneously trigger on a real test
|
// make sure it doesn't erroneously trigger on a real test
|
||||||
|
@ -2,11 +2,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:3:1
|
--> $DIR/test-on-not-fn.rs:3:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | mod test {}
|
LL | mod test {}
|
||||||
| ----------- expected a non-associated function, found a module
|
| ----------- expected a non-associated function, found a module
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -16,7 +15,7 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:6:1
|
--> $DIR/test-on-not-fn.rs:6:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | / mod loooooooooooooong_teeeeeeeeeest {
|
LL | / mod loooooooooooooong_teeeeeeeeeest {
|
||||||
LL | | /*
|
LL | | /*
|
||||||
LL | | this is a comment
|
LL | | this is a comment
|
||||||
@ -26,7 +25,6 @@ LL | | */
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_- expected a non-associated function, found a module
|
| |_- expected a non-associated function, found a module
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -36,11 +34,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:20:1
|
--> $DIR/test-on-not-fn.rs:20:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | extern "C" {}
|
LL | extern "C" {}
|
||||||
| ------------- expected a non-associated function, found an extern block
|
| ------------- expected a non-associated function, found an extern block
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -50,11 +47,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:23:1
|
--> $DIR/test-on-not-fn.rs:23:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | trait Foo {}
|
LL | trait Foo {}
|
||||||
| ------------ expected a non-associated function, found a trait
|
| ------------ expected a non-associated function, found a trait
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -64,11 +60,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:26:1
|
--> $DIR/test-on-not-fn.rs:26:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | impl Foo for i32 {}
|
LL | impl Foo for i32 {}
|
||||||
| ------------------- expected a non-associated function, found an implementation
|
| ------------------- expected a non-associated function, found an implementation
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -78,11 +73,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:29:1
|
--> $DIR/test-on-not-fn.rs:29:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | const FOO: i32 = -1_i32;
|
LL | const FOO: i32 = -1_i32;
|
||||||
| ------------------------ expected a non-associated function, found a constant item
|
| ------------------------ expected a non-associated function, found a constant item
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -92,11 +86,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:32:1
|
--> $DIR/test-on-not-fn.rs:32:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | static BAR: u64 = 10_000_u64;
|
LL | static BAR: u64 = 10_000_u64;
|
||||||
| ----------------------------- expected a non-associated function, found a static item
|
| ----------------------------- expected a non-associated function, found a static item
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -106,13 +99,12 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:35:1
|
--> $DIR/test-on-not-fn.rs:35:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | / enum MyUnit {
|
LL | / enum MyUnit {
|
||||||
LL | | Unit,
|
LL | | Unit,
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_- expected a non-associated function, found an enum
|
| |_- expected a non-associated function, found an enum
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -122,11 +114,10 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:40:1
|
--> $DIR/test-on-not-fn.rs:40:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | struct NewI32(i32);
|
LL | struct NewI32(i32);
|
||||||
| ------------------- expected a non-associated function, found a struct
|
| ------------------- expected a non-associated function, found a struct
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -136,14 +127,13 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:43:1
|
--> $DIR/test-on-not-fn.rs:43:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | / union Spooky {
|
LL | / union Spooky {
|
||||||
LL | | x: i32,
|
LL | | x: i32,
|
||||||
LL | | y: u32,
|
LL | | y: u32,
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_- expected a non-associated function, found a union
|
| |_- expected a non-associated function, found a union
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
@ -153,7 +143,7 @@ error: the `#[test]` attribute may only be used on a non-associated function
|
|||||||
--> $DIR/test-on-not-fn.rs:50:1
|
--> $DIR/test-on-not-fn.rs:50:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | #[derive(Copy, Clone, Debug)]
|
LL | #[derive(Copy, Clone, Debug)]
|
||||||
LL | / struct MoreAttrs {
|
LL | / struct MoreAttrs {
|
||||||
LL | | a: i32,
|
LL | | a: i32,
|
||||||
@ -161,25 +151,23 @@ LL | | b: u64,
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_- expected a non-associated function, found a struct
|
| |_- expected a non-associated function, found a struct
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: the `#[test]` attribute may only be used on a non-associated function
|
warning: the `#[test]` attribute may only be used on a non-associated function
|
||||||
--> $DIR/test-on-not-fn.rs:61:1
|
--> $DIR/test-on-not-fn.rs:61:1
|
||||||
|
|
|
|
||||||
LL | #[test]
|
LL | #[test]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
||||||
LL | foo!();
|
LL | foo!();
|
||||||
| ------- expected a non-associated function, found an item macro invocation
|
| ------- expected a non-associated function, found an item macro invocation
|
||||||
|
|
|
|
||||||
= note: the `#[test]` macro causes a a function to be run on a test and has no effect on non-functions
|
|
||||||
help: replace with conditional compilation to make the item only exist when tests are being run
|
help: replace with conditional compilation to make the item only exist when tests are being run
|
||||||
|
|
|
|
||||||
LL | #[cfg(test)]
|
LL | #[cfg(test)]
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: aborting due to 12 previous errors
|
error: aborting due to 11 previous errors; 1 warning emitted
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user