]> git.lizzy.rs Git - rust.git/commitdiff
Changes from code review
authorltdk <usr@ltdk.xyz>
Mon, 6 Jun 2022 02:24:14 +0000 (22:24 -0400)
committerltdk <usr@ltdk.xyz>
Mon, 6 Jun 2022 02:24:14 +0000 (22:24 -0400)
compiler/rustc_error_codes/src/error_codes/E0788.md
compiler/rustc_passes/src/check_attr.rs
src/test/ui/lint/no-coverage.rs
src/test/ui/lint/no-coverage.stderr

index 68bd53cea6ff6c16f5ed28e73f0e6976c12b9a7c..d26f9b594550c887e86042380f35772697db1f54 100644 (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:
 
index f3734e1a1206de3fb92d0471b98af6d03a9fefb3..67144d03d98da096ff99ac701e433b2ddc8af222 100644 (file)
@@ -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
             }
index c02cd976bc9450f08c4eff6667f955aa6652df41..ff24c12b2bcfcbe5b5279f70b7a56f8fc707dc3e 100644 (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 @@ 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 ();
 }
index 8549eb699eeac716e6bc782d2552d2d53e8de766..8452ccc7a03cbe5e40819c28caac78a3871627c9 100644 (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`.