Description
Tracking issue: #14802
Describe the problem you are trying to solve
I often automate cargo
and I typically want any automation to halt when cargo
emits warnings. AFAICT the only way to do this is to try to parse the output for the way warnings are typically produced.
(Related issue: there are two categories of warnings which is confusing and needs clarification, which I filed as #8423 .)
Describe the solution you'd like
Add a commandline flag called --deny-warnings
and if set, if a warning is encountered, this ensures the process will exit with a non-zero status and that no "non-dry-run" operations proceed. For example, with cargo publish --deny-warnings
any of the early local packaging-style lint warnings will cause cargo publish
to avoid making any requests to
crates.io.
Notes
I'm not sure about the option name --deny-warnings
which I took from the #![deny(warnings)]
rust compilation attribute, but I can't think of anything clearer and concise. --treat-warnings-like-errors
, --exit-with-error-when-encountering-warnings
, --don't-just-warn-me-stop-me!
, and --please-save-me-from-myself
all are too cumbersome.
Related Tickets
This is related to #3591 because in some way these are opposites (disabling warnings versus escalating them to errors). There might be some common CLI magic that addresses both issues and is clear enough to users.
Even if they use separate cli and/or config specification, if both implemented, they might lead to nonsensical / confusing combinations which a good UX would complain-and-exit about, for example: cargo do-stuff --hide-warnings --deny-warnings
or something similar should probably say "I can't tell what you meant to do."