From 81a45ca1b3606d2c328740aa7e2dc989b9e128a5 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 16 Jan 2020 16:08:46 +0100 Subject: Make FromSource private --- crates/ra_ide/src/references/classify.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide/src/references') diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs index 4a6e11e27..dcffc3df2 100644 --- a/crates/ra_ide/src/references/classify.rs +++ b/crates/ra_ide/src/references/classify.rs @@ -1,6 +1,6 @@ //! Functions that are used to classify an element from its definition or reference. -use hir::{FromSource, InFile, Module, ModuleSource, PathResolution, SourceBinder}; +use hir::{InFile, Module, ModuleSource, PathResolution, SourceBinder}; use ra_prof::profile; use ra_syntax::{ast, match_ast, AstNode}; use test_utils::tested_by; @@ -101,7 +101,7 @@ pub(crate) fn classify_name( }, ast::MacroCall(it) => { let src = name.with_value(it); - let def = hir::MacroDef::from_source(sb.db, src.clone())?; + let def = sb.to_def(src.clone())?; let module_src = ModuleSource::from_child_node(sb.db, src.as_ref().map(|it| it.syntax())); let module = Module::from_definition(sb.db, src.with_value(module_src))?; -- cgit v1.2.3 From 7aa627fe582e8811e9e98b58c8a6da80054ba2e3 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 16 Jan 2020 16:37:51 +0100 Subject: Move more stuff to SourceBinder --- crates/ra_ide/src/references/classify.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide/src/references') diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs index dcffc3df2..82a18a0a5 100644 --- a/crates/ra_ide/src/references/classify.rs +++ b/crates/ra_ide/src/references/classify.rs @@ -22,7 +22,7 @@ pub(crate) fn classify_name( match parent { ast::BindPat(it) => { let src = name.with_value(it); - let local = hir::Local::from_source(sb.db, src)?; + let local = sb.to_def(src)?; Some(NameDefinition { visibility: None, container: local.module(sb.db), @@ -114,7 +114,7 @@ pub(crate) fn classify_name( }, ast::TypeParam(it) => { let src = name.with_value(it); - let def = hir::TypeParam::from_source(sb.db, src)?; + let def = sb.to_def(src)?; Some(NameDefinition { visibility: None, container: def.module(sb.db), -- cgit v1.2.3 From 9a6c26e34806a05260170029ace4b64adf484a23 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 16 Jan 2020 16:53:11 +0100 Subject: Move module to SourceBinder --- crates/ra_ide/src/references/classify.rs | 2 +- crates/ra_ide/src/references/rename.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide/src/references') diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs index 82a18a0a5..cb7da1fff 100644 --- a/crates/ra_ide/src/references/classify.rs +++ b/crates/ra_ide/src/references/classify.rs @@ -42,7 +42,7 @@ pub(crate) fn classify_name( hir::Module::from_definition(sb.db, src) } else { let src = name.with_value(it); - hir::Module::from_declaration(sb.db, src) + sb.to_def(src) } }?; Some(from_module_def(sb.db, def.into(), None)) diff --git a/crates/ra_ide/src/references/rename.rs b/crates/ra_ide/src/references/rename.rs index e02985dcd..626efb603 100644 --- a/crates/ra_ide/src/references/rename.rs +++ b/crates/ra_ide/src/references/rename.rs @@ -63,7 +63,7 @@ fn rename_mod( let mut source_file_edits = Vec::new(); let mut file_system_edits = Vec::new(); let module_src = hir::InFile { file_id: position.file_id.into(), value: ast_module.clone() }; - if let Some(module) = hir::Module::from_declaration(db, module_src) { + if let Some(module) = hir::SourceBinder::new(db).to_def(module_src) { let src = module.definition_source(db); let file_id = src.file_id.original_file(db); match src.value { -- cgit v1.2.3 From 595b06a1b8fcd215c828d65ee1dd1a30c2697de9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 16 Jan 2020 17:33:07 +0100 Subject: Create modules via SourceBinder --- crates/ra_ide/src/references/classify.rs | 22 ++++++---------------- crates/ra_ide/src/references/name_definition.rs | 2 ++ 2 files changed, 8 insertions(+), 16 deletions(-) (limited to 'crates/ra_ide/src/references') diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs index cb7da1fff..46cba30a3 100644 --- a/crates/ra_ide/src/references/classify.rs +++ b/crates/ra_ide/src/references/classify.rs @@ -1,6 +1,6 @@ //! Functions that are used to classify an element from its definition or reference. -use hir::{InFile, Module, ModuleSource, PathResolution, SourceBinder}; +use hir::{InFile, PathResolution, SourceBinder}; use ra_prof::profile; use ra_syntax::{ast, match_ast, AstNode}; use test_utils::tested_by; @@ -35,16 +35,7 @@ pub(crate) fn classify_name( Some(from_struct_field(sb.db, field)) }, ast::Module(it) => { - let def = { - if !it.has_semi() { - let ast = hir::ModuleSource::Module(it); - let src = name.with_value(ast); - hir::Module::from_definition(sb.db, src) - } else { - let src = name.with_value(it); - sb.to_def(src) - } - }?; + let def = sb.to_def(name.with_value(it))?; Some(from_module_def(sb.db, def.into(), None)) }, ast::StructDef(it) => { @@ -103,8 +94,7 @@ pub(crate) fn classify_name( let src = name.with_value(it); let def = sb.to_def(src.clone())?; - let module_src = ModuleSource::from_child_node(sb.db, src.as_ref().map(|it| it.syntax())); - let module = Module::from_definition(sb.db, src.with_value(module_src))?; + let module = sb.to_module_def(src.file_id.original_file(sb.db))?; Some(NameDefinition { visibility: None, @@ -157,10 +147,9 @@ pub(crate) fn classify_name_ref( } } - let ast = ModuleSource::from_child_node(sb.db, name_ref.with_value(&parent)); // FIXME: find correct container and visibility for each case - let container = Module::from_definition(sb.db, name_ref.with_value(ast))?; let visibility = None; + let container = sb.to_module_def(name_ref.file_id.original_file(sb.db))?; if let Some(macro_call) = parent.ancestors().find_map(ast::MacroCall::cast) { tested_by!(goto_def_for_macros); @@ -178,12 +167,13 @@ pub(crate) fn classify_name_ref( PathResolution::Def(def) => Some(from_module_def(sb.db, def, Some(container))), PathResolution::AssocItem(item) => Some(from_assoc_item(sb.db, item)), PathResolution::Local(local) => { - let container = local.module(sb.db); let kind = NameKind::Local(local); + let container = local.module(sb.db); Some(NameDefinition { kind, container, visibility: None }) } PathResolution::TypeParam(par) => { let kind = NameKind::TypeParam(par); + let container = par.module(sb.db); Some(NameDefinition { kind, container, visibility }) } PathResolution::Macro(def) => { diff --git a/crates/ra_ide/src/references/name_definition.rs b/crates/ra_ide/src/references/name_definition.rs index 8c67c8863..1e4226ab9 100644 --- a/crates/ra_ide/src/references/name_definition.rs +++ b/crates/ra_ide/src/references/name_definition.rs @@ -25,6 +25,8 @@ pub enum NameKind { #[derive(PartialEq, Eq)] pub(crate) struct NameDefinition { pub visibility: Option, + /// FIXME: this doesn't really make sense. For example, builtin types don't + /// really have a module. pub container: Module, pub kind: NameKind, } -- cgit v1.2.3