Skip to content

Unused import of trait is not warned about if similar trait is defined and used inside the crate #25730

Closed
@jtepe

Description

@jtepe

If I import a trait from an external crate into my crate and not use it, the compiler warns me about the unused import. But if I have a trait inside my crate with the same method and implement it, the compiler does not emit a warning about the unused trait from outside.

Let's say I have this trait in its own library crate:

// library crate 'testtrait'
pub trait OutsideTrait {
    fn method(&self) -> String;
}

In my executable crate I have the following code:

// executable crate
extern crate testtrait;

use testtrait::OutsideTrait;

trait InsideTrait {
    fn function(&self) -> String;
}

#[derive(Debug)]
struct Foo;

impl InsideTrait for Foo {
    fn function(&self) -> String {
        format!("{:?}", *self)
    }
}

fn main() {
    let b = Foo;
    println!("{}", b.function());
}

Now the compiler warns me about the unused import testtrait::OutsideTrait
However, if I change the name of method to function in order to make OutsideTrait match InsideTrait, the compiler will not warn me about the unused import of testtrait::OutsideTrait.

pub trait OutsideTrait {
    fn function(&self) -> String;
}

This happens regardless of whether I add an additional parameter to the function in OutsideTrait or InsideTrait.
Note, that if I implement neither trait, the compiler will again warn me about the unused import of OutsideTrait, which is totally fine.

The warning is not emitted by the compiler but the issue is still valid. OutsideTrait is an unused import and should be reported as such.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.A-resolveArea: Name/path resolution done by `rustc_resolve` specifically

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions