//@aux-build:proc_macro_derive.rs #![warn(clippy::std_instead_of_core)] #![allow(unused_imports)] extern crate alloc; #[macro_use] extern crate proc_macro_derive; #[warn(clippy::std_instead_of_core)] fn std_instead_of_core() { // Regular import use core::hash::Hasher; //~^ ERROR: used import from `std` instead of `core` // Absolute path use ::core::hash::Hash; //~^ ERROR: used import from `std` instead of `core` // Don't lint on `env` macro use std::env; // Multiple imports use core::fmt::{Debug, Result}; //~^ ERROR: used import from `std` instead of `core` // Multiple imports multiline #[rustfmt::skip] use core::{ //~^ ERROR: used import from `std` instead of `core` fmt::Write as _, ptr::read_unaligned, }; // Function calls let ptr = core::ptr::null::(); //~^ ERROR: used import from `std` instead of `core` let ptr_mut = ::core::ptr::null_mut::(); //~^ ERROR: used import from `std` instead of `core` // Types let cell = core::cell::Cell::new(8u32); //~^ ERROR: used import from `std` instead of `core` let cell_absolute = ::core::cell::Cell::new(8u32); //~^ ERROR: used import from `std` instead of `core` let _ = std::env!("PATH"); use core::error::Error; //~^ ERROR: used import from `std` instead of `core` // lint items re-exported from private modules, `core::iter::traits::iterator::Iterator` use core::iter::Iterator; //~^ ERROR: used import from `std` instead of `core` } #[warn(clippy::std_instead_of_alloc)] fn std_instead_of_alloc() { // Only lint once. use alloc::vec; //~^ ERROR: used import from `std` instead of `alloc` use alloc::vec::Vec; //~^ ERROR: used import from `std` instead of `alloc` } #[warn(clippy::alloc_instead_of_core)] fn alloc_instead_of_core() { use core::slice::from_ref; //~^ ERROR: used import from `alloc` instead of `core` } mod std_in_proc_macro_derive { #[warn(clippy::alloc_instead_of_core)] #[allow(unused)] #[derive(ImplStructWithStdDisplay)] struct B {} } // Some intrinsics are usable on stable but live in an unstable module, but should still suggest // replacing std -> core fn intrinsic(a: *mut u8, b: *mut u8) { unsafe { core::intrinsics::copy(a, b, 1); //~^ std_instead_of_core } } #[clippy::msrv = "1.76"] fn msrv_1_76(_: std::net::IpAddr) {} #[clippy::msrv = "1.77"] fn msrv_1_77(_: core::net::IpAddr) {}