Skip to content

unused_qualifications lint confused by pub use Foo::* #138770

Open
@nnethercote

Description

@nnethercote

I tried enabling unused_qualifications for the compiler itself. It mostly works, but gets confused by pub use Foo::* forms.

Here's an example from compiler/rustc_ast/src/token.rs, which has this:

pub use LitKind::*;

followed by this:

pub enum LitKind { 
    Bool, // AST only, must never appear in a `Token`
    Byte,
    Char,
    Integer, // e.g. `1`, `1u8`, `1f32`
    Float,   // e.g. `1.`, `1.0`, `1e3f32`
    Str,
    StrRaw(u8), // raw string delimited by `n` hash symbols
    ByteStr,
    ByteStrRaw(u8), // raw byte string delimited by `n` hash symbols
    CStr,
    CStrRaw(u8),
    Err(ErrorGuaranteed),
}   

It emits a bogus error for every variant of the enum. Here's one example:

error: unnecessary qualification
   --> compiler/rustc_ast/src/token.rs:160:10
    |
160 |   pub enum LitKind {
    |  __________^
161 | |     Bool, // AST only, must never appear in a `Token`
162 | |     Byte,
163 | |     Char,
164 | |     Integer, // e.g. `1`, `1u8`, `1f32`
    | |___________^
    |
help: remove the unnecessary path segments
    |
160 - pub enum LitKind {
161 -     Bool, // AST only, must never appear in a `Token`
162 -     Byte,
163 -     Char,
164 -     Integer, // e.g. `1`, `1u8`, `1f32`
160 + pub enum Integer, // e.g. `1`, `1u8`, `1f32`
    |

There is no qualification present, and the help suggestion is nonsense.

I was unable to reproduce this behaviour in a standalone test case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.C-bugCategory: This is a bug.L-unused_qualificationsLint: unused_qualificationsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions