mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
feat: Add a workspace lint pass
This commit is contained in:
parent
58852d4c0d
commit
b234294ef9
@ -1200,10 +1200,17 @@ impl<'gctx> Workspace<'gctx> {
|
|||||||
|
|
||||||
pub fn emit_warnings(&self) -> CargoResult<()> {
|
pub fn emit_warnings(&self) -> CargoResult<()> {
|
||||||
let mut first_emitted_error = None;
|
let mut first_emitted_error = None;
|
||||||
|
|
||||||
|
if self.gctx.cli_unstable().cargo_lints {
|
||||||
|
if let Err(e) = self.emit_ws_lints() {
|
||||||
|
first_emitted_error = Some(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (path, maybe_pkg) in &self.packages.packages {
|
for (path, maybe_pkg) in &self.packages.packages {
|
||||||
if let MaybePackage::Package(pkg) = maybe_pkg {
|
if let MaybePackage::Package(pkg) = maybe_pkg {
|
||||||
if self.gctx.cli_unstable().cargo_lints {
|
if self.gctx.cli_unstable().cargo_lints {
|
||||||
if let Err(e) = self.emit_lints(pkg, &path)
|
if let Err(e) = self.emit_pkg_lints(pkg, &path)
|
||||||
&& first_emitted_error.is_none()
|
&& first_emitted_error.is_none()
|
||||||
{
|
{
|
||||||
first_emitted_error = Some(e);
|
first_emitted_error = Some(e);
|
||||||
@ -1242,7 +1249,7 @@ impl<'gctx> Workspace<'gctx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn emit_lints(&self, pkg: &Package, path: &Path) -> CargoResult<()> {
|
pub fn emit_pkg_lints(&self, pkg: &Package, path: &Path) -> CargoResult<()> {
|
||||||
let mut error_count = 0;
|
let mut error_count = 0;
|
||||||
let toml_lints = pkg
|
let toml_lints = pkg
|
||||||
.manifest()
|
.manifest()
|
||||||
@ -1270,6 +1277,41 @@ impl<'gctx> Workspace<'gctx> {
|
|||||||
self.gctx,
|
self.gctx,
|
||||||
)?;
|
)?;
|
||||||
check_im_a_teapot(pkg, &path, &cargo_lints, &mut error_count, self.gctx)?;
|
check_im_a_teapot(pkg, &path, &cargo_lints, &mut error_count, self.gctx)?;
|
||||||
|
|
||||||
|
if error_count > 0 {
|
||||||
|
Err(crate::util::errors::AlreadyPrintedError::new(anyhow!(
|
||||||
|
"encountered {error_count} errors(s) while running lints"
|
||||||
|
))
|
||||||
|
.into())
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn emit_ws_lints(&self) -> CargoResult<()> {
|
||||||
|
let error_count = 0;
|
||||||
|
|
||||||
|
let _cargo_lints = match self.root_maybe() {
|
||||||
|
MaybePackage::Package(pkg) => {
|
||||||
|
let toml = pkg.manifest().normalized_toml();
|
||||||
|
if let Some(ws) = &toml.workspace {
|
||||||
|
ws.lints.as_ref()
|
||||||
|
} else {
|
||||||
|
toml.lints.as_ref().map(|l| &l.lints)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MaybePackage::Virtual(vm) => vm
|
||||||
|
.normalized_toml()
|
||||||
|
.workspace
|
||||||
|
.as_ref()
|
||||||
|
.unwrap()
|
||||||
|
.lints
|
||||||
|
.as_ref(),
|
||||||
|
}
|
||||||
|
.and_then(|t| t.get("cargo"))
|
||||||
|
.cloned()
|
||||||
|
.unwrap_or(manifest::TomlToolLints::default());
|
||||||
|
|
||||||
if error_count > 0 {
|
if error_count > 0 {
|
||||||
Err(crate::util::errors::AlreadyPrintedError::new(anyhow!(
|
Err(crate::util::errors::AlreadyPrintedError::new(anyhow!(
|
||||||
"encountered {error_count} errors(s) while running lints"
|
"encountered {error_count} errors(s) while running lints"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user