diff options
author | Lenard Pratt <[email protected]> | 2019-04-15 11:01:29 +0100 |
---|---|---|
committer | Lenard Pratt <[email protected]> | 2019-04-22 21:35:44 +0100 |
commit | ce211434a6501e88cb83462f2443db085f1557d3 (patch) | |
tree | 2b0b2118fa38046d7b527ea1ea81d1c01a9a8207 /crates/ra_hir/src/resolve.rs | |
parent | afaeb18910414166801e3ca51272cfa3661175a4 (diff) |
Added macro resolution and expansion
Diffstat (limited to 'crates/ra_hir/src/resolve.rs')
-rw-r--r-- | crates/ra_hir/src/resolve.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/crates/ra_hir/src/resolve.rs b/crates/ra_hir/src/resolve.rs index f2c85eb66..1def032f9 100644 --- a/crates/ra_hir/src/resolve.rs +++ b/crates/ra_hir/src/resolve.rs | |||
@@ -6,6 +6,7 @@ use rustc_hash::FxHashMap; | |||
6 | use crate::{ | 6 | use crate::{ |
7 | ModuleDef, | 7 | ModuleDef, |
8 | code_model_api::Crate, | 8 | code_model_api::Crate, |
9 | MacroDefId, | ||
9 | db::HirDatabase, | 10 | db::HirDatabase, |
10 | name::{Name, KnownName}, | 11 | name::{Name, KnownName}, |
11 | nameres::{PerNs, CrateDefMap, CrateModuleId}, | 12 | nameres::{PerNs, CrateDefMap, CrateModuleId}, |
@@ -130,6 +131,10 @@ impl Resolver { | |||
130 | resolution | 131 | resolution |
131 | } | 132 | } |
132 | 133 | ||
134 | pub fn resolve_macro_call(&self, name: &Name) -> Option<&MacroDefId> { | ||
135 | self.module().and_then(|(module, _)| module.find_macro(name)) | ||
136 | } | ||
137 | |||
133 | /// Returns the resolved path segments | 138 | /// Returns the resolved path segments |
134 | /// Which may be fully resolved, empty or partially resolved. | 139 | /// Which may be fully resolved, empty or partially resolved. |
135 | pub(crate) fn resolve_path_segments(&self, db: &impl HirDatabase, path: &Path) -> PathResult { | 140 | pub(crate) fn resolve_path_segments(&self, db: &impl HirDatabase, path: &Path) -> PathResult { |
@@ -192,7 +197,7 @@ impl Resolver { | |||
192 | .flatten() | 197 | .flatten() |
193 | } | 198 | } |
194 | 199 | ||
195 | fn module(&self) -> Option<(&CrateDefMap, CrateModuleId)> { | 200 | pub(crate) fn module(&self) -> Option<(&CrateDefMap, CrateModuleId)> { |
196 | self.scopes.iter().rev().find_map(|scope| match scope { | 201 | self.scopes.iter().rev().find_map(|scope| match scope { |
197 | Scope::ModuleScope(m) => Some((&*m.crate_def_map, m.module_id)), | 202 | Scope::ModuleScope(m) => Some((&*m.crate_def_map, m.module_id)), |
198 | 203 | ||