rust-lang / rust-lang/rust-clippy

Lint path or import used in macro

Open
#9,104 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-lint T-macros
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

What it does

Lint any instances of paths to items or use statements which do not use $crate or global paths (such as ::std::vec::Vec)

Lint Name

macro_use_path

Category

correctness

Advantage
  • Since imports and paths in macros are unhygienic, you should use $crate or global paths.
  • This will make macros used by other crates less likely to fail to compile.
Drawbacks
  • Internal macros may wish to avoid this requirement
Example
pub trait Delegate {}

#[macro_export]
macro_rules! impl_delegate {
    ($ty: ty) => {
        impl Delegate for $ty {}
    }
}

Could be written as:

pub trait Delegate {}

#[macro_export]
macro_rules! impl_delegate {
    impl $crate::Delegate for $ty {}
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start from the proposed macro_use_path lint name and review the examples and stated correctness rationale in this issue. No source file, test, or implementation entry point is identified; done means the lint detects non-$crate and non-global paths in macros while accounting for the noted internal-macro drawback.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.