Skip to content

Commit

Permalink
clippy::cargo_common_metadata: check for license-file
Browse files Browse the repository at this point in the history
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
  • Loading branch information
imp committed Sep 8, 2019
1 parent f30bf69 commit 373d6b0
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions clippy_lints/src/cargo_common_metadata.rs
Original file line number Diff line number Diff line change
@@ -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};
Expand Down Expand Up @@ -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)
Expand All @@ -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) {
Expand Down

0 comments on commit 373d6b0

Please sign in to comment.