Skip to content

Collect warnings for path dependencies into one message printed at the end #8749

@jyn514

Description

@jyn514

Describe the problem you are trying to solve

In workspaces, especially very large workspaces, warnings are scattered around the output:

warning: publicly re-exporting an item from a different crate
  --> compiler/rustc_trait_selection/src/traits/mod.rs:73:1
   |
73 | pub use rustc_infer::traits::*;
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: facade crates are discouraged; import from the original crate instead

warning: 42 warnings emitted

    Checking rustc_lint v0.0.0 (/home/joshua/rustc2/compiler/rustc_lint)
    Checking rustc_typeck v0.0.0 (/home/joshua/rustc2/compiler/rustc_typeck)
    Checking rustc_traits v0.0.0 (/home/joshua/rustc2/compiler/rustc_traits)
    Checking rustc_ty v0.0.0 (/home/joshua/rustc2/compiler/rustc_ty)
    Checking rustc_mir_build v0.0.0 (/home/joshua/rustc2/compiler/rustc_mir_build)
    Checking rustc_mir v0.0.0 (/home/joshua/rustc2/compiler/rustc_mir)
    Checking rustc_passes v0.0.0 (/home/joshua/rustc2/compiler/rustc_passes)
warning: unused import: `rustc_hir as hir`
 --> compiler/rustc_mir_build/src/build/expr/into.rs:9:5
  |
9 | use rustc_hir as hir;
  |     ^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` on by default

This makes it hard to see all the warnings; if there are enough crates being built they may disappear off the screen entirely and you might not see them at all.

Describe the solution you'd like

Cargo should print a sum of all the warnings at once: warning: 43 warnings emitted for all path dependencies. Since it uses --error-format=json --json=diagnostic-rendered-ansi this should be ~fairly easy to calculate from the rustc diagnostics, but don't quote me on that ;)

Ideally this wouldn't print warnings per-crate, just per-compile. However I'd rather have too much output than too little.

Notes

@joshtriplett suggested something like this in rust-lang/rust#77492 (comment), so I have a strong motivation to work on it myself if someone can write up mentoring instructions :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-console-outputArea: Terminal output, colors, progress bar, etc.A-diagnosticsArea: Error and warning messages generated by Cargo itself.C-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`S-needs-designStatus: Needs someone to work further on the design for the feature or fix. NOT YET accepted.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions