From 11577288c23b1f2de1aaba0137c9c2d6344b9a92 Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Sat, 14 Sep 2019 14:38:10 +0300 Subject: initial classify_name --- crates/ra_hir/src/from_source.rs | 60 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs index f80d8eb5f..e09414ca3 100644 --- a/crates/ra_hir/src/from_source.rs +++ b/crates/ra_hir/src/from_source.rs @@ -11,8 +11,9 @@ use crate::{ db::{AstDatabase, DefDatabase, HirDatabase}, ids::{AstItemDef, LocationCtx}, name::AsName, - Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, Module, - ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, VariantDef, + AssocItem, Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, + Module, ModuleDef, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, + VariantDef, }; pub trait FromSource: Sized { @@ -129,6 +130,61 @@ impl FromSource for StructField { } } +impl FromSource for AssocItem { + type Ast = ast::ImplItem; + fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { + macro_rules! def { + ($kind:ident, $ast:ident) => { + $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) + .and_then(|it| Some(AssocItem::from(it))) + }; + } + + match src.ast { + ast::ImplItem::FnDef(f) => def!(Function, f), + ast::ImplItem::ConstDef(c) => def!(Const, c), + ast::ImplItem::TypeAliasDef(a) => def!(TypeAlias, a), + } + } +} + +// not fully matched +impl FromSource for ModuleDef { + type Ast = ast::ModuleItem; + fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { + macro_rules! def { + ($kind:ident, $ast:ident) => { + $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) + .and_then(|it| Some(ModuleDef::from(it))) + }; + } + + match src.ast { + ast::ModuleItem::FnDef(f) => def!(Function, f), + ast::ModuleItem::ConstDef(c) => def!(Const, c), + ast::ModuleItem::TypeAliasDef(a) => def!(TypeAlias, a), + ast::ModuleItem::TraitDef(t) => def!(Trait, t), + ast::ModuleItem::StaticDef(s) => def!(Static, s), + ast::ModuleItem::StructDef(s) => { + let src = Source { file_id: src.file_id, ast: s }; + let s = Struct::from_source(db, src)?; + Some(ModuleDef::Adt(s.into())) + } + ast::ModuleItem::EnumDef(e) => { + let src = Source { file_id: src.file_id, ast: e }; + let e = Enum::from_source(db, src)?; + Some(ModuleDef::Adt(e.into())) + } + ast::ModuleItem::Module(ref m) if !m.has_semi() => { + let src = Source { file_id: src.file_id, ast: ModuleSource::Module(m.clone()) }; + let module = Module::from_definition(db, src)?; + Some(ModuleDef::Module(module)) + } + _ => None, + } + } +} + // FIXME: simplify it impl ModuleSource { pub fn from_position( -- cgit v1.2.3 From 0b5d0a41fde1ae03bc6643dad3b904f579f716b5 Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Thu, 3 Oct 2019 03:00:47 +0300 Subject: replace a chain of `if let` by macro --- crates/ra_hir/src/from_source.rs | 40 +--------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs index e09414ca3..df61c227a 100644 --- a/crates/ra_hir/src/from_source.rs +++ b/crates/ra_hir/src/from_source.rs @@ -12,8 +12,7 @@ use crate::{ ids::{AstItemDef, LocationCtx}, name::AsName, AssocItem, Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, - Module, ModuleDef, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, - VariantDef, + Module, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, VariantDef, }; pub trait FromSource: Sized { @@ -148,43 +147,6 @@ impl FromSource for AssocItem { } } -// not fully matched -impl FromSource for ModuleDef { - type Ast = ast::ModuleItem; - fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { - macro_rules! def { - ($kind:ident, $ast:ident) => { - $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) - .and_then(|it| Some(ModuleDef::from(it))) - }; - } - - match src.ast { - ast::ModuleItem::FnDef(f) => def!(Function, f), - ast::ModuleItem::ConstDef(c) => def!(Const, c), - ast::ModuleItem::TypeAliasDef(a) => def!(TypeAlias, a), - ast::ModuleItem::TraitDef(t) => def!(Trait, t), - ast::ModuleItem::StaticDef(s) => def!(Static, s), - ast::ModuleItem::StructDef(s) => { - let src = Source { file_id: src.file_id, ast: s }; - let s = Struct::from_source(db, src)?; - Some(ModuleDef::Adt(s.into())) - } - ast::ModuleItem::EnumDef(e) => { - let src = Source { file_id: src.file_id, ast: e }; - let e = Enum::from_source(db, src)?; - Some(ModuleDef::Adt(e.into())) - } - ast::ModuleItem::Module(ref m) if !m.has_semi() => { - let src = Source { file_id: src.file_id, ast: ModuleSource::Module(m.clone()) }; - let module = Module::from_definition(db, src)?; - Some(ModuleDef::Module(module)) - } - _ => None, - } - } -} - // FIXME: simplify it impl ModuleSource { pub fn from_position( -- cgit v1.2.3 From 121aa35f12d282066651d906ea9a8b2da8209605 Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Fri, 4 Oct 2019 03:20:14 +0300 Subject: return Declaration from classify_name_ref --- crates/ra_hir/src/from_source.rs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs index df61c227a..e09414ca3 100644 --- a/crates/ra_hir/src/from_source.rs +++ b/crates/ra_hir/src/from_source.rs @@ -12,7 +12,8 @@ use crate::{ ids::{AstItemDef, LocationCtx}, name::AsName, AssocItem, Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, - Module, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, VariantDef, + Module, ModuleDef, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, + VariantDef, }; pub trait FromSource: Sized { @@ -147,6 +148,43 @@ impl FromSource for AssocItem { } } +// not fully matched +impl FromSource for ModuleDef { + type Ast = ast::ModuleItem; + fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { + macro_rules! def { + ($kind:ident, $ast:ident) => { + $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) + .and_then(|it| Some(ModuleDef::from(it))) + }; + } + + match src.ast { + ast::ModuleItem::FnDef(f) => def!(Function, f), + ast::ModuleItem::ConstDef(c) => def!(Const, c), + ast::ModuleItem::TypeAliasDef(a) => def!(TypeAlias, a), + ast::ModuleItem::TraitDef(t) => def!(Trait, t), + ast::ModuleItem::StaticDef(s) => def!(Static, s), + ast::ModuleItem::StructDef(s) => { + let src = Source { file_id: src.file_id, ast: s }; + let s = Struct::from_source(db, src)?; + Some(ModuleDef::Adt(s.into())) + } + ast::ModuleItem::EnumDef(e) => { + let src = Source { file_id: src.file_id, ast: e }; + let e = Enum::from_source(db, src)?; + Some(ModuleDef::Adt(e.into())) + } + ast::ModuleItem::Module(ref m) if !m.has_semi() => { + let src = Source { file_id: src.file_id, ast: ModuleSource::Module(m.clone()) }; + let module = Module::from_definition(db, src)?; + Some(ModuleDef::Module(module)) + } + _ => None, + } + } +} + // FIXME: simplify it impl ModuleSource { pub fn from_position( -- cgit v1.2.3 From 835173d065dbe1fdd7369ea49336c0b785be8cb8 Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Sat, 12 Oct 2019 20:30:53 +0300 Subject: replace trait by a bunch of functions --- crates/ra_hir/src/from_source.rs | 60 ++-------------------------------------- 1 file changed, 2 insertions(+), 58 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs index e09414ca3..f80d8eb5f 100644 --- a/crates/ra_hir/src/from_source.rs +++ b/crates/ra_hir/src/from_source.rs @@ -11,9 +11,8 @@ use crate::{ db::{AstDatabase, DefDatabase, HirDatabase}, ids::{AstItemDef, LocationCtx}, name::AsName, - AssocItem, Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, - Module, ModuleDef, ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, - VariantDef, + Const, Crate, Enum, EnumVariant, FieldSource, Function, HasSource, ImplBlock, Module, + ModuleSource, Source, Static, Struct, StructField, Trait, TypeAlias, Union, VariantDef, }; pub trait FromSource: Sized { @@ -130,61 +129,6 @@ impl FromSource for StructField { } } -impl FromSource for AssocItem { - type Ast = ast::ImplItem; - fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { - macro_rules! def { - ($kind:ident, $ast:ident) => { - $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) - .and_then(|it| Some(AssocItem::from(it))) - }; - } - - match src.ast { - ast::ImplItem::FnDef(f) => def!(Function, f), - ast::ImplItem::ConstDef(c) => def!(Const, c), - ast::ImplItem::TypeAliasDef(a) => def!(TypeAlias, a), - } - } -} - -// not fully matched -impl FromSource for ModuleDef { - type Ast = ast::ModuleItem; - fn from_source(db: &(impl DefDatabase + AstDatabase), src: Source) -> Option { - macro_rules! def { - ($kind:ident, $ast:ident) => { - $kind::from_source(db, Source { file_id: src.file_id, ast: $ast }) - .and_then(|it| Some(ModuleDef::from(it))) - }; - } - - match src.ast { - ast::ModuleItem::FnDef(f) => def!(Function, f), - ast::ModuleItem::ConstDef(c) => def!(Const, c), - ast::ModuleItem::TypeAliasDef(a) => def!(TypeAlias, a), - ast::ModuleItem::TraitDef(t) => def!(Trait, t), - ast::ModuleItem::StaticDef(s) => def!(Static, s), - ast::ModuleItem::StructDef(s) => { - let src = Source { file_id: src.file_id, ast: s }; - let s = Struct::from_source(db, src)?; - Some(ModuleDef::Adt(s.into())) - } - ast::ModuleItem::EnumDef(e) => { - let src = Source { file_id: src.file_id, ast: e }; - let e = Enum::from_source(db, src)?; - Some(ModuleDef::Adt(e.into())) - } - ast::ModuleItem::Module(ref m) if !m.has_semi() => { - let src = Source { file_id: src.file_id, ast: ModuleSource::Module(m.clone()) }; - let module = Module::from_definition(db, src)?; - Some(ModuleDef::Module(module)) - } - _ => None, - } - } -} - // FIXME: simplify it impl ModuleSource { pub fn from_position( -- cgit v1.2.3 From 55e1910d006da7961687928542c1167cc556a39f Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Tue, 15 Oct 2019 22:50:28 +0300 Subject: classify module from declaration --- crates/ra_hir/src/from_source.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/from_source.rs b/crates/ra_hir/src/from_source.rs index f80d8eb5f..a137aeb90 100644 --- a/crates/ra_hir/src/from_source.rs +++ b/crates/ra_hir/src/from_source.rs @@ -181,7 +181,6 @@ impl Module { ) -> Option { let decl_id = match src.ast { ModuleSource::Module(ref module) => { - assert!(!module.has_semi()); let ast_id_map = db.ast_id_map(src.file_id); let item_id = ast_id_map.ast_id(module).with_file_id(src.file_id); Some(item_id) -- cgit v1.2.3