diff options
| author | Patryk Wychowaniec <pwychowaniec@pm.me> | 2024-01-05 11:00:29 +0100 |
|---|---|---|
| committer | Patryk Wychowaniec <pwychowaniec@pm.me> | 2024-01-10 18:21:16 +0100 |
| commit | 76aaf17794c37cb134fc968d04e1982958af12fd (patch) | |
| tree | 709f98f259bb009f2304ab56fd8e1decf637be6e /crates/hir-def/src/nameres.rs | |
| parent | c84352a3467c7856e5c65b8e1a4c7710c2d5a756 (diff) | |
| download | rust-76aaf17794c37cb134fc968d04e1982958af12fd.tar.gz rust-76aaf17794c37cb134fc968d04e1982958af12fd.zip | |
Suggest `pub(crate)` imports
rust-analyzer has logic that discounts suggesting `use`s for private
imports, but that logic is unnecessarily strict - for instance given
this code:
```rust
mod foo {
pub struct Foo;
}
pub(crate) use self::foo::*;
mod bar {
fn main() {
Foo$0;
}
}
```
... RA will suggest to add `use crate::foo::Foo;`, which not only makes
the code overly verbose (especially in larger code bases), but also is
disjoint with what rustc itself suggests.
This commit adjusts the logic, so that `pub(crate)` imports are taken
into account when generating the suggestions; considering rustc's
behavior, I think this change doesn't warrant any extra configuration
flag.
Note that this is my first commit to RA, so I guess the approach taken
here might be suboptimal - certainly feels somewhat hacky, maybe there's
some better way of finding out the optimal import path 😅
Diffstat (limited to 'crates/hir-def/src/nameres.rs')
| -rw-r--r-- | crates/hir-def/src/nameres.rs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/crates/hir-def/src/nameres.rs b/crates/hir-def/src/nameres.rs index 52a981fd19e..a97f57f5531 100644 --- a/crates/hir-def/src/nameres.rs +++ b/crates/hir-def/src/nameres.rs @@ -332,7 +332,8 @@ impl DefMap { // NB: we use `None` as block here, which would be wrong for implicit // modules declared by blocks with items. At the moment, we don't use // this visibility for anything outside IDE, so that's probably OK. - let visibility = Visibility::Module(ModuleId { krate, local_id, block: None }); + let visibility = + Visibility::Module(ModuleId { krate, local_id, block: None }, Default::default()); let module_data = ModuleData::new( ModuleOrigin::BlockExpr { block: block.ast_id, id: block_id }, visibility, |
