]> git.lizzy.rs Git - rust.git/blobdiff - src/librustdoc/passes/mod.rs
Separate `missing_doc_code_examples` from intra-doc links
[rust.git] / src / librustdoc / passes / mod.rs
index 1afa9c7a268584db7813712cc0062e7f6e7892aa..c604c804ddf5e918997650f22b166ec5c83ab89d 100644 (file)
@@ -312,12 +312,7 @@ fn fold_item(&mut self, i: Item) -> Option<Item> {
     }
 }
 
-pub fn look_for_tests<'tcx>(
-    cx: &DocContext<'tcx>,
-    dox: &str,
-    item: &Item,
-    check_missing_code: bool,
-) {
+pub fn look_for_tests<'tcx>(cx: &DocContext<'tcx>, dox: &str, item: &Item) {
     let hir_id = match cx.as_local_hir_id(item.def_id) {
         Some(hir_id) => hir_id,
         None => {
@@ -338,14 +333,26 @@ fn add_test(&mut self, _: String, _: LangString, _: usize) {
 
     let mut tests = Tests { found_tests: 0 };
 
-    find_testable_code(&dox, &mut tests, ErrorCodes::No, false);
+    find_testable_code(&dox, &mut tests, ErrorCodes::No, false, None);
 
-    if check_missing_code && tests.found_tests == 0 {
-        let sp = span_of_attrs(&item.attrs).unwrap_or(item.source.span());
-        cx.tcx.struct_span_lint_hir(lint::builtin::MISSING_DOC_CODE_EXAMPLES, hir_id, sp, |lint| {
-            lint.build("missing code example in this documentation").emit()
-        });
-    } else if !check_missing_code
+    if tests.found_tests == 0 {
+        use clean::ItemEnum::*;
+
+        let should_report = match item.inner {
+            ExternCrateItem(_, _) | ImportItem(_) | PrimitiveItem(_) | KeywordItem(_) => false,
+            _ => true,
+        };
+        if should_report {
+            debug!("reporting error for {:?} (hir_id={:?})", item, hir_id);
+            let sp = span_of_attrs(&item.attrs).unwrap_or(item.source.span());
+            cx.tcx.struct_span_lint_hir(
+                lint::builtin::MISSING_DOC_CODE_EXAMPLES,
+                hir_id,
+                sp,
+                |lint| lint.build("missing code example in this documentation").emit(),
+            );
+        }
+    } else if rustc_feature::UnstableFeatures::from_environment().is_nightly_build()
         && tests.found_tests > 0
         && !cx.renderinfo.borrow().access_levels.is_public(item.def_id)
     {