rust-lang / rust-lang/rust-analyzer
Private item highlighted in imports instead of public macro with same name
Open
Nobody has claimed this yet.
C-bug
- Dominant language
- Rust
- Stars
- 16.9k
- Forks
- 2.2k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 72
Description
Repro:
// extern crate a;
mod export {}
#[macro_export]
macro_rules! export { () => {} }
// extern crate b;
use a::export;
// ^^^^^^
// highlighted as private `mod export` instead of the public `macro_rules! export`,
// does not happen if the macro is a function instead
cargo new a --lib
cd a
cargo new b --lib
printf '[workspace]\nmembers = ["b"]\n' >> Cargo.toml
printf 'a.path = ".."\n' >> b/Cargo.toml
printf 'mod export {}\n#[macro_export]\nmacro_rules! export { () => {} }\n' > src/lib.rs
printf 'use a::export;\n' > b/src/lib.rs
rust-analyzer version: 0.3.1575-standalone
rustc version: rustc 1.72.0-nightly (839e9a6e1 2023-07-02)
relevant settings: N/A
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the workspace using the provided commands, with the macro in src/lib.rs and the import in b/src/lib.rs. Start by inspecting how rust-analyzer resolves and highlights the import, then verify that the public macro is selected instead of the private module while the workspace is analyzed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 52/100