#![warn(clippy::missing_inline_in_public_items)] #![crate_type = "dylib"] // When denying at the crate level, be sure to not get random warnings from the // injected intrinsics by the compiler. #![allow(dead_code, non_snake_case)] type Typedef = String; pub type PubTypedef = String; struct Foo; // ok pub struct PubFoo; // ok enum FooE {} // ok pub enum PubFooE {} // ok mod module {} // ok pub mod pub_module {} // ok fn foo() {} // missing #[inline] pub fn pub_foo() {} //~^ missing_inline_in_public_items #[inline] pub fn pub_foo_inline() {} // ok #[inline(always)] pub fn pub_foo_inline_always() {} // ok #[allow(clippy::missing_inline_in_public_items)] pub fn pub_foo_no_inline() {} trait Bar { fn Bar_a(); // ok fn Bar_b() {} // ok } pub trait PubBar { fn PubBar_a(); // ok // missing #[inline] fn PubBar_b() {} //~^ missing_inline_in_public_items #[inline] fn PubBar_c() {} // ok } // none of these need inline because Foo is not exported impl PubBar for Foo { fn PubBar_a() {} // ok fn PubBar_b() {} // ok fn PubBar_c() {} // ok } // all of these need inline because PubFoo is exported impl PubBar for PubFoo { // missing #[inline] fn PubBar_a() {} //~^ missing_inline_in_public_items // missing #[inline] fn PubBar_b() {} //~^ missing_inline_in_public_items // missing #[inline] fn PubBar_c() {} //~^ missing_inline_in_public_items } // do not need inline because Foo is not exported impl Foo { fn FooImpl() {} // ok } // need inline because PubFoo is exported impl PubFoo { // missing #[inline] pub fn PubFooImpl() {} //~^ missing_inline_in_public_items } // do not lint this since users cannot control the external code #[derive(Debug)] pub struct S; pub mod issue15301 { #[unsafe(no_mangle)] pub extern "C" fn call_from_c() { println!("Just called a Rust function from C!"); } #[unsafe(no_mangle)] pub extern "Rust" fn call_from_rust() { println!("Just called a Rust function from Rust!"); } #[unsafe(no_mangle)] pub fn call_from_rust_no_extern() { println!("Just called a Rust function from Rust!"); } } pub mod issue15491 { pub trait Foo { #[allow(clippy::missing_inline_in_public_items)] fn foo(&self) {} } }