aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-11-15 22:36:10 +0000
committerGitHub <[email protected]>2019-11-15 22:36:10 +0000
commit69f3b01dc5dd70d9bdf6de4d859ad593a689395d (patch)
treec847ded853cea83c2f64c6ffc20d1ad4138613fb /crates/ra_ide_api/src
parentad10c4b8e2d81af7fc35a466cd434e2c3952bfd8 (diff)
parent06984ed1164d7607f89f9a6f4893dd05ec058a99 (diff)
Merge #2268
2268: Handle ast::MacroCall in classify_name and impl FromSource for MacroDef r=matklad a=kjeremy Fixes #2260 Co-authored-by: kjeremy <[email protected]>
Diffstat (limited to 'crates/ra_ide_api/src')
-rw-r--r--crates/ra_ide_api/src/references.rs15
-rw-r--r--crates/ra_ide_api/src/references/classify.rs14
2 files changed, 28 insertions, 1 deletions
diff --git a/crates/ra_ide_api/src/references.rs b/crates/ra_ide_api/src/references.rs
index 9cb9433e7..faa88d988 100644
--- a/crates/ra_ide_api/src/references.rs
+++ b/crates/ra_ide_api/src/references.rs
@@ -369,6 +369,21 @@ mod tests {
369 assert_eq!(refs.len(), 2); 369 assert_eq!(refs.len(), 2);
370 } 370 }
371 371
372 #[test]
373 fn test_find_all_refs_macro_def() {
374 let code = r#"
375 #[macro_export]
376 macro_rules! m1<|> { () => (()) }
377
378 fn foo() {
379 m1();
380 m1();
381 }"#;
382
383 let refs = get_all_refs(code);
384 assert_eq!(refs.len(), 3);
385 }
386
372 fn get_all_refs(text: &str) -> ReferenceSearchResult { 387 fn get_all_refs(text: &str) -> ReferenceSearchResult {
373 let (analysis, position) = single_file_with_position(text); 388 let (analysis, position) = single_file_with_position(text);
374 analysis.find_all_refs(position, None).unwrap().unwrap() 389 analysis.find_all_refs(position, None).unwrap().unwrap()
diff --git a/crates/ra_ide_api/src/references/classify.rs b/crates/ra_ide_api/src/references/classify.rs
index b5e35e29f..0eeaa7f38 100644
--- a/crates/ra_ide_api/src/references/classify.rs
+++ b/crates/ra_ide_api/src/references/classify.rs
@@ -21,7 +21,6 @@ pub(crate) fn classify_name(
21 let parent = name.syntax().parent()?; 21 let parent = name.syntax().parent()?;
22 let file_id = file_id.into(); 22 let file_id = file_id.into();
23 23
24 // FIXME: add ast::MacroCall(it)
25 match_ast! { 24 match_ast! {
26 match parent { 25 match parent {
27 ast::BindPat(it) => { 26 ast::BindPat(it) => {
@@ -104,6 +103,19 @@ pub(crate) fn classify_name(
104 Some(from_module_def(db, def.into(), None)) 103 Some(from_module_def(db, def.into(), None))
105 } 104 }
106 }, 105 },
106 ast::MacroCall(it) => {
107 let src = hir::Source { file_id, ast: it};
108 let def = hir::MacroDef::from_source(db, src.clone())?;
109
110 let module_src = ModuleSource::from_child_node(db, src.as_ref().map(|it| it.syntax()));
111 let module = Module::from_definition(db, Source::new(file_id, module_src))?;
112
113 Some(NameDefinition {
114 visibility: None,
115 container: module,
116 kind: NameKind::Macro(def),
117 })
118 },
107 _ => None, 119 _ => None,
108 } 120 }
109 } 121 }