diff --git a/clippy_lints/src/cargo_common_metadata.rs b/clippy_lints/src/cargo_common_metadata.rs index 115bb9ee8c8..cfc70de8f21 100644 --- a/clippy_lints/src/cargo_common_metadata.rs +++ b/clippy_lints/src/cargo_common_metadata.rs @@ -1,5 +1,7 @@ //! lint on missing cargo common metadata +use std::path::PathBuf; + use crate::utils::span_lint; use rustc::lint::{EarlyContext, EarlyLintPass, LintArray, LintPass}; use rustc::{declare_lint_pass, declare_tool_lint}; @@ -47,6 +49,10 @@ fn is_empty_str(value: &Option) -> bool { value.as_ref().map_or(true, String::is_empty) } +fn is_empty_path(value: &Option) -> bool { + value.as_ref().and_then(|x| x.to_str()).map_or(true, str::is_empty) +} + fn is_empty_vec(value: &[String]) -> bool { // This works because empty iterators return true value.iter().all(std::string::String::is_empty) @@ -72,8 +78,8 @@ fn check_crate(&mut self, cx: &EarlyContext<'_>, _: &Crate) { missing_warning(cx, &package, "package.description"); } - if is_empty_str(&package.license) { - missing_warning(cx, &package, "package.license"); + if is_empty_str(&package.license) && is_empty_path(&package.license_file) { + missing_warning(cx, &package, "either package.license or package.license_file"); } if is_empty_str(&package.repository) { diff --git a/tests/ui/builtin-type-shadow.stderr b/tests/ui/builtin-type-shadow.stderr index 5714f2094da..c19ea6114f8 100644 --- a/tests/ui/builtin-type-shadow.stderr +++ b/tests/ui/builtin-type-shadow.stderr @@ -16,6 +16,8 @@ LL | 42 | = note: expected type `u32` found type `{integer}` + = help: type parameters must be constrained to match other types + = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters error: aborting due to 2 previous errors