mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Changes from code review
This commit is contained in:
parent
5fabdb8f7f
commit
9473e21955
@ -1,5 +1,10 @@
|
|||||||
A `#[no_coverage]` attribute was incorrectly placed on something that couldn't
|
A `#[no_coverage]` attribute was applied to something which does not show up
|
||||||
be covered.
|
in code coverage, or is too granular to be excluded from the coverage report.
|
||||||
|
|
||||||
|
For now, this attribute can only be applied to function, method, and closure
|
||||||
|
definitions. In the future, it may be added to statements, blocks, and
|
||||||
|
expressions, and for the time being, using this attribute in those places
|
||||||
|
will just emit an `unused_attributes` lint instead of this error.
|
||||||
|
|
||||||
Example of erroneous code:
|
Example of erroneous code:
|
||||||
|
|
||||||
|
@ -317,14 +317,15 @@ impl CheckAttrVisitor<'_> {
|
|||||||
|
|
||||||
Target::Mod | Target::ForeignMod | Target::Impl | Target::Trait => {
|
Target::Mod | Target::ForeignMod | Target::Impl | Target::Trait => {
|
||||||
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
|
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
|
||||||
lint.build("`#[no_coverage]` cannot be done recursively and must be applied to functions directly").emit();
|
lint.build("`#[no_coverage]` does not propagate into items and must be applied to the contained functions directly").emit();
|
||||||
});
|
});
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
Target::Expression | Target::Statement | Target::Arm => {
|
Target::Expression | Target::Statement | Target::Arm => {
|
||||||
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
|
self.tcx.struct_span_lint_hir(UNUSED_ATTRIBUTES, hir_id, attr.span, |lint| {
|
||||||
lint.build("`#[no_coverage]` can only be applied at the function level, not on code directly").emit();
|
lint.build("`#[no_coverage]` may only be applied to function definitions")
|
||||||
|
.emit();
|
||||||
});
|
});
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,11 @@
|
|||||||
#![feature(no_coverage)]
|
#![feature(no_coverage)]
|
||||||
#![feature(type_alias_impl_trait)]
|
#![feature(type_alias_impl_trait)]
|
||||||
#![warn(unused_attributes)]
|
#![warn(unused_attributes)]
|
||||||
|
#![no_coverage]
|
||||||
|
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
|
|
||||||
|
#[no_coverage]
|
||||||
|
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
trait Trait {
|
trait Trait {
|
||||||
#[no_coverage] //~ ERROR `#[no_coverage]` must be applied to coverable code
|
#[no_coverage] //~ ERROR `#[no_coverage]` must be applied to coverable code
|
||||||
const X: u32;
|
const X: u32;
|
||||||
@ -13,6 +17,8 @@ trait Trait {
|
|||||||
type U;
|
type U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_coverage]
|
||||||
|
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
impl Trait for () {
|
impl Trait for () {
|
||||||
const X: u32 = 0;
|
const X: u32 = 0;
|
||||||
|
|
||||||
@ -33,14 +39,17 @@ extern "C" {
|
|||||||
|
|
||||||
#[no_coverage]
|
#[no_coverage]
|
||||||
fn main() {
|
fn main() {
|
||||||
#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
|
#[no_coverage]
|
||||||
|
//~^ WARN `#[no_coverage]` may only be applied to function definitions
|
||||||
let _ = ();
|
let _ = ();
|
||||||
|
|
||||||
match () {
|
match () {
|
||||||
#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
|
#[no_coverage]
|
||||||
|
//~^ WARN `#[no_coverage]` may only be applied to function definitions
|
||||||
() => (),
|
() => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_coverage] //~ WARN `#[no_coverage]` can only be applied at the function level, not on code directly
|
#[no_coverage]
|
||||||
|
//~^ WARN `#[no_coverage]` may only be applied to function definitions
|
||||||
return ();
|
return ();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
|
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
--> $DIR/no-coverage.rs:36:5
|
--> $DIR/no-coverage.rs:8:1
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: the lint level is defined here
|
note: the lint level is defined here
|
||||||
--> $DIR/no-coverage.rs:4:9
|
--> $DIR/no-coverage.rs:4:9
|
||||||
@ -10,20 +10,32 @@ note: the lint level is defined here
|
|||||||
LL | #![warn(unused_attributes)]
|
LL | #![warn(unused_attributes)]
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
|
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
--> $DIR/no-coverage.rs:40:9
|
--> $DIR/no-coverage.rs:20:1
|
||||||
|
|
|
||||||
|
LL | #[no_coverage]
|
||||||
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: `#[no_coverage]` may only be applied to function definitions
|
||||||
|
--> $DIR/no-coverage.rs:42:5
|
||||||
|
|
|
||||||
|
LL | #[no_coverage]
|
||||||
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
warning: `#[no_coverage]` may only be applied to function definitions
|
||||||
|
--> $DIR/no-coverage.rs:47:9
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
|
warning: `#[no_coverage]` may only be applied to function definitions
|
||||||
--> $DIR/no-coverage.rs:44:5
|
--> $DIR/no-coverage.rs:52:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:7:5
|
--> $DIR/no-coverage.rs:11:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
@ -31,7 +43,7 @@ LL | const X: u32;
|
|||||||
| ------------- not coverable code
|
| ------------- not coverable code
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:10:5
|
--> $DIR/no-coverage.rs:14:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
@ -39,7 +51,7 @@ LL | type T;
|
|||||||
| ------- not coverable code
|
| ------- not coverable code
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:19:5
|
--> $DIR/no-coverage.rs:25:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
@ -47,7 +59,7 @@ LL | type T = Self;
|
|||||||
| -------------- not coverable code
|
| -------------- not coverable code
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:22:5
|
--> $DIR/no-coverage.rs:28:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
@ -55,7 +67,7 @@ LL | type U = impl Trait;
|
|||||||
| -------------------- not coverable code
|
| -------------------- not coverable code
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:27:5
|
--> $DIR/no-coverage.rs:33:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
@ -63,21 +75,27 @@ LL | static X: u32;
|
|||||||
| -------------- not coverable code
|
| -------------- not coverable code
|
||||||
|
|
||||||
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
error[E0788]: `#[no_coverage]` must be applied to coverable code
|
||||||
--> $DIR/no-coverage.rs:30:5
|
--> $DIR/no-coverage.rs:36:5
|
||||||
|
|
|
|
||||||
LL | #[no_coverage]
|
LL | #[no_coverage]
|
||||||
| ^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^
|
||||||
LL | type T;
|
LL | type T;
|
||||||
| ------- not coverable code
|
| ------- not coverable code
|
||||||
|
|
||||||
|
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
|
||||||
|
--> $DIR/no-coverage.rs:5:1
|
||||||
|
|
|
||||||
|
LL | #![no_coverage]
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: unconstrained opaque type
|
error: unconstrained opaque type
|
||||||
--> $DIR/no-coverage.rs:23:14
|
--> $DIR/no-coverage.rs:29:14
|
||||||
|
|
|
|
||||||
LL | type U = impl Trait;
|
LL | type U = impl Trait;
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `U` must be used in combination with a concrete type within the same module
|
= note: `U` must be used in combination with a concrete type within the same module
|
||||||
|
|
||||||
error: aborting due to 7 previous errors; 3 warnings emitted
|
error: aborting due to 7 previous errors; 6 warnings emitted
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0788`.
|
For more information about this error, try `rustc --explain E0788`.
|
||||||
|
Loading…
Reference in New Issue
Block a user