diff --git a/Cargo.toml b/Cargo.toml index cab6d563cf0..e3847abbb35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -222,7 +222,6 @@ wasm-bindgen = "0.2.106" unsafe_code = "allow" unsafe_op_in_unsafe_fn = "deny" elided_lifetimes_in_paths = "warn" -missing_copy_implementations = "warn" [workspace.lints.clippy] # alloc_instead_of_core = "warn" diff --git a/crates/vm/src/anystr.rs b/crates/vm/src/anystr.rs index c44fc36c454..79b62a58abf 100644 --- a/crates/vm/src/anystr.rs +++ b/crates/vm/src/anystr.rs @@ -16,13 +16,13 @@ pub struct SplitArgs { maxsplit: isize, } -#[derive(Clone, Copy, FromArgs)] +#[derive(FromArgs)] pub struct SplitLinesArgs { #[pyarg(any, default = false)] pub keepends: bool, } -#[derive(Clone, Copy, FromArgs)] +#[derive(FromArgs)] pub struct ExpandTabsArgs { #[pyarg(any, default = 8)] tabsize: isize, diff --git a/crates/vm/src/builtins/descriptor.rs b/crates/vm/src/builtins/descriptor.rs index b0bb3a46c22..89dafdd14b7 100644 --- a/crates/vm/src/builtins/descriptor.rs +++ b/crates/vm/src/builtins/descriptor.rs @@ -168,7 +168,7 @@ impl Representable for PyMethodDescriptor { } } -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub enum MemberKind { Bool = 14, ObjectEx = 16, @@ -176,13 +176,11 @@ pub enum MemberKind { pub type MemberSetterFunc = Option PyResult<()>>; -#[derive(Clone, Copy)] pub enum MemberGetter { Getter(fn(&VirtualMachine, PyObjectRef) -> PyResult), Offset(usize), } -#[derive(Clone, Copy)] pub enum MemberSetter { Setter(MemberSetterFunc), Offset(usize), diff --git a/crates/vm/src/builtins/module.rs b/crates/vm/src/builtins/module.rs index 8286471a767..60ffb1487fa 100644 --- a/crates/vm/src/builtins/module.rs +++ b/crates/vm/src/builtins/module.rs @@ -9,7 +9,7 @@ use crate::{ }; #[pyclass(module = false, name = "module")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct PyModuleDef { // pub index: usize, pub name: &'static PyStrInterned, @@ -26,7 +26,7 @@ pub type ModuleCreate = fn(&VirtualMachine, &PyObject, &'static PyModuleDef) -> PyResult>; pub type ModuleExec = fn(&VirtualMachine, &Py) -> PyResult<()>; -#[derive(Clone, Copy, Default)] +#[derive(Default)] pub struct PyModuleSlots { pub create: Option, pub exec: Option, @@ -83,7 +83,7 @@ impl PyModuleDef { #[allow(clippy::new_without_default)] // avoid Default implementation #[pyclass(module = false, name = "module")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct PyModule { // PyObject *md_dict; pub def: Option<&'static PyModuleDef>, diff --git a/crates/vm/src/builtins/namespace.rs b/crates/vm/src/builtins/namespace.rs index 5cd699aca33..2cc1693302a 100644 --- a/crates/vm/src/builtins/namespace.rs +++ b/crates/vm/src/builtins/namespace.rs @@ -14,8 +14,8 @@ use crate::{ /// /// SimpleNamespace(**kwargs) #[pyclass(module = "types", name = "SimpleNamespace")] -#[derive(Copy, Clone, Debug, Default)] -pub struct PyNamespace; +#[derive(Debug, Default)] +pub struct PyNamespace {} impl PyPayload for PyNamespace { #[inline] diff --git a/crates/vm/src/builtins/object.rs b/crates/vm/src/builtins/object.rs index 54abd327884..eb9d226acb4 100644 --- a/crates/vm/src/builtins/object.rs +++ b/crates/vm/src/builtins/object.rs @@ -18,7 +18,7 @@ use itertools::Itertools; /// When called, it accepts no arguments and returns a new featureless /// instance that has no instance attributes and cannot be given any. #[pyclass(module = false, name = "object")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct PyBaseObject; impl PyPayload for PyBaseObject { diff --git a/crates/vm/src/builtins/singletons.rs b/crates/vm/src/builtins/singletons.rs index 77d6c78bce2..169104efeb3 100644 --- a/crates/vm/src/builtins/singletons.rs +++ b/crates/vm/src/builtins/singletons.rs @@ -9,7 +9,7 @@ use crate::{ }; #[pyclass(module = false, name = "NoneType")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct PyNone; impl PyPayload for PyNone { @@ -75,7 +75,7 @@ impl AsNumber for PyNone { } #[pyclass(module = false, name = "NotImplementedType")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct PyNotImplemented; impl PyPayload for PyNotImplemented { diff --git a/crates/vm/src/builtins/slice.rs b/crates/vm/src/builtins/slice.rs index 5958aa58198..3aa23b0746c 100644 --- a/crates/vm/src/builtins/slice.rs +++ b/crates/vm/src/builtins/slice.rs @@ -301,7 +301,7 @@ impl Representable for PySlice { } #[pyclass(module = false, name = "EllipsisType")] -#[derive(Copy, Clone, Debug)] +#[derive(Debug)] pub struct PyEllipsis; impl PyPayload for PyEllipsis { diff --git a/crates/vm/src/builtins/zip.rs b/crates/vm/src/builtins/zip.rs index 0c939da35f7..ee3ecb57b27 100644 --- a/crates/vm/src/builtins/zip.rs +++ b/crates/vm/src/builtins/zip.rs @@ -24,7 +24,7 @@ impl PyPayload for PyZip { } } -#[derive(Clone, Copy, FromArgs)] +#[derive(FromArgs)] pub struct PyZipNewArgs { #[pyarg(named, optional)] strict: OptionalArg, diff --git a/crates/vm/src/dict_inner.rs b/crates/vm/src/dict_inner.rs index e99c4a4e2c2..f2a379d99a5 100644 --- a/crates/vm/src/dict_inner.rs +++ b/crates/vm/src/dict_inner.rs @@ -124,7 +124,7 @@ struct DictEntry { } static_assertions::assert_eq_size!(DictEntry, Option>); -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq)] pub struct DictSize { indices_size: usize, pub entries_size: usize, diff --git a/crates/vm/src/function/method.rs b/crates/vm/src/function/method.rs index f5dad58491d..6440fd801fc 100644 --- a/crates/vm/src/function/method.rs +++ b/crates/vm/src/function/method.rs @@ -63,7 +63,7 @@ macro_rules! define_methods { }; } -#[derive(Clone, Copy)] +#[derive(Clone)] pub struct PyMethodDef { pub name: &'static str, // TODO: interned pub func: &'static dyn PyNativeFn, @@ -270,7 +270,7 @@ impl core::fmt::Debug for PyMethodDef { // This is not a part of CPython API. // But useful to support dynamically generated methods #[pyclass(name, module = false, ctx = "method_def")] -#[derive(Clone, Copy, Debug)] +#[derive(Debug)] pub struct HeapMethodDef { method: PyMethodDef, } diff --git a/crates/vm/src/function/number.rs b/crates/vm/src/function/number.rs index f1ac38fc553..b53208bcd93 100644 --- a/crates/vm/src/function/number.rs +++ b/crates/vm/src/function/number.rs @@ -14,7 +14,7 @@ use num_traits::PrimInt; /// method, this method will first be called to convert the object into a float. /// If `__complex__()` is not defined then it falls back to `__float__()`. If /// `__float__()` is not defined it falls back to `__index__()`. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Debug, PartialEq)] #[repr(transparent)] pub struct ArgIntoComplex { value: Complex64, @@ -52,7 +52,7 @@ impl TryFromObject for ArgIntoComplex { /// If the object is not a Python floating point object but has a `__float__()` /// method, this method will first be called to convert the object into a float. /// If `__float__()` is not defined then it falls back to `__index__()`. -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Debug, PartialEq)] #[repr(transparent)] pub struct ArgIntoFloat { value: f64, @@ -95,7 +95,7 @@ impl TryFromObject for ArgIntoFloat { /// By default an object is considered true unless its class defines either a /// `__bool__()` method that returns False or a `__len__()` method that returns /// zero, when called with the object. -#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] +#[derive(Debug, Default, PartialEq, Eq)] pub struct ArgIntoBool { value: bool, } diff --git a/crates/vm/src/protocol/buffer.rs b/crates/vm/src/protocol/buffer.rs index 34fe56ae549..0fe4d15458b 100644 --- a/crates/vm/src/protocol/buffer.rs +++ b/crates/vm/src/protocol/buffer.rs @@ -14,7 +14,6 @@ use alloc::borrow::Cow; use core::{fmt::Debug, ops::Range}; use itertools::Itertools; -#[derive(Clone, Copy)] pub struct BufferMethods { pub obj_bytes: fn(&PyBuffer) -> BorrowedValue<'_, [u8]>, pub obj_bytes_mut: fn(&PyBuffer) -> BorrowedValueMut<'_, [u8]>, diff --git a/crates/vm/src/protocol/mapping.rs b/crates/vm/src/protocol/mapping.rs index e7af8e53be7..6c200043e35 100644 --- a/crates/vm/src/protocol/mapping.rs +++ b/crates/vm/src/protocol/mapping.rs @@ -48,7 +48,7 @@ impl PyMappingSlots { } #[allow(clippy::type_complexity)] -#[derive(Clone, Copy, Default)] +#[derive(Default)] pub struct PyMappingMethods { pub length: Option, &VirtualMachine) -> PyResult>, pub subscript: Option, &PyObject, &VirtualMachine) -> PyResult>, diff --git a/crates/vm/src/protocol/sequence.rs b/crates/vm/src/protocol/sequence.rs index f3d7f644ffc..cee46a29089 100644 --- a/crates/vm/src/protocol/sequence.rs +++ b/crates/vm/src/protocol/sequence.rs @@ -70,7 +70,7 @@ impl PySequenceSlots { } #[allow(clippy::type_complexity)] -#[derive(Clone, Copy, Default)] +#[derive(Default)] pub struct PySequenceMethods { pub length: Option, &VirtualMachine) -> PyResult>, pub concat: Option, &PyObject, &VirtualMachine) -> PyResult>, diff --git a/crates/vm/src/sliceable.rs b/crates/vm/src/sliceable.rs index 3be8c7629ca..e416f5a1b49 100644 --- a/crates/vm/src/sliceable.rs +++ b/crates/vm/src/sliceable.rs @@ -252,7 +252,6 @@ impl SliceableSequenceOp for [T] { } } -#[derive(Clone, Copy)] pub enum SequenceIndex { Int(isize), Slice(SaturatedSlice), @@ -404,7 +403,6 @@ impl SaturatedSlice { } } -#[derive(Clone, Copy)] pub struct SaturatedSliceIter { index: isize, step: isize, diff --git a/crates/vm/src/stdlib/marshal.rs b/crates/vm/src/stdlib/marshal.rs index 53a0b4b2864..cf7abe65194 100644 --- a/crates/vm/src/stdlib/marshal.rs +++ b/crates/vm/src/stdlib/marshal.rs @@ -25,7 +25,6 @@ mod decl { #[pyattr(name = "version")] use marshal::FORMAT_VERSION; - #[derive(Clone, Copy)] pub struct DumpError; impl marshal::Dumpable for PyObjectRef { diff --git a/crates/vm/src/stdlib/os.rs b/crates/vm/src/stdlib/os.rs index f492c9a2627..691cb068605 100644 --- a/crates/vm/src/stdlib/os.rs +++ b/crates/vm/src/stdlib/os.rs @@ -35,7 +35,7 @@ impl crate::convert::IntoPyException for rustix::io::Errno { } #[allow(dead_code)] -#[derive(FromArgs, Default, Copy, Clone)] +#[derive(FromArgs, Default)] pub struct TargetIsDirectory { #[pyarg(any, default = false)] pub(crate) target_is_directory: bool, diff --git a/crates/vm/src/stdlib/typevar.rs b/crates/vm/src/stdlib/typevar.rs index e3d3958ca04..36f2b170023 100644 --- a/crates/vm/src/stdlib/typevar.rs +++ b/crates/vm/src/stdlib/typevar.rs @@ -988,7 +988,7 @@ pub(crate) mod typevar { #[pyattr] #[pyclass(name = "Generic", module = "typing")] - #[derive(Copy, Clone, Debug, PyPayload)] + #[derive(Debug, PyPayload)] #[allow(dead_code)] pub struct Generic; diff --git a/crates/vm/src/stdlib/typing.rs b/crates/vm/src/stdlib/typing.rs index c82ff3dbb54..6938bca8bbb 100644 --- a/crates/vm/src/stdlib/typing.rs +++ b/crates/vm/src/stdlib/typing.rs @@ -49,7 +49,7 @@ pub(crate) mod decl { } #[pyclass(no_attr, name = "NoDefaultType", module = "typing")] - #[derive(Clone, Copy, Debug, PyPayload)] + #[derive(Debug, PyPayload)] pub struct NoDefault; #[pyclass(with(Constructor, Representable), flags(BASETYPE))]