diff --git a/src/fuchsia/mod.rs b/src/fuchsia/mod.rs index ee465beee648c..15a61c5af17bc 100644 --- a/src/fuchsia/mod.rs +++ b/src/fuchsia/mod.rs @@ -80,7 +80,7 @@ pub type rlim_t = c_ulonglong; // FIXME(fuchsia): why are these uninhabited types? that seems... wrong? // Presumably these should be `()` or an `extern type` (when that stabilizes). -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { @@ -88,7 +88,7 @@ impl Clone for timezone { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum DIR {} impl Copy for DIR {} impl Clone for DIR { @@ -97,7 +97,7 @@ impl Clone for DIR { } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos64_t {} // FIXME(fuchsia): fill this out with a struct impl Copy for fpos64_t {} impl Clone for fpos64_t { @@ -3421,7 +3421,7 @@ fn __MHDR_END(mhdr: *const msghdr) -> *mut c_uchar { #[link(name = "fdio")] extern "C" {} -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum FILE {} impl Copy for FILE {} impl Clone for FILE { @@ -3429,7 +3429,7 @@ impl Clone for FILE { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos_t {} // FIXME(fuchsia): fill this out with a struct impl Copy for fpos_t {} impl Clone for fpos_t { diff --git a/src/lib.rs b/src/lib.rs index ea8fc1172d65c..1f566dc0b3d7c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,8 +22,6 @@ // Attributes needed when building as part of the standard library #![cfg_attr(feature = "rustc-dep-of-std", feature(link_cfg, no_core))] #![cfg_attr(feature = "rustc-dep-of-std", allow(internal_features))] -// Enable extra lints: -#![cfg_attr(feature = "extra_traits", warn(missing_debug_implementations))] #![warn(missing_copy_implementations, safe_packed_borrows)] #![cfg_attr(not(feature = "rustc-dep-of-std"), no_std)] #![cfg_attr(feature = "rustc-dep-of-std", no_core)] diff --git a/src/macros.rs b/src/macros.rs index 3a8db1890107c..142e6eae5c8cf 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -70,13 +70,18 @@ macro_rules! prelude { mod prelude { // Exports from `core` #[allow(unused_imports)] - pub(crate) use ::core::clone::Clone; + pub(crate) use core::clone::Clone; #[allow(unused_imports)] - pub(crate) use ::core::marker::{Copy, Send, Sync}; + pub(crate) use core::fmt::Debug; #[allow(unused_imports)] - pub(crate) use ::core::option::Option; + pub(crate) use core::marker::{Copy, Send, Sync}; #[allow(unused_imports)] - pub(crate) use ::core::{fmt, hash, iter, mem}; + pub(crate) use core::option::Option; + #[allow(unused_imports)] + pub(crate) use core::prelude::v1::derive; + #[allow(unused_imports)] + pub(crate) use core::{fmt, hash, iter, mem}; + #[allow(unused_imports)] pub(crate) use mem::{align_of, align_of_val, size_of, size_of_val}; @@ -112,9 +117,13 @@ macro_rules! s { #[repr(C)] #[cfg_attr( feature = "extra_traits", - ::core::prelude::v1::derive(Debug, Eq, Hash, PartialEq) + ::core::prelude::v1::derive(Eq, Hash, PartialEq) + )] + #[::core::prelude::v1::derive( + ::core::clone::Clone, + ::core::marker::Copy, + ::core::fmt::Debug, )] - #[::core::prelude::v1::derive(::core::clone::Clone, ::core::marker::Copy)] #[allow(deprecated)] $(#[$attr])* pub struct $i { $($field)* } @@ -134,17 +143,21 @@ macro_rules! s_paren { __item! { #[cfg_attr( feature = "extra_traits", - ::core::prelude::v1::derive(Debug, Eq, Hash, PartialEq) + ::core::prelude::v1::derive(Eq, Hash, PartialEq) + )] + #[::core::prelude::v1::derive( + ::core::clone::Clone, + ::core::marker::Copy, + ::core::fmt::Debug, )] - #[::core::prelude::v1::derive(::core::clone::Clone, ::core::marker::Copy)] $(#[$attr])* pub struct $i ( $($field)* ); } )*); } -/// Implement `Clone` and `Copy` for a struct with no `extra_traits` feature, as well as `Debug` -/// with `extra_traits` since that can always be derived. +/// Implement `Clone`, `Copy`, and `Debug` since those can be derived, but exclude `PartialEq`, +/// `Eq`, and `Hash`. /// /// Most items will prefer to use [`s`]. macro_rules! s_no_extra_traits { @@ -163,7 +176,6 @@ macro_rules! s_no_extra_traits { pub union $i { $($field)* } } - #[cfg(feature = "extra_traits")] impl ::core::fmt::Debug for $i { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { f.debug_struct(::core::stringify!($i)).finish_non_exhaustive() @@ -174,8 +186,11 @@ macro_rules! s_no_extra_traits { (it: $(#[$attr:meta])* pub struct $i:ident { $($field:tt)* }) => ( __item! { #[repr(C)] - #[::core::prelude::v1::derive(::core::clone::Clone, ::core::marker::Copy)] - #[cfg_attr(feature = "extra_traits", ::core::prelude::v1::derive(Debug))] + #[::core::prelude::v1::derive( + ::core::clone::Clone, + ::core::marker::Copy, + ::core::fmt::Debug, + )] $(#[$attr])* pub struct $i { $($field)* } } diff --git a/src/solid/mod.rs b/src/solid/mod.rs index 965c5bb1aa522..40d6a9d348586 100644 --- a/src/solid/mod.rs +++ b/src/solid/mod.rs @@ -395,7 +395,7 @@ pub const SIGUSR1: c_int = 30; pub const SIGUSR2: c_int = 31; pub const SIGPWR: c_int = 32; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum FILE {} impl Copy for FILE {} impl Clone for FILE { @@ -403,7 +403,7 @@ impl Clone for FILE { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos_t {} impl Copy for fpos_t {} impl Clone for fpos_t { diff --git a/src/unix/aix/powerpc64.rs b/src/unix/aix/powerpc64.rs index 856fd0d127d70..ba4ddc057c40b 100644 --- a/src/unix/aix/powerpc64.rs +++ b/src/unix/aix/powerpc64.rs @@ -3,7 +3,7 @@ use crate::prelude::*; // Define lock_data_instrumented as an empty enum missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum lock_data_instrumented {} } diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs index 0fbb174c1fe4f..17fba8a501c57 100644 --- a/src/unix/bsd/apple/mod.rs +++ b/src/unix/bsd/apple/mod.rs @@ -175,7 +175,7 @@ pub type copyfile_callback_t = Option< pub type attrgroup_t = u32; pub type vol_capabilities_set_t = [u32; 4]; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/bsd/freebsdlike/dragonfly/mod.rs b/src/unix/bsd/freebsdlike/dragonfly/mod.rs index 11dcba98fcc5a..db6e64b020c0c 100644 --- a/src/unix/bsd/freebsdlike/dragonfly/mod.rs +++ b/src/unix/bsd/freebsdlike/dragonfly/mod.rs @@ -45,7 +45,7 @@ pub type vm_map_entry_t = *mut vm_map_entry; pub type pmap = __c_anonymous_pmap; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum sem {} impl Copy for sem {} impl Clone for sem { diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs index 4b96972433ec9..dca7d6ee79988 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs @@ -2,7 +2,8 @@ use crate::off_t; use crate::prelude::*; #[repr(C)] -#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] +#[derive(Debug)] +#[cfg_attr(feature = "extra_traits", derive(Eq, Hash, PartialEq))] pub struct stat { pub st_dev: crate::dev_t, pub st_ino: crate::ino_t, diff --git a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs index c492ceb47aa41..1f31aac0e3d3d 100644 --- a/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs +++ b/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs @@ -2,7 +2,8 @@ use crate::off_t; use crate::prelude::*; #[repr(C)] -#[cfg_attr(feature = "extra_traits", derive(Debug, Eq, Hash, PartialEq))] +#[derive(Debug)] +#[cfg_attr(feature = "extra_traits", derive(Eq, Hash, PartialEq))] pub struct stat { pub st_dev: crate::dev_t, pub st_ino: crate::ino_t, diff --git a/src/unix/bsd/freebsdlike/mod.rs b/src/unix/bsd/freebsdlike/mod.rs index 8ef551d52ecbb..55f2133d8ea5f 100644 --- a/src/unix/bsd/freebsdlike/mod.rs +++ b/src/unix/bsd/freebsdlike/mod.rs @@ -59,7 +59,7 @@ cfg_if! { // link.h -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/bsd/netbsdlike/mod.rs b/src/unix/bsd/netbsdlike/mod.rs index 4b66584b8e562..52a5f1140ae0d 100644 --- a/src/unix/bsd/netbsdlike/mod.rs +++ b/src/unix/bsd/netbsdlike/mod.rs @@ -16,7 +16,7 @@ pub type id_t = u32; pub type sem_t = *mut sem; pub type key_t = c_long; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { @@ -24,7 +24,7 @@ impl Clone for timezone { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum sem {} impl Copy for sem {} impl Clone for sem { diff --git a/src/unix/cygwin/mod.rs b/src/unix/cygwin/mod.rs index fde2c18936e71..432b4a0e27a02 100644 --- a/src/unix/cygwin/mod.rs +++ b/src/unix/cygwin/mod.rs @@ -28,7 +28,7 @@ pub type nlink_t = c_ushort; pub type suseconds_t = c_long; pub type useconds_t = c_ulong; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { @@ -75,7 +75,7 @@ pub type nfds_t = c_uint; pub type sem_t = *mut sem; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum sem {} impl Copy for sem {} impl Clone for sem { diff --git a/src/unix/haiku/mod.rs b/src/unix/haiku/mod.rs index 9dfb1e638e7d2..23ccb9d1f63c8 100644 --- a/src/unix/haiku/mod.rs +++ b/src/unix/haiku/mod.rs @@ -58,7 +58,7 @@ pub type posix_spawn_file_actions_t = *mut c_void; pub type StringList = _stringlist; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/hurd/mod.rs b/src/unix/hurd/mod.rs index 1bd2661e3dfa9..51e3031172985 100644 --- a/src/unix/hurd/mod.rs +++ b/src/unix/hurd/mod.rs @@ -225,7 +225,7 @@ pub type nl_item = c_int; pub type iconv_t = *mut c_void; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos64_t {} // FIXME(hurd): fill this out with a struct impl Copy for fpos64_t {} impl Clone for fpos64_t { @@ -234,7 +234,7 @@ impl Clone for fpos64_t { } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/linux_like/emscripten/mod.rs b/src/unix/linux_like/emscripten/mod.rs index 7a43670536e4f..867e71ed96e68 100644 --- a/src/unix/linux_like/emscripten/mod.rs +++ b/src/unix/linux_like/emscripten/mod.rs @@ -41,7 +41,7 @@ pub type statfs64 = crate::statfs; pub type statvfs64 = crate::statvfs; pub type dirent64 = crate::dirent; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos64_t {} // FIXME(emscripten): fill this out with a struct impl Copy for fpos64_t {} impl Clone for fpos64_t { diff --git a/src/unix/linux_like/linux/mod.rs b/src/unix/linux_like/linux/mod.rs index 3f481fb755c8d..8d5839cf9d537 100644 --- a/src/unix/linux_like/linux/mod.rs +++ b/src/unix/linux_like/linux/mod.rs @@ -68,7 +68,7 @@ pub type eventfd_t = u64; cfg_if! { if #[cfg(not(target_env = "gnu"))] { missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum fpos64_t {} // FIXME(linux): fill this out with a struct } } diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs index 6128cecbba5f0..70d33e887aad8 100644 --- a/src/unix/linux_like/mod.rs +++ b/src/unix/linux_like/mod.rs @@ -9,7 +9,7 @@ pub type key_t = c_int; pub type id_t = c_uint; missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum timezone {} } diff --git a/src/unix/mod.rs b/src/unix/mod.rs index c9a8964eb1099..0f32bd33a7c2a 100644 --- a/src/unix/mod.rs +++ b/src/unix/mod.rs @@ -38,7 +38,7 @@ cfg_if! { } missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum DIR {} } pub type locale_t = *mut c_void; @@ -568,14 +568,14 @@ cfg_if! { cfg_if! { if #[cfg(not(all(target_os = "linux", target_env = "gnu")))] { missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum fpos_t {} // FIXME(unix): fill this out with a struct } } } missing! { - #[cfg_attr(feature = "extra_traits", derive(Debug))] + #[derive(Debug)] pub enum FILE {} } diff --git a/src/unix/nto/mod.rs b/src/unix/nto/mod.rs index 1250a68e9dfbb..7b4b1ca62cc65 100644 --- a/src/unix/nto/mod.rs +++ b/src/unix/nto/mod.rs @@ -72,7 +72,7 @@ pub type sem_t = sync_t; pub type nl_item = c_int; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/redox/mod.rs b/src/unix/redox/mod.rs index 05f0acdfcb287..45a6864210db1 100644 --- a/src/unix/redox/mod.rs +++ b/src/unix/redox/mod.rs @@ -32,7 +32,7 @@ pub type pid_t = usize; pub type uid_t = u32; pub type gid_t = u32; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { diff --git a/src/unix/solarish/mod.rs b/src/unix/solarish/mod.rs index 72540e02b2f30..2694251a06c6a 100644 --- a/src/unix/solarish/mod.rs +++ b/src/unix/solarish/mod.rs @@ -55,7 +55,7 @@ pub type lgrp_view_t = c_uint; pub type posix_spawnattr_t = *mut c_void; pub type posix_spawn_file_actions_t = *mut c_void; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { @@ -64,7 +64,7 @@ impl Clone for timezone { } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum ucred_t {} impl Copy for ucred_t {} impl Clone for ucred_t { diff --git a/src/vxworks/mod.rs b/src/vxworks/mod.rs index ac82903504347..3f0e75637b3ff 100644 --- a/src/vxworks/mod.rs +++ b/src/vxworks/mod.rs @@ -4,7 +4,7 @@ use core::ptr::null_mut; use crate::prelude::*; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum DIR {} impl Copy for DIR {} impl Clone for DIR { @@ -95,7 +95,7 @@ pub type sa_family_t = c_uchar; // mqueue.h pub type mqd_t = c_int; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum _Vx_semaphore {} impl Copy for _Vx_semaphore {} impl Clone for _Vx_semaphore { @@ -1065,7 +1065,7 @@ pub const MAP_CONTIG: c_int = 0x0020; pub const MAP_FAILED: *mut c_void = !0 as *mut c_void; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum FILE {} impl Copy for FILE {} impl Clone for FILE { @@ -1073,7 +1073,7 @@ impl Clone for FILE { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos_t {} // FIXME(vxworks): fill this out with a struct impl Copy for fpos_t {} impl Clone for fpos_t { diff --git a/src/wasi/mod.rs b/src/wasi/mod.rs index b766853ef3493..4700ca54a05dd 100644 --- a/src/wasi/mod.rs +++ b/src/wasi/mod.rs @@ -42,13 +42,13 @@ s_no_extra_traits! { } #[allow(missing_copy_implementations)] -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum FILE {} #[allow(missing_copy_implementations)] -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum DIR {} #[allow(missing_copy_implementations)] -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum __locale_struct {} s_paren! { @@ -176,7 +176,7 @@ s! { // etc., since it contains a flexible array member with a dynamic size. #[repr(C)] #[allow(missing_copy_implementations)] -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub struct dirent { pub d_ino: ino_t, pub d_type: c_uchar, diff --git a/src/windows/mod.rs b/src/windows/mod.rs index dfee0df55c8f7..f47c5de6613e7 100644 --- a/src/windows/mod.rs +++ b/src/windows/mod.rs @@ -29,7 +29,7 @@ cfg_if! { pub type off_t = i32; pub type dev_t = u32; pub type ino_t = u16; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum timezone {} impl Copy for timezone {} impl Clone for timezone { @@ -243,7 +243,7 @@ pub const SIG_GET: crate::sighandler_t = 2; pub const SIG_SGE: crate::sighandler_t = 3; pub const SIG_ACK: crate::sighandler_t = 4; -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum FILE {} impl Copy for FILE {} impl Clone for FILE { @@ -251,7 +251,7 @@ impl Clone for FILE { *self } } -#[cfg_attr(feature = "extra_traits", derive(Debug))] +#[derive(Debug)] pub enum fpos_t {} // FIXME(windows): fill this out with a struct impl Copy for fpos_t {} impl Clone for fpos_t {