diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_hir/src/source_binder.rs | 4 | ||||
-rw-r--r-- | crates/ra_ide_api/src/goto_definition.rs | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs index 152bc71bd..0008cb232 100644 --- a/crates/ra_hir/src/source_binder.rs +++ b/crates/ra_hir/src/source_binder.rs | |||
@@ -255,7 +255,9 @@ impl SourceAnalyzer { | |||
255 | 255 | ||
256 | let items = | 256 | let items = |
257 | self.resolver.resolve_module_path(db, &path).take_types().map(PathResolution::Def); | 257 | self.resolver.resolve_module_path(db, &path).take_types().map(PathResolution::Def); |
258 | types.or(values).or(items) | 258 | types.or(values).or(items).or_else(|| { |
259 | self.resolver.resolve_path_as_macro(db, &path).map(|def| PathResolution::Macro(def)) | ||
260 | }) | ||
259 | } | 261 | } |
260 | 262 | ||
261 | pub fn resolve_path(&self, db: &impl HirDatabase, path: &ast::Path) -> Option<PathResolution> { | 263 | pub fn resolve_path(&self, db: &impl HirDatabase, path: &ast::Path) -> Option<PathResolution> { |
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 1f3fa6c57..323faab33 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs | |||
@@ -316,6 +316,25 @@ mod tests { | |||
316 | } | 316 | } |
317 | 317 | ||
318 | #[test] | 318 | #[test] |
319 | fn goto_definition_works_for_macros_in_use_tree() { | ||
320 | check_goto( | ||
321 | " | ||
322 | //- /lib.rs | ||
323 | use foo::foo<|>; | ||
324 | |||
325 | //- /foo/lib.rs | ||
326 | #[macro_export] | ||
327 | macro_rules! foo { | ||
328 | () => { | ||
329 | {} | ||
330 | }; | ||
331 | } | ||
332 | ", | ||
333 | "foo MACRO_CALL FileId(2) [0; 66) [29; 32)", | ||
334 | ); | ||
335 | } | ||
336 | |||
337 | #[test] | ||
319 | fn goto_definition_works_for_methods() { | 338 | fn goto_definition_works_for_methods() { |
320 | covers!(goto_definition_works_for_methods); | 339 | covers!(goto_definition_works_for_methods); |
321 | check_goto( | 340 | check_goto( |