aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/source_binder.rs
diff options
context:
space:
mode:
authorJeremy Kolb <[email protected]>2019-01-28 14:26:32 +0000
committerJeremy Kolb <[email protected]>2019-01-30 00:13:02 +0000
commit3c17643b3085682a695f0e6d80483edc00d04cb3 (patch)
tree2e76d7be4f703a46608078228124285bc2c94e21 /crates/ra_hir/src/source_binder.rs
parent48d2acb297459fb06cbb49bdce2eccb4c2591714 (diff)
Go to Implementation for structs and enums
Diffstat (limited to 'crates/ra_hir/src/source_binder.rs')
-rw-r--r--crates/ra_hir/src/source_binder.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/crates/ra_hir/src/source_binder.rs b/crates/ra_hir/src/source_binder.rs
index f523f0647..589efd023 100644
--- a/crates/ra_hir/src/source_binder.rs
+++ b/crates/ra_hir/src/source_binder.rs
@@ -13,7 +13,7 @@ use ra_syntax::{
13}; 13};
14 14
15use crate::{ 15use crate::{
16 HirDatabase, Function, ModuleDef, 16 HirDatabase, Function, ModuleDef, Struct, Enum,
17 AsName, Module, HirFileId, 17 AsName, Module, HirFileId,
18 ids::{LocationCtx, SourceFileItemId}, 18 ids::{LocationCtx, SourceFileItemId},
19}; 19};
@@ -128,6 +128,28 @@ pub fn function_from_child_node(
128 function_from_source(db, file_id, fn_def) 128 function_from_source(db, file_id, fn_def)
129} 129}
130 130
131pub fn struct_from_module(
132 db: &impl HirDatabase,
133 module: Module,
134 struct_def: &ast::StructDef,
135) -> Struct {
136 let (file_id, _) = module.definition_source(db);
137 let file_id = file_id.into();
138 let ctx = LocationCtx::new(db, module, file_id);
139 Struct {
140 id: ctx.to_def(struct_def),
141 }
142}
143
144pub fn enum_from_module(db: &impl HirDatabase, module: Module, enum_def: &ast::EnumDef) -> Enum {
145 let (file_id, _) = module.definition_source(db);
146 let file_id = file_id.into();
147 let ctx = LocationCtx::new(db, module, file_id);
148 Enum {
149 id: ctx.to_def(enum_def),
150 }
151}
152
131pub fn macro_symbols(db: &impl HirDatabase, file_id: FileId) -> Vec<(SmolStr, TextRange)> { 153pub fn macro_symbols(db: &impl HirDatabase, file_id: FileId) -> Vec<(SmolStr, TextRange)> {
132 let module = match module_from_file_id(db, file_id) { 154 let module = match module_from_file_id(db, file_id) {
133 Some(it) => it, 155 Some(it) => it,