Auto merge of #7734 - Manishearth:doc-unsafe-trait, r=camsteffen

Make `doc_unsafe` warn on unsafe traits as well

Fixes #7732

changelog: Make [`doc_unsafe`] warn on unsafe traits as well
This commit is contained in:
bors 2021-09-28 17:09:34 +00:00
commit fb17671eb0
5 changed files with 43 additions and 7 deletions

View File

@ -236,7 +236,17 @@ impl<'tcx> LateLintPass<'tcx> for DocMarkdown {
hir::ItemKind::Impl(ref impl_) => {
self.in_trait_impl = impl_.of_trait.is_some();
},
_ => {},
hir::ItemKind::Trait(_, unsafety, ..) => {
if !headers.safety && unsafety == hir::Unsafety::Unsafe {
span_lint(
cx,
MISSING_SAFETY_DOC,
item.span,
"docs for unsafe trait missing `# Safety` section",
);
}
},
_ => (),
}
}

View File

@ -3,6 +3,7 @@
#![feature(no_core, lang_items, start)]
#![no_core]
#![allow(clippy::missing_safety_doc)]
#[link(name = "c")]
extern "C" {}

View File

@ -1,5 +1,5 @@
error: methods called `as_*` usually take `self` by reference or `self` by mutable reference
--> $DIR/def_id_nocore.rs:26:19
--> $DIR/def_id_nocore.rs:27:19
|
LL | pub fn as_ref(self) -> &'static str {
| ^^^^

View File

@ -34,16 +34,25 @@ mod private_mod {
pub use private_mod::republished;
pub trait UnsafeTrait {
pub trait SafeTraitUnsafeMethods {
unsafe fn woefully_underdocumented(self);
/// # Safety
unsafe fn at_least_somewhat_documented(self);
}
pub unsafe trait UnsafeTrait {
fn method();
}
/// # Safety
pub unsafe trait DocumentedUnsafeTrait {
fn method2();
}
pub struct Struct;
impl UnsafeTrait for Struct {
impl SafeTraitUnsafeMethods for Struct {
unsafe fn woefully_underdocumented(self) {
// all is well
}
@ -53,6 +62,14 @@ impl UnsafeTrait for Struct {
}
}
unsafe impl UnsafeTrait for Struct {
fn method() {}
}
unsafe impl DocumentedUnsafeTrait for Struct {
fn method2() {}
}
impl Struct {
pub unsafe fn more_undocumented_unsafe() -> Self {
unimplemented!();

View File

@ -22,8 +22,16 @@ error: unsafe function's docs miss `# Safety` section
LL | unsafe fn woefully_underdocumented(self);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: docs for unsafe trait missing `# Safety` section
--> $DIR/doc_unsafe.rs:44:1
|
LL | / pub unsafe trait UnsafeTrait {
LL | | fn method();
LL | | }
| |_^
error: unsafe function's docs miss `# Safety` section
--> $DIR/doc_unsafe.rs:57:5
--> $DIR/doc_unsafe.rs:74:5
|
LL | / pub unsafe fn more_undocumented_unsafe() -> Self {
LL | | unimplemented!();
@ -31,7 +39,7 @@ LL | | }
| |_____^
error: unsafe function's docs miss `# Safety` section
--> $DIR/doc_unsafe.rs:73:9
--> $DIR/doc_unsafe.rs:90:9
|
LL | / pub unsafe fn whee() {
LL | | unimplemented!()
@ -43,5 +51,5 @@ LL | very_unsafe!();
|
= note: this error originates in the macro `very_unsafe` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 5 previous errors
error: aborting due to 6 previous errors