提交 9473e219 编写于 作者: L ltdk

Changes from code review

上级 5fabdb8f
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:
......
......@@ -317,14 +317,15 @@ fn check_no_coverage(
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
}
......
......@@ -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 @@ impl Trait for () {
#[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 ();
}
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`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册