aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src')
-rw-r--r--crates/ra_ide/src/goto_definition.rs5
-rw-r--r--crates/ra_ide/src/hover.rs9
-rw-r--r--crates/ra_ide/src/references.rs9
-rw-r--r--crates/ra_ide/src/references/classify.rs28
-rw-r--r--crates/ra_ide/src/syntax_highlighting.rs23
5 files changed, 36 insertions, 38 deletions
diff --git a/crates/ra_ide/src/goto_definition.rs b/crates/ra_ide/src/goto_definition.rs
index e9329a72c..de5551a4c 100644
--- a/crates/ra_ide/src/goto_definition.rs
+++ b/crates/ra_ide/src/goto_definition.rs
@@ -76,11 +76,10 @@ pub(crate) fn reference_definition(
76 let name_kind = classify_name_ref(sb, name_ref).map(|d| d.kind); 76 let name_kind = classify_name_ref(sb, name_ref).map(|d| d.kind);
77 match name_kind { 77 match name_kind {
78 Some(Macro(it)) => return Exact(it.to_nav(sb.db)), 78 Some(Macro(it)) => return Exact(it.to_nav(sb.db)),
79 Some(Field(it)) => return Exact(it.to_nav(sb.db)), 79 Some(StructField(it)) => return Exact(it.to_nav(sb.db)),
80 Some(TypeParam(it)) => return Exact(it.to_nav(sb.db)), 80 Some(TypeParam(it)) => return Exact(it.to_nav(sb.db)),
81 Some(AssocItem(it)) => return Exact(it.to_nav(sb.db)),
82 Some(Local(it)) => return Exact(it.to_nav(sb.db)), 81 Some(Local(it)) => return Exact(it.to_nav(sb.db)),
83 Some(Def(def)) => match NavigationTarget::from_def(sb.db, def) { 82 Some(ModuleDef(def)) => match NavigationTarget::from_def(sb.db, def) {
84 Some(nav) => return Exact(nav), 83 Some(nav) => return Exact(nav),
85 None => return Approximate(vec![]), 84 None => return Approximate(vec![]),
86 }, 85 },
diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs
index 315b88190..3f88bb260 100644
--- a/crates/ra_ide/src/hover.rs
+++ b/crates/ra_ide/src/hover.rs
@@ -98,19 +98,14 @@ fn hover_text_from_name_kind(db: &RootDatabase, name_kind: NameKind) -> Option<S
98 let src = it.source(db); 98 let src = it.source(db);
99 hover_text(src.value.doc_comment_text(), Some(macro_label(&src.value))) 99 hover_text(src.value.doc_comment_text(), Some(macro_label(&src.value)))
100 } 100 }
101 Field(it) => { 101 StructField(it) => {
102 let src = it.source(db); 102 let src = it.source(db);
103 match src.value { 103 match src.value {
104 hir::FieldSource::Named(it) => hover_text(it.doc_comment_text(), it.short_label()), 104 hir::FieldSource::Named(it) => hover_text(it.doc_comment_text(), it.short_label()),
105 _ => None, 105 _ => None,
106 } 106 }
107 } 107 }
108 AssocItem(it) => match it { 108 ModuleDef(it) => match it {
109 hir::AssocItem::Function(it) => from_def_source(db, it),
110 hir::AssocItem::Const(it) => from_def_source(db, it),
111 hir::AssocItem::TypeAlias(it) => from_def_source(db, it),
112 },
113 Def(it) => match it {
114 hir::ModuleDef::Module(it) => match it.definition_source(db).value { 109 hir::ModuleDef::Module(it) => match it.definition_source(db).value {
115 hir::ModuleSource::Module(it) => { 110 hir::ModuleSource::Module(it) => {
116 hover_text(it.doc_comment_text(), it.short_label()) 111 hover_text(it.doc_comment_text(), it.short_label())
diff --git a/crates/ra_ide/src/references.rs b/crates/ra_ide/src/references.rs
index c215040f4..a6320bd2f 100644
--- a/crates/ra_ide/src/references.rs
+++ b/crates/ra_ide/src/references.rs
@@ -127,9 +127,8 @@ pub(crate) fn find_all_refs(
127 127
128 let declaration = match def.kind { 128 let declaration = match def.kind {
129 NameKind::Macro(mac) => mac.to_nav(db), 129 NameKind::Macro(mac) => mac.to_nav(db),
130 NameKind::Field(field) => field.to_nav(db), 130 NameKind::StructField(field) => field.to_nav(db),
131 NameKind::AssocItem(assoc) => assoc.to_nav(db), 131 NameKind::ModuleDef(def) => NavigationTarget::from_def(db, def)?,
132 NameKind::Def(def) => NavigationTarget::from_def(db, def)?,
133 NameKind::SelfType(imp) => imp.to_nav(db), 132 NameKind::SelfType(imp) => imp.to_nav(db),
134 NameKind::Local(local) => local.to_nav(db), 133 NameKind::Local(local) => local.to_nav(db),
135 NameKind::TypeParam(_) => return None, 134 NameKind::TypeParam(_) => return None,
@@ -240,7 +239,7 @@ fn decl_access(
240 range: TextRange, 239 range: TextRange,
241) -> Option<ReferenceAccess> { 240) -> Option<ReferenceAccess> {
242 match kind { 241 match kind {
243 NameKind::Local(_) | NameKind::Field(_) => {} 242 NameKind::Local(_) | NameKind::StructField(_) => {}
244 _ => return None, 243 _ => return None,
245 }; 244 };
246 245
@@ -260,7 +259,7 @@ fn decl_access(
260fn reference_access(kind: &NameKind, name_ref: &ast::NameRef) -> Option<ReferenceAccess> { 259fn reference_access(kind: &NameKind, name_ref: &ast::NameRef) -> Option<ReferenceAccess> {
261 // Only Locals and Fields have accesses for now. 260 // Only Locals and Fields have accesses for now.
262 match kind { 261 match kind {
263 NameKind::Local(_) | NameKind::Field(_) => {} 262 NameKind::Local(_) | NameKind::StructField(_) => {}
264 _ => return None, 263 _ => return None,
265 }; 264 };
266 265
diff --git a/crates/ra_ide/src/references/classify.rs b/crates/ra_ide/src/references/classify.rs
index 0326fd379..d0f03d8a8 100644
--- a/crates/ra_ide/src/references/classify.rs
+++ b/crates/ra_ide/src/references/classify.rs
@@ -8,7 +8,7 @@ use test_utils::tested_by;
8use super::{NameDefinition, NameKind}; 8use super::{NameDefinition, NameKind};
9use ra_ide_db::RootDatabase; 9use ra_ide_db::RootDatabase;
10 10
11pub use ra_ide_db::defs::{classify_name, from_assoc_item, from_module_def, from_struct_field}; 11pub use ra_ide_db::defs::{classify_name, from_module_def, from_struct_field};
12 12
13pub(crate) fn classify_name_ref( 13pub(crate) fn classify_name_ref(
14 sb: &mut SourceBinder<RootDatabase>, 14 sb: &mut SourceBinder<RootDatabase>,
@@ -22,7 +22,7 @@ pub(crate) fn classify_name_ref(
22 if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) { 22 if let Some(method_call) = ast::MethodCallExpr::cast(parent.clone()) {
23 tested_by!(goto_def_for_methods); 23 tested_by!(goto_def_for_methods);
24 if let Some(func) = analyzer.resolve_method_call(&method_call) { 24 if let Some(func) = analyzer.resolve_method_call(&method_call) {
25 return Some(from_assoc_item(sb.db, func.into())); 25 return Some(from_module_def(sb.db, func.into(), None));
26 } 26 }
27 } 27 }
28 28
@@ -57,27 +57,35 @@ pub(crate) fn classify_name_ref(
57 57
58 let path = name_ref.value.syntax().ancestors().find_map(ast::Path::cast)?; 58 let path = name_ref.value.syntax().ancestors().find_map(ast::Path::cast)?;
59 let resolved = analyzer.resolve_path(sb.db, &path)?; 59 let resolved = analyzer.resolve_path(sb.db, &path)?;
60 match resolved { 60 let res = match resolved {
61 PathResolution::Def(def) => Some(from_module_def(sb.db, def, Some(container))), 61 PathResolution::Def(def) => from_module_def(sb.db, def, Some(container)),
62 PathResolution::AssocItem(item) => Some(from_assoc_item(sb.db, item)), 62 PathResolution::AssocItem(item) => {
63 let def = match item {
64 hir::AssocItem::Function(it) => it.into(),
65 hir::AssocItem::Const(it) => it.into(),
66 hir::AssocItem::TypeAlias(it) => it.into(),
67 };
68 from_module_def(sb.db, def, Some(container))
69 }
63 PathResolution::Local(local) => { 70 PathResolution::Local(local) => {
64 let kind = NameKind::Local(local); 71 let kind = NameKind::Local(local);
65 let container = local.module(sb.db); 72 let container = local.module(sb.db);
66 Some(NameDefinition { kind, container, visibility: None }) 73 NameDefinition { kind, container, visibility: None }
67 } 74 }
68 PathResolution::TypeParam(par) => { 75 PathResolution::TypeParam(par) => {
69 let kind = NameKind::TypeParam(par); 76 let kind = NameKind::TypeParam(par);
70 let container = par.module(sb.db); 77 let container = par.module(sb.db);
71 Some(NameDefinition { kind, container, visibility }) 78 NameDefinition { kind, container, visibility }
72 } 79 }
73 PathResolution::Macro(def) => { 80 PathResolution::Macro(def) => {
74 let kind = NameKind::Macro(def); 81 let kind = NameKind::Macro(def);
75 Some(NameDefinition { kind, container, visibility }) 82 NameDefinition { kind, container, visibility }
76 } 83 }
77 PathResolution::SelfType(impl_block) => { 84 PathResolution::SelfType(impl_block) => {
78 let kind = NameKind::SelfType(impl_block); 85 let kind = NameKind::SelfType(impl_block);
79 let container = impl_block.module(sb.db); 86 let container = impl_block.module(sb.db);
80 Some(NameDefinition { kind, container, visibility }) 87 NameDefinition { kind, container, visibility }
81 } 88 }
82 } 89 };
90 Some(res)
83} 91}
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs
index c5d249fe8..174e13595 100644
--- a/crates/ra_ide/src/syntax_highlighting.rs
+++ b/crates/ra_ide/src/syntax_highlighting.rs
@@ -320,19 +320,16 @@ pub(crate) fn highlight_as_html(db: &RootDatabase, file_id: FileId, rainbow: boo
320fn highlight_name(db: &RootDatabase, name_kind: NameKind) -> &'static str { 320fn highlight_name(db: &RootDatabase, name_kind: NameKind) -> &'static str {
321 match name_kind { 321 match name_kind {
322 Macro(_) => tags::MACRO, 322 Macro(_) => tags::MACRO,
323 Field(_) => tags::FIELD, 323 StructField(_) => tags::FIELD,
324 AssocItem(hir::AssocItem::Function(_)) => tags::FUNCTION, 324 ModuleDef(hir::ModuleDef::Module(_)) => tags::MODULE,
325 AssocItem(hir::AssocItem::Const(_)) => tags::CONSTANT, 325 ModuleDef(hir::ModuleDef::Function(_)) => tags::FUNCTION,
326 AssocItem(hir::AssocItem::TypeAlias(_)) => tags::TYPE, 326 ModuleDef(hir::ModuleDef::Adt(_)) => tags::TYPE,
327 Def(hir::ModuleDef::Module(_)) => tags::MODULE, 327 ModuleDef(hir::ModuleDef::EnumVariant(_)) => tags::CONSTANT,
328 Def(hir::ModuleDef::Function(_)) => tags::FUNCTION, 328 ModuleDef(hir::ModuleDef::Const(_)) => tags::CONSTANT,
329 Def(hir::ModuleDef::Adt(_)) => tags::TYPE, 329 ModuleDef(hir::ModuleDef::Static(_)) => tags::CONSTANT,
330 Def(hir::ModuleDef::EnumVariant(_)) => tags::CONSTANT, 330 ModuleDef(hir::ModuleDef::Trait(_)) => tags::TYPE,
331 Def(hir::ModuleDef::Const(_)) => tags::CONSTANT, 331 ModuleDef(hir::ModuleDef::TypeAlias(_)) => tags::TYPE,
332 Def(hir::ModuleDef::Static(_)) => tags::CONSTANT, 332 ModuleDef(hir::ModuleDef::BuiltinType(_)) => tags::TYPE_BUILTIN,
333 Def(hir::ModuleDef::Trait(_)) => tags::TYPE,
334 Def(hir::ModuleDef::TypeAlias(_)) => tags::TYPE,
335 Def(hir::ModuleDef::BuiltinType(_)) => tags::TYPE_BUILTIN,
336 SelfType(_) => tags::TYPE_SELF, 333 SelfType(_) => tags::TYPE_SELF,
337 TypeParam(_) => tags::TYPE_PARAM, 334 TypeParam(_) => tags::TYPE_PARAM,
338 Local(local) => { 335 Local(local) => {