diff --git a/clippy_lints/src/missing_doc.rs b/clippy_lints/src/missing_doc.rs index d7e4dd22123..f5dab6d1fed 100644 --- a/clippy_lints/src/missing_doc.rs +++ b/clippy_lints/src/missing_doc.rs @@ -6,11 +6,12 @@ // use crate::utils::{in_macro, span_lint}; +use if_chain::if_chain; use rustc::hir; use rustc::lint::{LateContext, LateLintPass, LintArray, LintContext, LintPass}; use rustc::ty; use rustc::{declare_tool_lint, lint_array}; -use syntax::ast; +use syntax::ast::{self, MetaItem, MetaItemKind}; use syntax::attr; use syntax::source_map::Span; @@ -52,6 +53,20 @@ impl MissingDoc { *self.doc_hidden_stack.last().expect("empty doc_hidden_stack") } + fn has_include(meta: Option) -> bool { + if_chain! { + if let Some(meta) = meta; + if let MetaItemKind::List(list) = meta.node; + if let Some(meta) = list.get(0); + if let Some(name) = meta.name(); + then { + name == "include" + } else { + false + } + } + } + fn check_missing_docs_attrs( &self, cx: &LateContext<'_, '_>, @@ -74,7 +89,9 @@ impl MissingDoc { return; } - let has_doc = attrs.iter().any(|a| a.is_value_str() && a.name() == "doc"); + let has_doc = attrs + .iter() + .any(|a| a.name() == "doc" && (a.is_value_str() || Self::has_include(a.meta()))); if !has_doc { span_lint( cx, diff --git a/tests/ui/missing-doc-crate-missing.rs b/tests/ui/missing-doc-crate-missing.rs new file mode 100644 index 00000000000..51fd57df8df --- /dev/null +++ b/tests/ui/missing-doc-crate-missing.rs @@ -0,0 +1,3 @@ +#![warn(clippy::missing_docs_in_private_items)] + +fn main() {} diff --git a/tests/ui/missing-doc-crate-missing.stderr b/tests/ui/missing-doc-crate-missing.stderr new file mode 100644 index 00000000000..da46f988636 --- /dev/null +++ b/tests/ui/missing-doc-crate-missing.stderr @@ -0,0 +1,12 @@ +error: missing documentation for crate + --> $DIR/missing-doc-crate-missing.rs:1:1 + | +LL | / #![warn(clippy::missing_docs_in_private_items)] +LL | | +LL | | fn main() {} + | |____________^ + | + = note: `-D clippy::missing-docs-in-private-items` implied by `-D warnings` + +error: aborting due to previous error + diff --git a/tests/ui/missing-doc-crate.rs b/tests/ui/missing-doc-crate.rs new file mode 100644 index 00000000000..04711f86488 --- /dev/null +++ b/tests/ui/missing-doc-crate.rs @@ -0,0 +1,5 @@ +#![warn(clippy::missing_docs_in_private_items)] +#![feature(external_doc)] +#![doc(include = "../../README.md")] + +fn main() {} diff --git a/tests/ui/missing-doc-crate.stderr b/tests/ui/missing-doc-crate.stderr new file mode 100644 index 00000000000..e69de29bb2d