Skip to content

assigning_clones: makes code less readable and harder to maintain #12778

Description

@de-vri-es

Description

Following the assigning_clones lint makes code less readable.

There is a strong semantic hint in the = operator. It gives a visual indication that a value is being assigned to.

The clone_from() function does not have this visual hint. Using clone_from() makes code harder to read and as a consequence, harder to maintain.

Consider the two snippets:

self.foo = some_value.clone()
self.foo.clone_from(some_value);

The second snippet is much less clear. In isolation this may not seem like much, but in a real codebase this is bad.

Lints should not favor performance at the cost of maintainability. Especially considering that #[derive(Clone)] doesn't even implement clone_from() and the default clone_from() is implemented as *self = source.clone(): https://github.com/rust-lang/rust/blob/5ce96b1d0f6b5093955e7b6a70dfd877395c1d73/library/core/src/clone.rs#L169-L171

I suggest the lint is changed to be turned off by default.

Version

rustc 1.78.0 (9b00956e5 2024-04-29)
binary: rustc
commit-hash: 9b00956e56009bab2aa15d7bff10916599e3d6d6
commit-date: 2024-04-29
host: x86_64-unknown-linux-gnu
release: 1.78.0
LLVM version: 18.1.2

Additional Labels

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions