diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-02-02 10:38:03 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-02-02 10:38:03 +0000 |
commit | dce7dc44be948bb6b73b79ce284ec2eb83811ae8 (patch) | |
tree | 4e223570d7ed75e24156d5452ac79ef1f1c53bf4 | |
parent | 96bd4f5704f447800067ce69d50ab8b4b2315fdb (diff) | |
parent | d3188769e41a051df7f02395b43f11e5cedede0b (diff) |
Merge #2978
2978: Auto import functions r=flodiebold a=SomeoneToIgnore
A follow up for https://github.com/rust-analyzer/rust-analyzer/pull/2887#issuecomment-577832601
I've used the logic for conversion from the https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_hir_def/src/item_scope.rs#L169 method.
I'm not fond of how the conversion is implemented and for my needs, I can simply replace the `hir_def::item_scope::ItemInNs::Types(item.into())` with `hir_def::item_scope::ItemInNs::Values(item.into())` and it will work, so I can use this approach instead, if you find it a better one.
Co-authored-by: Kirill Bulatov <[email protected]>
-rw-r--r-- | crates/ra_assists/src/assists/auto_import.rs | 24 | ||||
-rw-r--r-- | crates/ra_hir/src/code_model.rs | 17 |
2 files changed, 35 insertions, 6 deletions
diff --git a/crates/ra_assists/src/assists/auto_import.rs b/crates/ra_assists/src/assists/auto_import.rs index 932a52bff..8c483e2da 100644 --- a/crates/ra_assists/src/assists/auto_import.rs +++ b/crates/ra_assists/src/assists/auto_import.rs | |||
@@ -211,4 +211,28 @@ mod tests { | |||
211 | }", | 211 | }", |
212 | ); | 212 | ); |
213 | } | 213 | } |
214 | |||
215 | #[test] | ||
216 | fn function_import() { | ||
217 | check_assist_with_imports_locator( | ||
218 | auto_import, | ||
219 | TestImportsLocator::new, | ||
220 | r" | ||
221 | test_function<|> | ||
222 | |||
223 | pub mod PubMod { | ||
224 | pub fn test_function() {}; | ||
225 | } | ||
226 | ", | ||
227 | r" | ||
228 | use PubMod::test_function; | ||
229 | |||
230 | test_function<|> | ||
231 | |||
232 | pub mod PubMod { | ||
233 | pub fn test_function() {}; | ||
234 | } | ||
235 | ", | ||
236 | ); | ||
237 | } | ||
214 | } | 238 | } |
diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 500b34c17..eaacf8c9e 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs | |||
@@ -119,7 +119,7 @@ impl_froms!( | |||
119 | BuiltinType | 119 | BuiltinType |
120 | ); | 120 | ); |
121 | 121 | ||
122 | pub use hir_def::{attr::Attrs, visibility::Visibility, AssocItemId}; | 122 | pub use hir_def::{attr::Attrs, item_scope::ItemInNs, visibility::Visibility, AssocItemId}; |
123 | use rustc_hash::FxHashSet; | 123 | use rustc_hash::FxHashSet; |
124 | 124 | ||
125 | impl Module { | 125 | impl Module { |
@@ -238,11 +238,16 @@ impl Module { | |||
238 | item: ModuleDef, | 238 | item: ModuleDef, |
239 | ) -> Option<hir_def::path::ModPath> { | 239 | ) -> Option<hir_def::path::ModPath> { |
240 | // FIXME expose namespace choice | 240 | // FIXME expose namespace choice |
241 | hir_def::find_path::find_path( | 241 | hir_def::find_path::find_path(db, determine_item_namespace(item), self.into()) |
242 | db, | 242 | } |
243 | hir_def::item_scope::ItemInNs::Types(item.into()), | 243 | } |
244 | self.into(), | 244 | |
245 | ) | 245 | fn determine_item_namespace(module_def: ModuleDef) -> ItemInNs { |
246 | match module_def { | ||
247 | ModuleDef::Static(_) | ModuleDef::Const(_) | ModuleDef::Function(_) => { | ||
248 | ItemInNs::Values(module_def.into()) | ||
249 | } | ||
250 | _ => ItemInNs::Types(module_def.into()), | ||
246 | } | 251 | } |
247 | } | 252 | } |
248 | 253 | ||