diff --git a/src/cargo/core/workspace.rs b/src/cargo/core/workspace.rs index 2ef3a1a1a75..55bfb7a10c6 100644 --- a/src/cargo/core/workspace.rs +++ b/src/cargo/core/workspace.rs @@ -1180,21 +1180,6 @@ impl<'gctx> Workspace<'gctx> { } pub fn emit_lints(&self, pkg: &Package, path: &Path) -> CargoResult<()> { - let ws_lints = self - .root_maybe() - .workspace_config() - .inheritable() - .and_then(|i| i.lints().ok()) - .unwrap_or_default(); - - let ws_cargo_lints = ws_lints - .get("cargo") - .cloned() - .unwrap_or_default() - .into_iter() - .map(|(k, v)| (k.replace('-', "_"), v)) - .collect(); - let mut error_count = 0; let toml_lints = pkg .manifest() @@ -1212,30 +1197,9 @@ impl<'gctx> Workspace<'gctx> { .map(|(name, lint)| (name.replace('-', "_"), lint)) .collect(); - check_im_a_teapot( - pkg, - &path, - &normalized_lints, - &ws_cargo_lints, - &mut error_count, - self.gctx, - )?; - check_implicit_features( - pkg, - &path, - &normalized_lints, - &ws_cargo_lints, - &mut error_count, - self.gctx, - )?; - unused_dependencies( - pkg, - &path, - &normalized_lints, - &ws_cargo_lints, - &mut error_count, - self.gctx, - )?; + check_im_a_teapot(pkg, &path, &normalized_lints, &mut error_count, self.gctx)?; + check_implicit_features(pkg, &path, &normalized_lints, &mut error_count, self.gctx)?; + unused_dependencies(pkg, &path, &normalized_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" diff --git a/src/cargo/util/lints.rs b/src/cargo/util/lints.rs index f177dac48e4..1389e072730 100644 --- a/src/cargo/util/lints.rs +++ b/src/cargo/util/lints.rs @@ -88,7 +88,6 @@ impl Lint { pub fn level( &self, pkg_lints: &TomlToolLints, - ws_lints: &TomlToolLints, edition: Edition, ) -> (LintLevel, LintLevelReason) { self.groups @@ -101,7 +100,6 @@ impl Lint { g.default_level, g.edition_lint_opts, pkg_lints, - ws_lints, edition, ), ) @@ -113,7 +111,6 @@ impl Lint { self.default_level, self.edition_lint_opts, pkg_lints, - ws_lints, edition, ), ))) @@ -169,7 +166,6 @@ pub enum LintLevelReason { Default, Edition(Edition), Package, - Workspace, } impl Display for LintLevelReason { @@ -178,7 +174,6 @@ impl Display for LintLevelReason { LintLevelReason::Default => write!(f, "by default"), LintLevelReason::Edition(edition) => write!(f, "in edition {}", edition), LintLevelReason::Package => write!(f, "in `[lints]`"), - LintLevelReason::Workspace => write!(f, "in `[workspace.lints]`"), } } } @@ -188,7 +183,6 @@ fn level_priority( default_level: LintLevel, edition_lint_opts: Option<(Edition, LintLevel)>, pkg_lints: &TomlToolLints, - ws_lints: &TomlToolLints, edition: Edition, ) -> (LintLevel, LintLevelReason, i8) { let (unspecified_level, reason) = if let Some(level) = edition_lint_opts @@ -211,12 +205,6 @@ fn level_priority( LintLevelReason::Package, defined_level.priority(), ) - } else if let Some(defined_level) = ws_lints.get(name) { - ( - defined_level.level().into(), - LintLevelReason::Workspace, - defined_level.priority(), - ) } else { (unspecified_level, reason, 0) } @@ -234,12 +222,11 @@ pub fn check_im_a_teapot( pkg: &Package, path: &Path, pkg_lints: &TomlToolLints, - ws_lints: &TomlToolLints, error_count: &mut usize, gctx: &GlobalContext, ) -> CargoResult<()> { let manifest = pkg.manifest(); - let (lint_level, reason) = IM_A_TEAPOT.level(pkg_lints, ws_lints, manifest.edition()); + let (lint_level, reason) = IM_A_TEAPOT.level(pkg_lints, manifest.edition()); if lint_level == LintLevel::Allow { return Ok(()); } @@ -306,7 +293,6 @@ pub fn check_implicit_features( pkg: &Package, path: &Path, pkg_lints: &TomlToolLints, - ws_lints: &TomlToolLints, error_count: &mut usize, gctx: &GlobalContext, ) -> CargoResult<()> { @@ -317,7 +303,7 @@ pub fn check_implicit_features( return Ok(()); } - let (lint_level, reason) = IMPLICIT_FEATURES.level(pkg_lints, ws_lints, edition); + let (lint_level, reason) = IMPLICIT_FEATURES.level(pkg_lints, edition); if lint_level == LintLevel::Allow { return Ok(()); } @@ -390,7 +376,6 @@ pub fn unused_dependencies( pkg: &Package, path: &Path, pkg_lints: &TomlToolLints, - ws_lints: &TomlToolLints, error_count: &mut usize, gctx: &GlobalContext, ) -> CargoResult<()> { @@ -400,7 +385,7 @@ pub fn unused_dependencies( return Ok(()); } - let (lint_level, reason) = UNUSED_OPTIONAL_DEPENDENCY.level(pkg_lints, ws_lints, edition); + let (lint_level, reason) = UNUSED_OPTIONAL_DEPENDENCY.level(pkg_lints, edition); if lint_level == LintLevel::Allow { return Ok(()); } diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 96720937a92..988e34eed27 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -449,7 +449,15 @@ fn resolve_toml( } resolved_toml.target = (!resolved_target.is_empty()).then_some(resolved_target); - resolved_toml.lints = original_toml.lints.clone(); + let resolved_lints = original_toml + .lints + .clone() + .map(|value| lints_inherit_with(value, || inherit()?.lints())) + .transpose()?; + resolved_toml.lints = resolved_lints.map(|lints| manifest::InheritableLints { + workspace: false, + lints, + }); let resolved_badges = original_toml .badges @@ -1283,18 +1291,18 @@ fn to_real_manifest( } } - let resolved_lints = resolved_toml - .lints - .clone() - .map(|value| { - lints_inherit_with(value, || { - load_inheritable_fields(gctx, manifest_file, &workspace_config)?.lints() - }) - }) - .transpose()?; - - verify_lints(resolved_lints.as_ref(), gctx, warnings)?; - let rustflags = lints_to_rustflags(&resolved_lints.unwrap_or_default()); + verify_lints( + resolved_toml.resolved_lints().expect("previously resolved"), + gctx, + warnings, + )?; + let default = manifest::TomlLints::default(); + let rustflags = lints_to_rustflags( + resolved_toml + .resolved_lints() + .expect("previously resolved") + .unwrap_or(&default), + ); let metadata = ManifestMetadata { description: resolved_package diff --git a/tests/testsuite/lints_table.rs b/tests/testsuite/lints_table.rs index 75d0de4ee27..2c9beb4d997 100644 --- a/tests/testsuite/lints_table.rs +++ b/tests/testsuite/lints_table.rs @@ -977,7 +977,7 @@ error: `im_a_teapot` is specified 13 | im-a-teapot = true | ^^^^^^^^^^^^^^^^^^ | - = note: `cargo::im_a_teapot` is set to `forbid` in `[workspace.lints]` + = note: `cargo::im_a_teapot` is set to `forbid` in `[lints]` ", ) .run();