rust/tests/ui/unnecessary_unsafety_doc.rs
2023-12-10 15:36:31 -05:00

154 lines
2.6 KiB
Rust

//@aux-build:proc_macros.rs
#![allow(clippy::let_unit_value, clippy::needless_pass_by_ref_mut)]
#![warn(clippy::unnecessary_safety_doc)]
extern crate proc_macros;
use proc_macros::external;
/// This is has no safety section, and does not need one either
pub fn destroy_the_planet() {
unimplemented!();
}
/// This one does not need a `Safety` section
///
/// # Safety
///
/// This function shouldn't be called unless the horsemen are ready
pub fn apocalypse(universe: &mut ()) {
unimplemented!();
}
/// This is a private function, skip to match behavior with `missing_safety_doc`.
///
/// # Safety
///
/// Boo!
fn you_dont_see_me() {
unimplemented!();
}
mod private_mod {
/// This is public but unexported function, skip to match behavior with `missing_safety_doc`.
///
/// # Safety
///
/// Very safe!
pub fn only_crate_wide_accessible() {
unimplemented!();
}
/// # Safety
///
/// Unnecessary safety!
pub fn republished() {
unimplemented!();
}
}
pub use private_mod::republished;
pub trait SafeTraitSafeMethods {
fn woefully_underdocumented(self);
/// # Safety
///
/// Unnecessary!
fn documented(self);
}
pub trait SafeTrait {
fn method();
}
/// # Safety
///
/// Unnecessary!
pub trait DocumentedSafeTrait {
fn method2();
}
pub struct Struct;
impl SafeTraitSafeMethods for Struct {
fn woefully_underdocumented(self) {
// all is well
}
fn documented(self) {
// all is still well
}
}
impl SafeTrait for Struct {
fn method() {}
}
impl DocumentedSafeTrait for Struct {
fn method2() {}
}
impl Struct {
/// # Safety
///
/// Unnecessary!
pub fn documented() -> Self {
unimplemented!();
}
pub fn undocumented(&self) {
unimplemented!();
}
/// Private, fine again to stay consistent with `missing_safety_doc`.
///
/// # Safety
///
/// Unnecessary!
fn private(&self) {
unimplemented!();
}
}
macro_rules! very_safe {
() => {
pub fn whee() {
unimplemented!()
}
/// # Safety
///
/// Driving is very safe already!
pub fn drive() {
whee()
}
};
}
very_safe!();
// we don't lint code from external macros
external!(
pub fn vey_oy() {
unimplemented!();
}
);
fn main() {}
// do not lint if any parent has `#[doc(hidden)]` attribute
// see #7347
#[doc(hidden)]
pub mod __macro {
pub struct T;
impl T {
pub unsafe fn f() {}
}
}
/// # Implementation safety
pub trait DocumentedSafeTraitWithImplementationHeader {
fn method();
}