Changes from code review

This commit is contained in:
ltdk 2022-06-05 22:24:14 -04:00
parent 5fabdb8f7f
commit 9473e21955
4 changed files with 56 additions and 23 deletions

View File

@ -1,5 +1,10 @@
A `#[no_coverage]` attribute was incorrectly placed on something that couldn't
be covered.
A `#[no_coverage]` attribute was applied to something which does not show up
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:

View File

@ -317,14 +317,15 @@ impl CheckAttrVisitor<'_> {
Target::Mod | Target::ForeignMod | Target::Impl | Target::Trait => {
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
}
Target::Expression | Target::Statement | Target::Arm => {
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
}

View File

@ -2,7 +2,11 @@
#![feature(no_coverage)]
#![feature(type_alias_impl_trait)]
#![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 {
#[no_coverage] //~ ERROR `#[no_coverage]` must be applied to coverable code
const X: u32;
@ -13,6 +17,8 @@ trait Trait {
type U;
}
#[no_coverage]
//~^ WARN: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
impl Trait for () {
const X: u32 = 0;
@ -33,14 +39,17 @@ extern "C" {
#[no_coverage]
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 _ = ();
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 ();
}

View File

@ -1,8 +1,8 @@
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:36:5
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
--> $DIR/no-coverage.rs:8:1
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
|
note: the lint level is defined here
--> $DIR/no-coverage.rs:4:9
@ -10,20 +10,32 @@ note: the lint level is defined here
LL | #![warn(unused_attributes)]
| ^^^^^^^^^^^^^^^^^
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:40:9
warning: `#[no_coverage]` does not propagate into items and must be applied to the contained functions directly
--> $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]
| ^^^^^^^^^^^^^^
warning: `#[no_coverage]` can only be applied at the function level, not on code directly
--> $DIR/no-coverage.rs:44:5
warning: `#[no_coverage]` may only be applied to function definitions
--> $DIR/no-coverage.rs:52:5
|
LL | #[no_coverage]
| ^^^^^^^^^^^^^^
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]
| ^^^^^^^^^^^^^^
@ -31,7 +43,7 @@ LL | const X: u32;
| ------------- not 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]
| ^^^^^^^^^^^^^^
@ -39,7 +51,7 @@ LL | type T;
| ------- not 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]
| ^^^^^^^^^^^^^^
@ -47,7 +59,7 @@ LL | type T = Self;
| -------------- not 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]
| ^^^^^^^^^^^^^^
@ -55,7 +67,7 @@ LL | type U = impl Trait;
| -------------------- not 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]
| ^^^^^^^^^^^^^^
@ -63,21 +75,27 @@ LL | static X: u32;
| -------------- not 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 | type T;
| ------- 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
--> $DIR/no-coverage.rs:23:14
--> $DIR/no-coverage.rs:29:14
|
LL | type U = impl Trait;
| ^^^^^^^^^^
|
= 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`.