diff options
Diffstat (limited to 'crates/ra_ide_api')
-rw-r--r-- | crates/ra_ide_api/src/hover.rs | 4 | ||||
-rw-r--r-- | crates/ra_ide_api/src/references.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide_api/src/references/classify.rs | 38 | ||||
-rw-r--r-- | crates/ra_ide_api/src/syntax_highlighting.rs | 3 |
4 files changed, 22 insertions, 25 deletions
diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index cc25f4c37..c6d678c0c 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs | |||
@@ -193,7 +193,9 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn | |||
193 | None | 193 | None |
194 | } | 194 | } |
195 | } else if let Some(name) = find_node_at_offset::<ast::Name>(file.syntax(), position.offset) { | 195 | } else if let Some(name) = find_node_at_offset::<ast::Name>(file.syntax(), position.offset) { |
196 | if let Some(name_kind) = classify_name(db, position.file_id, &name).map(|d| d.kind) { | 196 | if let Some(name_kind) = |
197 | classify_name(db, Source::new(position.file_id.into(), &name)).map(|d| d.kind) | ||
198 | { | ||
197 | let mut _b: bool = true; | 199 | let mut _b: bool = true; |
198 | res.extend(hover_text_from_name_kind(db, name_kind, &mut _b)); | 200 | res.extend(hover_text_from_name_kind(db, name_kind, &mut _b)); |
199 | } | 201 | } |
diff --git a/crates/ra_ide_api/src/references.rs b/crates/ra_ide_api/src/references.rs index 1af7e8a9f..cb343e59a 100644 --- a/crates/ra_ide_api/src/references.rs +++ b/crates/ra_ide_api/src/references.rs | |||
@@ -110,7 +110,7 @@ fn find_name<'a>( | |||
110 | position: FilePosition, | 110 | position: FilePosition, |
111 | ) -> Option<RangeInfo<(String, NameDefinition)>> { | 111 | ) -> Option<RangeInfo<(String, NameDefinition)>> { |
112 | if let Some(name) = find_node_at_offset::<ast::Name>(&syntax, position.offset) { | 112 | if let Some(name) = find_node_at_offset::<ast::Name>(&syntax, position.offset) { |
113 | let def = classify_name(db, position.file_id, &name)?; | 113 | let def = classify_name(db, Source::new(position.file_id.into(), &name))?; |
114 | let range = name.syntax().text_range(); | 114 | let range = name.syntax().text_range(); |
115 | return Some(RangeInfo::new(range, (name.text().to_string(), def))); | 115 | return Some(RangeInfo::new(range, (name.text().to_string(), def))); |
116 | } | 116 | } |
diff --git a/crates/ra_ide_api/src/references/classify.rs b/crates/ra_ide_api/src/references/classify.rs index 5ca9da15e..ea9d20e71 100644 --- a/crates/ra_ide_api/src/references/classify.rs +++ b/crates/ra_ide_api/src/references/classify.rs | |||
@@ -1,7 +1,6 @@ | |||
1 | //! Functions that are used to classify an element from its definition or reference. | 1 | //! Functions that are used to classify an element from its definition or reference. |
2 | 2 | ||
3 | use hir::{FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer}; | 3 | use hir::{FromSource, Module, ModuleSource, Path, PathResolution, Source, SourceAnalyzer}; |
4 | use ra_db::FileId; | ||
5 | use ra_prof::profile; | 4 | use ra_prof::profile; |
6 | use ra_syntax::{ast, match_ast, AstNode}; | 5 | use ra_syntax::{ast, match_ast, AstNode}; |
7 | use test_utils::tested_by; | 6 | use test_utils::tested_by; |
@@ -12,19 +11,14 @@ use super::{ | |||
12 | }; | 11 | }; |
13 | use crate::db::RootDatabase; | 12 | use crate::db::RootDatabase; |
14 | 13 | ||
15 | pub(crate) fn classify_name( | 14 | pub(crate) fn classify_name(db: &RootDatabase, name: Source<&ast::Name>) -> Option<NameDefinition> { |
16 | db: &RootDatabase, | ||
17 | file_id: FileId, | ||
18 | name: &ast::Name, | ||
19 | ) -> Option<NameDefinition> { | ||
20 | let _p = profile("classify_name"); | 15 | let _p = profile("classify_name"); |
21 | let parent = name.syntax().parent()?; | 16 | let parent = name.ast.syntax().parent()?; |
22 | let file_id = file_id.into(); | ||
23 | 17 | ||
24 | match_ast! { | 18 | match_ast! { |
25 | match parent { | 19 | match parent { |
26 | ast::BindPat(it) => { | 20 | ast::BindPat(it) => { |
27 | let src = hir::Source { file_id, ast: it }; | 21 | let src = name.with_ast(it); |
28 | let local = hir::Local::from_source(db, src)?; | 22 | let local = hir::Local::from_source(db, src)?; |
29 | Some(NameDefinition { | 23 | Some(NameDefinition { |
30 | visibility: None, | 24 | visibility: None, |
@@ -34,7 +28,7 @@ pub(crate) fn classify_name( | |||
34 | }, | 28 | }, |
35 | ast::RecordFieldDef(it) => { | 29 | ast::RecordFieldDef(it) => { |
36 | let ast = hir::FieldSource::Named(it); | 30 | let ast = hir::FieldSource::Named(it); |
37 | let src = hir::Source { file_id, ast }; | 31 | let src = name.with_ast(ast); |
38 | let field = hir::StructField::from_source(db, src)?; | 32 | let field = hir::StructField::from_source(db, src)?; |
39 | Some(from_struct_field(db, field)) | 33 | Some(from_struct_field(db, field)) |
40 | }, | 34 | }, |
@@ -42,42 +36,42 @@ pub(crate) fn classify_name( | |||
42 | let def = { | 36 | let def = { |
43 | if !it.has_semi() { | 37 | if !it.has_semi() { |
44 | let ast = hir::ModuleSource::Module(it); | 38 | let ast = hir::ModuleSource::Module(it); |
45 | let src = hir::Source { file_id, ast }; | 39 | let src = name.with_ast(ast); |
46 | hir::Module::from_definition(db, src) | 40 | hir::Module::from_definition(db, src) |
47 | } else { | 41 | } else { |
48 | let src = hir::Source { file_id, ast: it }; | 42 | let src = name.with_ast(it); |
49 | hir::Module::from_declaration(db, src) | 43 | hir::Module::from_declaration(db, src) |
50 | } | 44 | } |
51 | }?; | 45 | }?; |
52 | Some(from_module_def(db, def.into(), None)) | 46 | Some(from_module_def(db, def.into(), None)) |
53 | }, | 47 | }, |
54 | ast::StructDef(it) => { | 48 | ast::StructDef(it) => { |
55 | let src = hir::Source { file_id, ast: it }; | 49 | let src = name.with_ast(it); |
56 | let def = hir::Struct::from_source(db, src)?; | 50 | let def = hir::Struct::from_source(db, src)?; |
57 | Some(from_module_def(db, def.into(), None)) | 51 | Some(from_module_def(db, def.into(), None)) |
58 | }, | 52 | }, |
59 | ast::EnumDef(it) => { | 53 | ast::EnumDef(it) => { |
60 | let src = hir::Source { file_id, ast: it }; | 54 | let src = name.with_ast(it); |
61 | let def = hir::Enum::from_source(db, src)?; | 55 | let def = hir::Enum::from_source(db, src)?; |
62 | Some(from_module_def(db, def.into(), None)) | 56 | Some(from_module_def(db, def.into(), None)) |
63 | }, | 57 | }, |
64 | ast::TraitDef(it) => { | 58 | ast::TraitDef(it) => { |
65 | let src = hir::Source { file_id, ast: it }; | 59 | let src = name.with_ast(it); |
66 | let def = hir::Trait::from_source(db, src)?; | 60 | let def = hir::Trait::from_source(db, src)?; |
67 | Some(from_module_def(db, def.into(), None)) | 61 | Some(from_module_def(db, def.into(), None)) |
68 | }, | 62 | }, |
69 | ast::StaticDef(it) => { | 63 | ast::StaticDef(it) => { |
70 | let src = hir::Source { file_id, ast: it }; | 64 | let src = name.with_ast(it); |
71 | let def = hir::Static::from_source(db, src)?; | 65 | let def = hir::Static::from_source(db, src)?; |
72 | Some(from_module_def(db, def.into(), None)) | 66 | Some(from_module_def(db, def.into(), None)) |
73 | }, | 67 | }, |
74 | ast::EnumVariant(it) => { | 68 | ast::EnumVariant(it) => { |
75 | let src = hir::Source { file_id, ast: it }; | 69 | let src = name.with_ast(it); |
76 | let def = hir::EnumVariant::from_source(db, src)?; | 70 | let def = hir::EnumVariant::from_source(db, src)?; |
77 | Some(from_module_def(db, def.into(), None)) | 71 | Some(from_module_def(db, def.into(), None)) |
78 | }, | 72 | }, |
79 | ast::FnDef(it) => { | 73 | ast::FnDef(it) => { |
80 | let src = hir::Source { file_id, ast: it }; | 74 | let src = name.with_ast(it); |
81 | let def = hir::Function::from_source(db, src)?; | 75 | let def = hir::Function::from_source(db, src)?; |
82 | if parent.parent().and_then(ast::ItemList::cast).is_some() { | 76 | if parent.parent().and_then(ast::ItemList::cast).is_some() { |
83 | Some(from_assoc_item(db, def.into())) | 77 | Some(from_assoc_item(db, def.into())) |
@@ -86,7 +80,7 @@ pub(crate) fn classify_name( | |||
86 | } | 80 | } |
87 | }, | 81 | }, |
88 | ast::ConstDef(it) => { | 82 | ast::ConstDef(it) => { |
89 | let src = hir::Source { file_id, ast: it }; | 83 | let src = name.with_ast(it); |
90 | let def = hir::Const::from_source(db, src)?; | 84 | let def = hir::Const::from_source(db, src)?; |
91 | if parent.parent().and_then(ast::ItemList::cast).is_some() { | 85 | if parent.parent().and_then(ast::ItemList::cast).is_some() { |
92 | Some(from_assoc_item(db, def.into())) | 86 | Some(from_assoc_item(db, def.into())) |
@@ -95,7 +89,7 @@ pub(crate) fn classify_name( | |||
95 | } | 89 | } |
96 | }, | 90 | }, |
97 | ast::TypeAliasDef(it) => { | 91 | ast::TypeAliasDef(it) => { |
98 | let src = hir::Source { file_id, ast: it }; | 92 | let src = name.with_ast(it); |
99 | let def = hir::TypeAlias::from_source(db, src)?; | 93 | let def = hir::TypeAlias::from_source(db, src)?; |
100 | if parent.parent().and_then(ast::ItemList::cast).is_some() { | 94 | if parent.parent().and_then(ast::ItemList::cast).is_some() { |
101 | Some(from_assoc_item(db, def.into())) | 95 | Some(from_assoc_item(db, def.into())) |
@@ -104,11 +98,11 @@ pub(crate) fn classify_name( | |||
104 | } | 98 | } |
105 | }, | 99 | }, |
106 | ast::MacroCall(it) => { | 100 | ast::MacroCall(it) => { |
107 | let src = hir::Source { file_id, ast: it}; | 101 | let src = name.with_ast(it); |
108 | let def = hir::MacroDef::from_source(db, src.clone())?; | 102 | let def = hir::MacroDef::from_source(db, src.clone())?; |
109 | 103 | ||
110 | let module_src = ModuleSource::from_child_node(db, src.as_ref().map(|it| it.syntax())); | 104 | let module_src = ModuleSource::from_child_node(db, src.as_ref().map(|it| it.syntax())); |
111 | let module = Module::from_definition(db, Source::new(file_id, module_src))?; | 105 | let module = Module::from_definition(db, src.with_ast(module_src))?; |
112 | 106 | ||
113 | Some(NameDefinition { | 107 | Some(NameDefinition { |
114 | visibility: None, | 108 | visibility: None, |
diff --git a/crates/ra_ide_api/src/syntax_highlighting.rs b/crates/ra_ide_api/src/syntax_highlighting.rs index 584657ca2..2b653fe8f 100644 --- a/crates/ra_ide_api/src/syntax_highlighting.rs +++ b/crates/ra_ide_api/src/syntax_highlighting.rs | |||
@@ -94,7 +94,8 @@ pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Vec<HighlightedRa | |||
94 | } | 94 | } |
95 | NAME => { | 95 | NAME => { |
96 | let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap(); | 96 | let name = node.as_node().cloned().and_then(ast::Name::cast).unwrap(); |
97 | let name_kind = classify_name(db, file_id, &name).map(|d| d.kind); | 97 | let name_kind = |
98 | classify_name(db, Source::new(file_id.into(), &name)).map(|d| d.kind); | ||
98 | 99 | ||
99 | if let Some(Local(local)) = &name_kind { | 100 | if let Some(Local(local)) = &name_kind { |
100 | if let Some(name) = local.name(db) { | 101 | if let Some(name) = local.name(db) { |