clippy::cargo_common_metadata: check for license-file

When license property is missing in Cargo.toml check for license-file
as it may be used instead of the former. The check implemented here is
very naive as it only verifies that the field is present and is not
empty. More scrutiny can be applied by verifying the file is actually
present.

Fixes #4517
This commit is contained in:
Cyril Plisko 2019-09-07 11:00:02 +03:00
parent d07d001b74
commit 4c881d108a

View File

@ -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<String>) -> bool {
value.as_ref().map_or(true, String::is_empty)
}
fn is_empty_path(value: &Option<PathBuf>) -> 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 @@ impl EarlyLintPass for CargoCommonMetadata {
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) {