diff options
-rw-r--r-- | crates/ide/src/call_hierarchy.rs | 52 | ||||
-rw-r--r-- | crates/ide/src/display.rs | 3 | ||||
-rw-r--r-- | crates/ide/src/display/navigation_target.rs | 132 | ||||
-rw-r--r-- | crates/ide/src/file_structure.rs | 80 | ||||
-rw-r--r-- | crates/ide/src/goto_definition.rs | 4 | ||||
-rw-r--r-- | crates/ide/src/hover.rs | 74 | ||||
-rw-r--r-- | crates/ide/src/lib.rs | 2 | ||||
-rw-r--r-- | crates/ide/src/parent_module.rs | 6 | ||||
-rw-r--r-- | crates/ide/src/references.rs | 72 | ||||
-rw-r--r-- | crates/ide/src/runnables.rs | 52 | ||||
-rw-r--r-- | crates/ide_db/src/symbol_index.rs | 48 | ||||
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 14 | ||||
-rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 37 |
13 files changed, 337 insertions, 239 deletions
diff --git a/crates/ide/src/call_hierarchy.rs b/crates/ide/src/call_hierarchy.rs index 8ad50a2ee..60e0cd4ad 100644 --- a/crates/ide/src/call_hierarchy.rs +++ b/crates/ide/src/call_hierarchy.rs | |||
@@ -181,8 +181,8 @@ fn caller() { | |||
181 | call<|>ee(); | 181 | call<|>ee(); |
182 | } | 182 | } |
183 | "#, | 183 | "#, |
184 | "callee FN FileId(0) 0..14 3..9", | 184 | "callee Function FileId(0) 0..14 3..9", |
185 | &["caller FN FileId(0) 15..44 18..24 : [33..39]"], | 185 | &["caller Function FileId(0) 15..44 18..24 : [33..39]"], |
186 | &[], | 186 | &[], |
187 | ); | 187 | ); |
188 | } | 188 | } |
@@ -197,8 +197,8 @@ fn caller() { | |||
197 | callee(); | 197 | callee(); |
198 | } | 198 | } |
199 | "#, | 199 | "#, |
200 | "callee FN FileId(0) 0..14 3..9", | 200 | "callee Function FileId(0) 0..14 3..9", |
201 | &["caller FN FileId(0) 15..44 18..24 : [33..39]"], | 201 | &["caller Function FileId(0) 15..44 18..24 : [33..39]"], |
202 | &[], | 202 | &[], |
203 | ); | 203 | ); |
204 | } | 204 | } |
@@ -214,8 +214,8 @@ fn caller() { | |||
214 | callee(); | 214 | callee(); |
215 | } | 215 | } |
216 | "#, | 216 | "#, |
217 | "callee FN FileId(0) 0..14 3..9", | 217 | "callee Function FileId(0) 0..14 3..9", |
218 | &["caller FN FileId(0) 15..58 18..24 : [33..39, 47..53]"], | 218 | &["caller Function FileId(0) 15..58 18..24 : [33..39, 47..53]"], |
219 | &[], | 219 | &[], |
220 | ); | 220 | ); |
221 | } | 221 | } |
@@ -234,10 +234,10 @@ fn caller2() { | |||
234 | callee(); | 234 | callee(); |
235 | } | 235 | } |
236 | "#, | 236 | "#, |
237 | "callee FN FileId(0) 0..14 3..9", | 237 | "callee Function FileId(0) 0..14 3..9", |
238 | &[ | 238 | &[ |
239 | "caller1 FN FileId(0) 15..45 18..25 : [34..40]", | 239 | "caller1 Function FileId(0) 15..45 18..25 : [34..40]", |
240 | "caller2 FN FileId(0) 47..77 50..57 : [66..72]", | 240 | "caller2 Function FileId(0) 47..77 50..57 : [66..72]", |
241 | ], | 241 | ], |
242 | &[], | 242 | &[], |
243 | ); | 243 | ); |
@@ -263,10 +263,10 @@ mod tests { | |||
263 | } | 263 | } |
264 | } | 264 | } |
265 | "#, | 265 | "#, |
266 | "callee FN FileId(0) 0..14 3..9", | 266 | "callee Function FileId(0) 0..14 3..9", |
267 | &[ | 267 | &[ |
268 | "caller1 FN FileId(0) 15..45 18..25 : [34..40]", | 268 | "caller1 Function FileId(0) 15..45 18..25 : [34..40]", |
269 | "test_caller FN FileId(0) 95..149 110..121 : [134..140]", | 269 | "test_caller Function FileId(0) 95..149 110..121 : [134..140]", |
270 | ], | 270 | ], |
271 | &[], | 271 | &[], |
272 | ); | 272 | ); |
@@ -287,8 +287,8 @@ fn caller() { | |||
287 | //- /foo/mod.rs | 287 | //- /foo/mod.rs |
288 | pub fn callee() {} | 288 | pub fn callee() {} |
289 | "#, | 289 | "#, |
290 | "callee FN FileId(1) 0..18 7..13", | 290 | "callee Function FileId(1) 0..18 7..13", |
291 | &["caller FN FileId(0) 27..56 30..36 : [45..51]"], | 291 | &["caller Function FileId(0) 27..56 30..36 : [45..51]"], |
292 | &[], | 292 | &[], |
293 | ); | 293 | ); |
294 | } | 294 | } |
@@ -304,9 +304,9 @@ fn call<|>er() { | |||
304 | callee(); | 304 | callee(); |
305 | } | 305 | } |
306 | "#, | 306 | "#, |
307 | "caller FN FileId(0) 15..58 18..24", | 307 | "caller Function FileId(0) 15..58 18..24", |
308 | &[], | 308 | &[], |
309 | &["callee FN FileId(0) 0..14 3..9 : [33..39, 47..53]"], | 309 | &["callee Function FileId(0) 0..14 3..9 : [33..39, 47..53]"], |
310 | ); | 310 | ); |
311 | } | 311 | } |
312 | 312 | ||
@@ -325,9 +325,9 @@ fn call<|>er() { | |||
325 | //- /foo/mod.rs | 325 | //- /foo/mod.rs |
326 | pub fn callee() {} | 326 | pub fn callee() {} |
327 | "#, | 327 | "#, |
328 | "caller FN FileId(0) 27..56 30..36", | 328 | "caller Function FileId(0) 27..56 30..36", |
329 | &[], | 329 | &[], |
330 | &["callee FN FileId(1) 0..18 7..13 : [45..51]"], | 330 | &["callee Function FileId(1) 0..18 7..13 : [45..51]"], |
331 | ); | 331 | ); |
332 | } | 332 | } |
333 | 333 | ||
@@ -348,9 +348,9 @@ fn caller3() { | |||
348 | 348 | ||
349 | } | 349 | } |
350 | "#, | 350 | "#, |
351 | "caller2 FN FileId(0) 33..64 36..43", | 351 | "caller2 Function FileId(0) 33..64 36..43", |
352 | &["caller1 FN FileId(0) 0..31 3..10 : [19..26]"], | 352 | &["caller1 Function FileId(0) 0..31 3..10 : [19..26]"], |
353 | &["caller3 FN FileId(0) 66..83 69..76 : [52..59]"], | 353 | &["caller3 Function FileId(0) 66..83 69..76 : [52..59]"], |
354 | ); | 354 | ); |
355 | } | 355 | } |
356 | 356 | ||
@@ -368,9 +368,9 @@ fn main() { | |||
368 | a<|>() | 368 | a<|>() |
369 | } | 369 | } |
370 | "#, | 370 | "#, |
371 | "a FN FileId(0) 0..18 3..4", | 371 | "a Function FileId(0) 0..18 3..4", |
372 | &["main FN FileId(0) 31..52 34..38 : [47..48]"], | 372 | &["main Function FileId(0) 31..52 34..38 : [47..48]"], |
373 | &["b FN FileId(0) 20..29 23..24 : [13..14]"], | 373 | &["b Function FileId(0) 20..29 23..24 : [13..14]"], |
374 | ); | 374 | ); |
375 | 375 | ||
376 | check_hierarchy( | 376 | check_hierarchy( |
@@ -385,8 +385,8 @@ fn main() { | |||
385 | a() | 385 | a() |
386 | } | 386 | } |
387 | "#, | 387 | "#, |
388 | "b FN FileId(0) 20..29 23..24", | 388 | "b Function FileId(0) 20..29 23..24", |
389 | &["a FN FileId(0) 0..18 3..4 : [13..14]"], | 389 | &["a Function FileId(0) 0..18 3..4 : [13..14]"], |
390 | &[], | 390 | &[], |
391 | ); | 391 | ); |
392 | } | 392 | } |
diff --git a/crates/ide/src/display.rs b/crates/ide/src/display.rs index 0650915c5..bae9e40df 100644 --- a/crates/ide/src/display.rs +++ b/crates/ide/src/display.rs | |||
@@ -1,10 +1,9 @@ | |||
1 | //! This module contains utilities for turning SyntaxNodes and HIR types | 1 | //! This module contains utilities for turning SyntaxNodes and HIR types |
2 | //! into types that may be used to render in a UI. | 2 | //! into types that may be used to render in a UI. |
3 | 3 | ||
4 | mod navigation_target; | 4 | pub(crate) mod navigation_target; |
5 | mod short_label; | 5 | mod short_label; |
6 | 6 | ||
7 | pub use navigation_target::NavigationTarget; | ||
8 | pub(crate) use navigation_target::{ToNav, TryToNav}; | 7 | pub(crate) use navigation_target::{ToNav, TryToNav}; |
9 | pub(crate) use short_label::ShortLabel; | 8 | pub(crate) use short_label::ShortLabel; |
10 | 9 | ||
diff --git a/crates/ide/src/display/navigation_target.rs b/crates/ide/src/display/navigation_target.rs index 48acb8c93..ac6346b2b 100644 --- a/crates/ide/src/display/navigation_target.rs +++ b/crates/ide/src/display/navigation_target.rs | |||
@@ -2,19 +2,43 @@ | |||
2 | 2 | ||
3 | use either::Either; | 3 | use either::Either; |
4 | use hir::{AssocItem, Documentation, FieldSource, HasAttrs, HasSource, InFile, ModuleSource}; | 4 | use hir::{AssocItem, Documentation, FieldSource, HasAttrs, HasSource, InFile, ModuleSource}; |
5 | use ide_db::base_db::{FileId, SourceDatabase}; | 5 | use ide_db::{ |
6 | base_db::{FileId, SourceDatabase}, | ||
7 | symbol_index::FileSymbolKind, | ||
8 | }; | ||
6 | use ide_db::{defs::Definition, RootDatabase}; | 9 | use ide_db::{defs::Definition, RootDatabase}; |
7 | use syntax::{ | 10 | use syntax::{ |
8 | ast::{self, NameOwner}, | 11 | ast::{self, NameOwner}, |
9 | match_ast, AstNode, SmolStr, | 12 | match_ast, AstNode, SmolStr, TextRange, |
10 | SyntaxKind::{self, IDENT_PAT, LIFETIME_PARAM, TYPE_PARAM}, | ||
11 | TextRange, | ||
12 | }; | 13 | }; |
13 | 14 | ||
14 | use crate::FileSymbol; | 15 | use crate::FileSymbol; |
15 | 16 | ||
16 | use super::short_label::ShortLabel; | 17 | use super::short_label::ShortLabel; |
17 | 18 | ||
19 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
20 | pub enum SymbolKind { | ||
21 | Module, | ||
22 | Impl, | ||
23 | Field, | ||
24 | TypeParam, | ||
25 | LifetimeParam, | ||
26 | SelfParam, | ||
27 | Local, | ||
28 | Function, | ||
29 | Const, | ||
30 | Static, | ||
31 | Struct, | ||
32 | Enum, | ||
33 | Variant, | ||
34 | Union, | ||
35 | TypeAlias, | ||
36 | Trait, | ||
37 | Macro, | ||
38 | // Do we actually need this? | ||
39 | DocTest, | ||
40 | } | ||
41 | |||
18 | /// `NavigationTarget` represents and element in the editor's UI which you can | 42 | /// `NavigationTarget` represents and element in the editor's UI which you can |
19 | /// click on to navigate to a particular piece of code. | 43 | /// click on to navigate to a particular piece of code. |
20 | /// | 44 | /// |
@@ -40,7 +64,7 @@ pub struct NavigationTarget { | |||
40 | /// Clients should place the cursor on this range when navigating to this target. | 64 | /// Clients should place the cursor on this range when navigating to this target. |
41 | pub focus_range: Option<TextRange>, | 65 | pub focus_range: Option<TextRange>, |
42 | pub name: SmolStr, | 66 | pub name: SmolStr, |
43 | pub kind: SyntaxKind, | 67 | pub kind: SymbolKind, |
44 | pub container_name: Option<SmolStr>, | 68 | pub container_name: Option<SmolStr>, |
45 | pub description: Option<String>, | 69 | pub description: Option<String>, |
46 | pub docs: Option<Documentation>, | 70 | pub docs: Option<Documentation>, |
@@ -69,7 +93,7 @@ impl NavigationTarget { | |||
69 | name, | 93 | name, |
70 | None, | 94 | None, |
71 | frange.range, | 95 | frange.range, |
72 | src.value.syntax().kind(), | 96 | SymbolKind::Module, |
73 | ); | 97 | ); |
74 | res.docs = module.attrs(db).docs(); | 98 | res.docs = module.attrs(db).docs(); |
75 | res.description = src.value.short_label(); | 99 | res.description = src.value.short_label(); |
@@ -101,6 +125,7 @@ impl NavigationTarget { | |||
101 | pub(crate) fn from_named( | 125 | pub(crate) fn from_named( |
102 | db: &RootDatabase, | 126 | db: &RootDatabase, |
103 | node: InFile<&dyn ast::NameOwner>, | 127 | node: InFile<&dyn ast::NameOwner>, |
128 | kind: SymbolKind, | ||
104 | ) -> NavigationTarget { | 129 | ) -> NavigationTarget { |
105 | let name = | 130 | let name = |
106 | node.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_")); | 131 | node.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_")); |
@@ -108,13 +133,7 @@ impl NavigationTarget { | |||
108 | node.value.name().map(|it| node.with_value(it.syntax()).original_file_range(db).range); | 133 | node.value.name().map(|it| node.with_value(it.syntax()).original_file_range(db).range); |
109 | let frange = node.map(|it| it.syntax()).original_file_range(db); | 134 | let frange = node.map(|it| it.syntax()).original_file_range(db); |
110 | 135 | ||
111 | NavigationTarget::from_syntax( | 136 | NavigationTarget::from_syntax(frange.file_id, name, focus_range, frange.range, kind) |
112 | frange.file_id, | ||
113 | name, | ||
114 | focus_range, | ||
115 | frange.range, | ||
116 | node.value.syntax().kind(), | ||
117 | ) | ||
118 | } | 137 | } |
119 | 138 | ||
120 | fn from_syntax( | 139 | fn from_syntax( |
@@ -122,7 +141,7 @@ impl NavigationTarget { | |||
122 | name: SmolStr, | 141 | name: SmolStr, |
123 | focus_range: Option<TextRange>, | 142 | focus_range: Option<TextRange>, |
124 | full_range: TextRange, | 143 | full_range: TextRange, |
125 | kind: SyntaxKind, | 144 | kind: SymbolKind, |
126 | ) -> NavigationTarget { | 145 | ) -> NavigationTarget { |
127 | NavigationTarget { | 146 | NavigationTarget { |
128 | file_id, | 147 | file_id, |
@@ -142,7 +161,17 @@ impl ToNav for FileSymbol { | |||
142 | NavigationTarget { | 161 | NavigationTarget { |
143 | file_id: self.file_id, | 162 | file_id: self.file_id, |
144 | name: self.name.clone(), | 163 | name: self.name.clone(), |
145 | kind: self.kind, | 164 | kind: match self.kind { |
165 | FileSymbolKind::Function => SymbolKind::Function, | ||
166 | FileSymbolKind::Struct => SymbolKind::Struct, | ||
167 | FileSymbolKind::Enum => SymbolKind::Enum, | ||
168 | FileSymbolKind::Trait => SymbolKind::Trait, | ||
169 | FileSymbolKind::Module => SymbolKind::Module, | ||
170 | FileSymbolKind::TypeAlias => SymbolKind::TypeAlias, | ||
171 | FileSymbolKind::Const => SymbolKind::Const, | ||
172 | FileSymbolKind::Static => SymbolKind::Static, | ||
173 | FileSymbolKind::Macro => SymbolKind::Macro, | ||
174 | }, | ||
146 | full_range: self.range, | 175 | full_range: self.range, |
147 | focus_range: self.name_range, | 176 | focus_range: self.name_range, |
148 | container_name: self.container_name.clone(), | 177 | container_name: self.container_name.clone(), |
@@ -191,16 +220,36 @@ impl TryToNav for hir::ModuleDef { | |||
191 | } | 220 | } |
192 | } | 221 | } |
193 | 222 | ||
194 | pub(crate) trait ToNavFromAst {} | 223 | pub(crate) trait ToNavFromAst { |
195 | impl ToNavFromAst for hir::Function {} | 224 | const KIND: SymbolKind; |
196 | impl ToNavFromAst for hir::Const {} | 225 | } |
197 | impl ToNavFromAst for hir::Static {} | 226 | impl ToNavFromAst for hir::Function { |
198 | impl ToNavFromAst for hir::Struct {} | 227 | const KIND: SymbolKind = SymbolKind::Function; |
199 | impl ToNavFromAst for hir::Enum {} | 228 | } |
200 | impl ToNavFromAst for hir::EnumVariant {} | 229 | impl ToNavFromAst for hir::Const { |
201 | impl ToNavFromAst for hir::Union {} | 230 | const KIND: SymbolKind = SymbolKind::Const; |
202 | impl ToNavFromAst for hir::TypeAlias {} | 231 | } |
203 | impl ToNavFromAst for hir::Trait {} | 232 | impl ToNavFromAst for hir::Static { |
233 | const KIND: SymbolKind = SymbolKind::Static; | ||
234 | } | ||
235 | impl ToNavFromAst for hir::Struct { | ||
236 | const KIND: SymbolKind = SymbolKind::Struct; | ||
237 | } | ||
238 | impl ToNavFromAst for hir::Enum { | ||
239 | const KIND: SymbolKind = SymbolKind::Enum; | ||
240 | } | ||
241 | impl ToNavFromAst for hir::EnumVariant { | ||
242 | const KIND: SymbolKind = SymbolKind::Variant; | ||
243 | } | ||
244 | impl ToNavFromAst for hir::Union { | ||
245 | const KIND: SymbolKind = SymbolKind::Union; | ||
246 | } | ||
247 | impl ToNavFromAst for hir::TypeAlias { | ||
248 | const KIND: SymbolKind = SymbolKind::TypeAlias; | ||
249 | } | ||
250 | impl ToNavFromAst for hir::Trait { | ||
251 | const KIND: SymbolKind = SymbolKind::Trait; | ||
252 | } | ||
204 | 253 | ||
205 | impl<D> ToNav for D | 254 | impl<D> ToNav for D |
206 | where | 255 | where |
@@ -209,8 +258,11 @@ where | |||
209 | { | 258 | { |
210 | fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { | 259 | fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { |
211 | let src = self.source(db); | 260 | let src = self.source(db); |
212 | let mut res = | 261 | let mut res = NavigationTarget::from_named( |
213 | NavigationTarget::from_named(db, src.as_ref().map(|it| it as &dyn ast::NameOwner)); | 262 | db, |
263 | src.as_ref().map(|it| it as &dyn ast::NameOwner), | ||
264 | D::KIND, | ||
265 | ); | ||
214 | res.docs = self.docs(db); | 266 | res.docs = self.docs(db); |
215 | res.description = src.value.short_label(); | 267 | res.description = src.value.short_label(); |
216 | res | 268 | res |
@@ -228,7 +280,7 @@ impl ToNav for hir::Module { | |||
228 | } | 280 | } |
229 | }; | 281 | }; |
230 | let frange = src.with_value(syntax).original_file_range(db); | 282 | let frange = src.with_value(syntax).original_file_range(db); |
231 | NavigationTarget::from_syntax(frange.file_id, name, focus, frange.range, syntax.kind()) | 283 | NavigationTarget::from_syntax(frange.file_id, name, focus, frange.range, SymbolKind::Module) |
232 | } | 284 | } |
233 | } | 285 | } |
234 | 286 | ||
@@ -252,7 +304,7 @@ impl ToNav for hir::Impl { | |||
252 | "impl".into(), | 304 | "impl".into(), |
253 | focus_range, | 305 | focus_range, |
254 | frange.range, | 306 | frange.range, |
255 | src.value.syntax().kind(), | 307 | SymbolKind::Impl, |
256 | ) | 308 | ) |
257 | } | 309 | } |
258 | } | 310 | } |
@@ -263,7 +315,8 @@ impl ToNav for hir::Field { | |||
263 | 315 | ||
264 | match &src.value { | 316 | match &src.value { |
265 | FieldSource::Named(it) => { | 317 | FieldSource::Named(it) => { |
266 | let mut res = NavigationTarget::from_named(db, src.with_value(it)); | 318 | let mut res = |
319 | NavigationTarget::from_named(db, src.with_value(it), SymbolKind::Field); | ||
267 | res.docs = self.docs(db); | 320 | res.docs = self.docs(db); |
268 | res.description = it.short_label(); | 321 | res.description = it.short_label(); |
269 | res | 322 | res |
@@ -275,7 +328,7 @@ impl ToNav for hir::Field { | |||
275 | "".into(), | 328 | "".into(), |
276 | None, | 329 | None, |
277 | frange.range, | 330 | frange.range, |
278 | it.syntax().kind(), | 331 | SymbolKind::Field, |
279 | ) | 332 | ) |
280 | } | 333 | } |
281 | } | 334 | } |
@@ -286,8 +339,11 @@ impl ToNav for hir::MacroDef { | |||
286 | fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { | 339 | fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { |
287 | let src = self.source(db); | 340 | let src = self.source(db); |
288 | log::debug!("nav target {:#?}", src.value.syntax()); | 341 | log::debug!("nav target {:#?}", src.value.syntax()); |
289 | let mut res = | 342 | let mut res = NavigationTarget::from_named( |
290 | NavigationTarget::from_named(db, src.as_ref().map(|it| it as &dyn ast::NameOwner)); | 343 | db, |
344 | src.as_ref().map(|it| it as &dyn ast::NameOwner), | ||
345 | SymbolKind::Macro, | ||
346 | ); | ||
291 | res.docs = self.docs(db); | 347 | res.docs = self.docs(db); |
292 | res | 348 | res |
293 | } | 349 | } |
@@ -330,7 +386,7 @@ impl ToNav for hir::Local { | |||
330 | NavigationTarget { | 386 | NavigationTarget { |
331 | file_id: full_range.file_id, | 387 | file_id: full_range.file_id, |
332 | name, | 388 | name, |
333 | kind: IDENT_PAT, | 389 | kind: SymbolKind::Local, |
334 | full_range: full_range.range, | 390 | full_range: full_range.range, |
335 | focus_range: None, | 391 | focus_range: None, |
336 | container_name: None, | 392 | container_name: None, |
@@ -354,7 +410,7 @@ impl ToNav for hir::TypeParam { | |||
354 | NavigationTarget { | 410 | NavigationTarget { |
355 | file_id: src.file_id.original_file(db), | 411 | file_id: src.file_id.original_file(db), |
356 | name: self.name(db).to_string().into(), | 412 | name: self.name(db).to_string().into(), |
357 | kind: TYPE_PARAM, | 413 | kind: SymbolKind::TypeParam, |
358 | full_range, | 414 | full_range, |
359 | focus_range, | 415 | focus_range, |
360 | container_name: None, | 416 | container_name: None, |
@@ -371,7 +427,7 @@ impl ToNav for hir::LifetimeParam { | |||
371 | NavigationTarget { | 427 | NavigationTarget { |
372 | file_id: src.file_id.original_file(db), | 428 | file_id: src.file_id.original_file(db), |
373 | name: self.name(db).to_string().into(), | 429 | name: self.name(db).to_string().into(), |
374 | kind: LIFETIME_PARAM, | 430 | kind: SymbolKind::LifetimeParam, |
375 | full_range, | 431 | full_range, |
376 | focus_range: Some(full_range), | 432 | focus_range: Some(full_range), |
377 | container_name: None, | 433 | container_name: None, |
@@ -432,7 +488,7 @@ fn foo() { enum FooInner { } } | |||
432 | 5..13, | 488 | 5..13, |
433 | ), | 489 | ), |
434 | name: "FooInner", | 490 | name: "FooInner", |
435 | kind: ENUM, | 491 | kind: Enum, |
436 | container_name: None, | 492 | container_name: None, |
437 | description: Some( | 493 | description: Some( |
438 | "enum FooInner", | 494 | "enum FooInner", |
@@ -448,7 +504,7 @@ fn foo() { enum FooInner { } } | |||
448 | 34..42, | 504 | 34..42, |
449 | ), | 505 | ), |
450 | name: "FooInner", | 506 | name: "FooInner", |
451 | kind: ENUM, | 507 | kind: Enum, |
452 | container_name: Some( | 508 | container_name: Some( |
453 | "foo", | 509 | "foo", |
454 | ), | 510 | ), |
diff --git a/crates/ide/src/file_structure.rs b/crates/ide/src/file_structure.rs index c51531391..32556dad3 100644 --- a/crates/ide/src/file_structure.rs +++ b/crates/ide/src/file_structure.rs | |||
@@ -1,15 +1,17 @@ | |||
1 | use syntax::{ | 1 | use syntax::{ |
2 | ast::{self, AttrsOwner, GenericParamsOwner, NameOwner}, | 2 | ast::{self, AttrsOwner, GenericParamsOwner, NameOwner}, |
3 | match_ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, TextRange, WalkEvent, | 3 | match_ast, AstNode, SourceFile, SyntaxNode, TextRange, WalkEvent, |
4 | }; | 4 | }; |
5 | 5 | ||
6 | use crate::SymbolKind; | ||
7 | |||
6 | #[derive(Debug, Clone)] | 8 | #[derive(Debug, Clone)] |
7 | pub struct StructureNode { | 9 | pub struct StructureNode { |
8 | pub parent: Option<usize>, | 10 | pub parent: Option<usize>, |
9 | pub label: String, | 11 | pub label: String, |
10 | pub navigation_range: TextRange, | 12 | pub navigation_range: TextRange, |
11 | pub node_range: TextRange, | 13 | pub node_range: TextRange, |
12 | pub kind: SyntaxKind, | 14 | pub kind: SymbolKind, |
13 | pub detail: Option<String>, | 15 | pub detail: Option<String>, |
14 | pub deprecated: bool, | 16 | pub deprecated: bool, |
15 | } | 17 | } |
@@ -51,25 +53,27 @@ pub(crate) fn file_structure(file: &SourceFile) -> Vec<StructureNode> { | |||
51 | } | 53 | } |
52 | 54 | ||
53 | fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | 55 | fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { |
54 | fn decl<N: NameOwner + AttrsOwner>(node: N) -> Option<StructureNode> { | 56 | fn decl<N: NameOwner + AttrsOwner>(node: N, kind: SymbolKind) -> Option<StructureNode> { |
55 | decl_with_detail(&node, None) | 57 | decl_with_detail(&node, None, kind) |
56 | } | 58 | } |
57 | 59 | ||
58 | fn decl_with_type_ref<N: NameOwner + AttrsOwner>( | 60 | fn decl_with_type_ref<N: NameOwner + AttrsOwner>( |
59 | node: &N, | 61 | node: &N, |
60 | type_ref: Option<ast::Type>, | 62 | type_ref: Option<ast::Type>, |
63 | kind: SymbolKind, | ||
61 | ) -> Option<StructureNode> { | 64 | ) -> Option<StructureNode> { |
62 | let detail = type_ref.map(|type_ref| { | 65 | let detail = type_ref.map(|type_ref| { |
63 | let mut detail = String::new(); | 66 | let mut detail = String::new(); |
64 | collapse_ws(type_ref.syntax(), &mut detail); | 67 | collapse_ws(type_ref.syntax(), &mut detail); |
65 | detail | 68 | detail |
66 | }); | 69 | }); |
67 | decl_with_detail(node, detail) | 70 | decl_with_detail(node, detail, kind) |
68 | } | 71 | } |
69 | 72 | ||
70 | fn decl_with_detail<N: NameOwner + AttrsOwner>( | 73 | fn decl_with_detail<N: NameOwner + AttrsOwner>( |
71 | node: &N, | 74 | node: &N, |
72 | detail: Option<String>, | 75 | detail: Option<String>, |
76 | kind: SymbolKind, | ||
73 | ) -> Option<StructureNode> { | 77 | ) -> Option<StructureNode> { |
74 | let name = node.name()?; | 78 | let name = node.name()?; |
75 | 79 | ||
@@ -78,7 +82,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
78 | label: name.text().to_string(), | 82 | label: name.text().to_string(), |
79 | navigation_range: name.syntax().text_range(), | 83 | navigation_range: name.syntax().text_range(), |
80 | node_range: node.syntax().text_range(), | 84 | node_range: node.syntax().text_range(), |
81 | kind: node.syntax().kind(), | 85 | kind, |
82 | detail, | 86 | detail, |
83 | deprecated: node.attrs().filter_map(|x| x.simple_name()).any(|x| x == "deprecated"), | 87 | deprecated: node.attrs().filter_map(|x| x.simple_name()).any(|x| x == "deprecated"), |
84 | }) | 88 | }) |
@@ -117,18 +121,18 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
117 | collapse_ws(ret_type.syntax(), &mut detail); | 121 | collapse_ws(ret_type.syntax(), &mut detail); |
118 | } | 122 | } |
119 | 123 | ||
120 | decl_with_detail(&it, Some(detail)) | 124 | decl_with_detail(&it, Some(detail), SymbolKind::Function) |
121 | }, | 125 | }, |
122 | ast::Struct(it) => decl(it), | 126 | ast::Struct(it) => decl(it, SymbolKind::Struct), |
123 | ast::Union(it) => decl(it), | 127 | ast::Union(it) => decl(it, SymbolKind::Union), |
124 | ast::Enum(it) => decl(it), | 128 | ast::Enum(it) => decl(it, SymbolKind::Enum), |
125 | ast::Variant(it) => decl(it), | 129 | ast::Variant(it) => decl(it, SymbolKind::Variant), |
126 | ast::Trait(it) => decl(it), | 130 | ast::Trait(it) => decl(it, SymbolKind::Trait), |
127 | ast::Module(it) => decl(it), | 131 | ast::Module(it) => decl(it, SymbolKind::Module), |
128 | ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty()), | 132 | ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::TypeAlias), |
129 | ast::RecordField(it) => decl_with_type_ref(&it, it.ty()), | 133 | ast::RecordField(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Field), |
130 | ast::Const(it) => decl_with_type_ref(&it, it.ty()), | 134 | ast::Const(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Const), |
131 | ast::Static(it) => decl_with_type_ref(&it, it.ty()), | 135 | ast::Static(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Static), |
132 | ast::Impl(it) => { | 136 | ast::Impl(it) => { |
133 | let target_type = it.self_ty()?; | 137 | let target_type = it.self_ty()?; |
134 | let target_trait = it.trait_(); | 138 | let target_trait = it.trait_(); |
@@ -144,13 +148,13 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
144 | label, | 148 | label, |
145 | navigation_range: target_type.syntax().text_range(), | 149 | navigation_range: target_type.syntax().text_range(), |
146 | node_range: it.syntax().text_range(), | 150 | node_range: it.syntax().text_range(), |
147 | kind: it.syntax().kind(), | 151 | kind: SymbolKind::Impl, |
148 | detail: None, | 152 | detail: None, |
149 | deprecated: false, | 153 | deprecated: false, |
150 | }; | 154 | }; |
151 | Some(node) | 155 | Some(node) |
152 | }, | 156 | }, |
153 | ast::MacroRules(it) => decl(it), | 157 | ast::MacroRules(it) => decl(it, SymbolKind::Macro), |
154 | _ => None, | 158 | _ => None, |
155 | } | 159 | } |
156 | } | 160 | } |
@@ -222,7 +226,7 @@ fn very_obsolete() {} | |||
222 | label: "Foo", | 226 | label: "Foo", |
223 | navigation_range: 8..11, | 227 | navigation_range: 8..11, |
224 | node_range: 1..26, | 228 | node_range: 1..26, |
225 | kind: STRUCT, | 229 | kind: Struct, |
226 | detail: None, | 230 | detail: None, |
227 | deprecated: false, | 231 | deprecated: false, |
228 | }, | 232 | }, |
@@ -233,7 +237,7 @@ fn very_obsolete() {} | |||
233 | label: "x", | 237 | label: "x", |
234 | navigation_range: 18..19, | 238 | navigation_range: 18..19, |
235 | node_range: 18..24, | 239 | node_range: 18..24, |
236 | kind: RECORD_FIELD, | 240 | kind: Field, |
237 | detail: Some( | 241 | detail: Some( |
238 | "i32", | 242 | "i32", |
239 | ), | 243 | ), |
@@ -244,7 +248,7 @@ fn very_obsolete() {} | |||
244 | label: "m", | 248 | label: "m", |
245 | navigation_range: 32..33, | 249 | navigation_range: 32..33, |
246 | node_range: 28..158, | 250 | node_range: 28..158, |
247 | kind: MODULE, | 251 | kind: Module, |
248 | detail: None, | 252 | detail: None, |
249 | deprecated: false, | 253 | deprecated: false, |
250 | }, | 254 | }, |
@@ -255,7 +259,7 @@ fn very_obsolete() {} | |||
255 | label: "bar1", | 259 | label: "bar1", |
256 | navigation_range: 43..47, | 260 | navigation_range: 43..47, |
257 | node_range: 40..52, | 261 | node_range: 40..52, |
258 | kind: FN, | 262 | kind: Function, |
259 | detail: Some( | 263 | detail: Some( |
260 | "fn()", | 264 | "fn()", |
261 | ), | 265 | ), |
@@ -268,7 +272,7 @@ fn very_obsolete() {} | |||
268 | label: "bar2", | 272 | label: "bar2", |
269 | navigation_range: 60..64, | 273 | navigation_range: 60..64, |
270 | node_range: 57..81, | 274 | node_range: 57..81, |
271 | kind: FN, | 275 | kind: Function, |
272 | detail: Some( | 276 | detail: Some( |
273 | "fn<T>(t: T) -> T", | 277 | "fn<T>(t: T) -> T", |
274 | ), | 278 | ), |
@@ -281,7 +285,7 @@ fn very_obsolete() {} | |||
281 | label: "bar3", | 285 | label: "bar3", |
282 | navigation_range: 89..93, | 286 | navigation_range: 89..93, |
283 | node_range: 86..156, | 287 | node_range: 86..156, |
284 | kind: FN, | 288 | kind: Function, |
285 | detail: Some( | 289 | detail: Some( |
286 | "fn<A, B>(a: A, b: B) -> Vec< u32 >", | 290 | "fn<A, B>(a: A, b: B) -> Vec< u32 >", |
287 | ), | 291 | ), |
@@ -292,7 +296,7 @@ fn very_obsolete() {} | |||
292 | label: "E", | 296 | label: "E", |
293 | navigation_range: 165..166, | 297 | navigation_range: 165..166, |
294 | node_range: 160..180, | 298 | node_range: 160..180, |
295 | kind: ENUM, | 299 | kind: Enum, |
296 | detail: None, | 300 | detail: None, |
297 | deprecated: false, | 301 | deprecated: false, |
298 | }, | 302 | }, |
@@ -303,7 +307,7 @@ fn very_obsolete() {} | |||
303 | label: "X", | 307 | label: "X", |
304 | navigation_range: 169..170, | 308 | navigation_range: 169..170, |
305 | node_range: 169..170, | 309 | node_range: 169..170, |
306 | kind: VARIANT, | 310 | kind: Variant, |
307 | detail: None, | 311 | detail: None, |
308 | deprecated: false, | 312 | deprecated: false, |
309 | }, | 313 | }, |
@@ -314,7 +318,7 @@ fn very_obsolete() {} | |||
314 | label: "Y", | 318 | label: "Y", |
315 | navigation_range: 172..173, | 319 | navigation_range: 172..173, |
316 | node_range: 172..178, | 320 | node_range: 172..178, |
317 | kind: VARIANT, | 321 | kind: Variant, |
318 | detail: None, | 322 | detail: None, |
319 | deprecated: false, | 323 | deprecated: false, |
320 | }, | 324 | }, |
@@ -323,7 +327,7 @@ fn very_obsolete() {} | |||
323 | label: "T", | 327 | label: "T", |
324 | navigation_range: 186..187, | 328 | navigation_range: 186..187, |
325 | node_range: 181..193, | 329 | node_range: 181..193, |
326 | kind: TYPE_ALIAS, | 330 | kind: TypeAlias, |
327 | detail: Some( | 331 | detail: Some( |
328 | "()", | 332 | "()", |
329 | ), | 333 | ), |
@@ -334,7 +338,7 @@ fn very_obsolete() {} | |||
334 | label: "S", | 338 | label: "S", |
335 | navigation_range: 201..202, | 339 | navigation_range: 201..202, |
336 | node_range: 194..213, | 340 | node_range: 194..213, |
337 | kind: STATIC, | 341 | kind: Static, |
338 | detail: Some( | 342 | detail: Some( |
339 | "i32", | 343 | "i32", |
340 | ), | 344 | ), |
@@ -345,7 +349,7 @@ fn very_obsolete() {} | |||
345 | label: "C", | 349 | label: "C", |
346 | navigation_range: 220..221, | 350 | navigation_range: 220..221, |
347 | node_range: 214..232, | 351 | node_range: 214..232, |
348 | kind: CONST, | 352 | kind: Const, |
349 | detail: Some( | 353 | detail: Some( |
350 | "i32", | 354 | "i32", |
351 | ), | 355 | ), |
@@ -356,7 +360,7 @@ fn very_obsolete() {} | |||
356 | label: "impl E", | 360 | label: "impl E", |
357 | navigation_range: 239..240, | 361 | navigation_range: 239..240, |
358 | node_range: 234..243, | 362 | node_range: 234..243, |
359 | kind: IMPL, | 363 | kind: Impl, |
360 | detail: None, | 364 | detail: None, |
361 | deprecated: false, | 365 | deprecated: false, |
362 | }, | 366 | }, |
@@ -365,7 +369,7 @@ fn very_obsolete() {} | |||
365 | label: "impl fmt::Debug for E", | 369 | label: "impl fmt::Debug for E", |
366 | navigation_range: 265..266, | 370 | navigation_range: 265..266, |
367 | node_range: 245..269, | 371 | node_range: 245..269, |
368 | kind: IMPL, | 372 | kind: Impl, |
369 | detail: None, | 373 | detail: None, |
370 | deprecated: false, | 374 | deprecated: false, |
371 | }, | 375 | }, |
@@ -374,7 +378,7 @@ fn very_obsolete() {} | |||
374 | label: "mc", | 378 | label: "mc", |
375 | navigation_range: 284..286, | 379 | navigation_range: 284..286, |
376 | node_range: 271..303, | 380 | node_range: 271..303, |
377 | kind: MACRO_RULES, | 381 | kind: Macro, |
378 | detail: None, | 382 | detail: None, |
379 | deprecated: false, | 383 | deprecated: false, |
380 | }, | 384 | }, |
@@ -383,7 +387,7 @@ fn very_obsolete() {} | |||
383 | label: "mcexp", | 387 | label: "mcexp", |
384 | navigation_range: 334..339, | 388 | navigation_range: 334..339, |
385 | node_range: 305..356, | 389 | node_range: 305..356, |
386 | kind: MACRO_RULES, | 390 | kind: Macro, |
387 | detail: None, | 391 | detail: None, |
388 | deprecated: false, | 392 | deprecated: false, |
389 | }, | 393 | }, |
@@ -392,7 +396,7 @@ fn very_obsolete() {} | |||
392 | label: "mcexp", | 396 | label: "mcexp", |
393 | navigation_range: 387..392, | 397 | navigation_range: 387..392, |
394 | node_range: 358..409, | 398 | node_range: 358..409, |
395 | kind: MACRO_RULES, | 399 | kind: Macro, |
396 | detail: None, | 400 | detail: None, |
397 | deprecated: false, | 401 | deprecated: false, |
398 | }, | 402 | }, |
@@ -401,7 +405,7 @@ fn very_obsolete() {} | |||
401 | label: "obsolete", | 405 | label: "obsolete", |
402 | navigation_range: 428..436, | 406 | navigation_range: 428..436, |
403 | node_range: 411..441, | 407 | node_range: 411..441, |
404 | kind: FN, | 408 | kind: Function, |
405 | detail: Some( | 409 | detail: Some( |
406 | "fn()", | 410 | "fn()", |
407 | ), | 411 | ), |
@@ -412,7 +416,7 @@ fn very_obsolete() {} | |||
412 | label: "very_obsolete", | 416 | label: "very_obsolete", |
413 | navigation_range: 481..494, | 417 | navigation_range: 481..494, |
414 | node_range: 443..499, | 418 | node_range: 443..499, |
415 | kind: FN, | 419 | kind: Function, |
416 | detail: Some( | 420 | detail: Some( |
417 | "fn()", | 421 | "fn()", |
418 | ), | 422 | ), |
diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs index 173509b08..5bee69f4b 100644 --- a/crates/ide/src/goto_definition.rs +++ b/crates/ide/src/goto_definition.rs | |||
@@ -9,7 +9,7 @@ use syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset, | |||
9 | 9 | ||
10 | use crate::{ | 10 | use crate::{ |
11 | display::{ToNav, TryToNav}, | 11 | display::{ToNav, TryToNav}, |
12 | FilePosition, NavigationTarget, RangeInfo, | 12 | FilePosition, NavigationTarget, RangeInfo, SymbolKind, |
13 | }; | 13 | }; |
14 | 14 | ||
15 | // Feature: Go to Definition | 15 | // Feature: Go to Definition |
@@ -86,7 +86,7 @@ fn self_to_nav_target(self_param: ast::SelfParam, file_id: FileId) -> Option<Nav | |||
86 | full_range: self_param.syntax().text_range(), | 86 | full_range: self_param.syntax().text_range(), |
87 | focus_range: Some(self_token.text_range()), | 87 | focus_range: Some(self_token.text_range()), |
88 | name: self_token.text().clone(), | 88 | name: self_token.text().clone(), |
89 | kind: self_token.kind(), | 89 | kind: SymbolKind::SelfParam, |
90 | container_name: None, | 90 | container_name: None, |
91 | description: None, | 91 | description: None, |
92 | docs: None, | 92 | docs: None, |
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index da6bb726a..dca098af6 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs | |||
@@ -2191,7 +2191,7 @@ fn foo_<|>test() {} | |||
2191 | 11..19, | 2191 | 11..19, |
2192 | ), | 2192 | ), |
2193 | name: "foo_test", | 2193 | name: "foo_test", |
2194 | kind: FN, | 2194 | kind: Function, |
2195 | container_name: None, | 2195 | container_name: None, |
2196 | description: None, | 2196 | description: None, |
2197 | docs: None, | 2197 | docs: None, |
@@ -2234,7 +2234,7 @@ mod tests<|> { | |||
2234 | 4..9, | 2234 | 4..9, |
2235 | ), | 2235 | ), |
2236 | name: "tests", | 2236 | name: "tests", |
2237 | kind: MODULE, | 2237 | kind: Module, |
2238 | container_name: None, | 2238 | container_name: None, |
2239 | description: None, | 2239 | description: None, |
2240 | docs: None, | 2240 | docs: None, |
@@ -2273,7 +2273,7 @@ fn main() { let s<|>t = S{ f1:0 }; } | |||
2273 | 7..8, | 2273 | 7..8, |
2274 | ), | 2274 | ), |
2275 | name: "S", | 2275 | name: "S", |
2276 | kind: STRUCT, | 2276 | kind: Struct, |
2277 | container_name: None, | 2277 | container_name: None, |
2278 | description: Some( | 2278 | description: Some( |
2279 | "struct S", | 2279 | "struct S", |
@@ -2312,7 +2312,7 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; } | |||
2312 | 24..25, | 2312 | 24..25, |
2313 | ), | 2313 | ), |
2314 | name: "S", | 2314 | name: "S", |
2315 | kind: STRUCT, | 2315 | kind: Struct, |
2316 | container_name: None, | 2316 | container_name: None, |
2317 | description: Some( | 2317 | description: Some( |
2318 | "struct S", | 2318 | "struct S", |
@@ -2331,7 +2331,7 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; } | |||
2331 | 7..10, | 2331 | 7..10, |
2332 | ), | 2332 | ), |
2333 | name: "Arg", | 2333 | name: "Arg", |
2334 | kind: STRUCT, | 2334 | kind: Struct, |
2335 | container_name: None, | 2335 | container_name: None, |
2336 | description: Some( | 2336 | description: Some( |
2337 | "struct Arg", | 2337 | "struct Arg", |
@@ -2370,7 +2370,7 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; } | |||
2370 | 24..25, | 2370 | 24..25, |
2371 | ), | 2371 | ), |
2372 | name: "S", | 2372 | name: "S", |
2373 | kind: STRUCT, | 2373 | kind: Struct, |
2374 | container_name: None, | 2374 | container_name: None, |
2375 | description: Some( | 2375 | description: Some( |
2376 | "struct S", | 2376 | "struct S", |
@@ -2389,7 +2389,7 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; } | |||
2389 | 7..10, | 2389 | 7..10, |
2390 | ), | 2390 | ), |
2391 | name: "Arg", | 2391 | name: "Arg", |
2392 | kind: STRUCT, | 2392 | kind: Struct, |
2393 | container_name: None, | 2393 | container_name: None, |
2394 | description: Some( | 2394 | description: Some( |
2395 | "struct Arg", | 2395 | "struct Arg", |
@@ -2431,7 +2431,7 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } | |||
2431 | 7..8, | 2431 | 7..8, |
2432 | ), | 2432 | ), |
2433 | name: "A", | 2433 | name: "A", |
2434 | kind: STRUCT, | 2434 | kind: Struct, |
2435 | container_name: None, | 2435 | container_name: None, |
2436 | description: Some( | 2436 | description: Some( |
2437 | "struct A", | 2437 | "struct A", |
@@ -2450,7 +2450,7 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } | |||
2450 | 22..23, | 2450 | 22..23, |
2451 | ), | 2451 | ), |
2452 | name: "B", | 2452 | name: "B", |
2453 | kind: STRUCT, | 2453 | kind: Struct, |
2454 | container_name: None, | 2454 | container_name: None, |
2455 | description: Some( | 2455 | description: Some( |
2456 | "struct B", | 2456 | "struct B", |
@@ -2469,7 +2469,7 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } | |||
2469 | 53..54, | 2469 | 53..54, |
2470 | ), | 2470 | ), |
2471 | name: "C", | 2471 | name: "C", |
2472 | kind: STRUCT, | 2472 | kind: Struct, |
2473 | container_name: None, | 2473 | container_name: None, |
2474 | description: Some( | 2474 | description: Some( |
2475 | "pub struct C", | 2475 | "pub struct C", |
@@ -2508,7 +2508,7 @@ fn main() { let s<|>t = foo(); } | |||
2508 | 6..9, | 2508 | 6..9, |
2509 | ), | 2509 | ), |
2510 | name: "Foo", | 2510 | name: "Foo", |
2511 | kind: TRAIT, | 2511 | kind: Trait, |
2512 | container_name: None, | 2512 | container_name: None, |
2513 | description: Some( | 2513 | description: Some( |
2514 | "trait Foo", | 2514 | "trait Foo", |
@@ -2548,7 +2548,7 @@ fn main() { let s<|>t = foo(); } | |||
2548 | 6..9, | 2548 | 6..9, |
2549 | ), | 2549 | ), |
2550 | name: "Foo", | 2550 | name: "Foo", |
2551 | kind: TRAIT, | 2551 | kind: Trait, |
2552 | container_name: None, | 2552 | container_name: None, |
2553 | description: Some( | 2553 | description: Some( |
2554 | "trait Foo", | 2554 | "trait Foo", |
@@ -2567,7 +2567,7 @@ fn main() { let s<|>t = foo(); } | |||
2567 | 23..24, | 2567 | 23..24, |
2568 | ), | 2568 | ), |
2569 | name: "S", | 2569 | name: "S", |
2570 | kind: STRUCT, | 2570 | kind: Struct, |
2571 | container_name: None, | 2571 | container_name: None, |
2572 | description: Some( | 2572 | description: Some( |
2573 | "struct S", | 2573 | "struct S", |
@@ -2607,7 +2607,7 @@ fn main() { let s<|>t = foo(); } | |||
2607 | 6..9, | 2607 | 6..9, |
2608 | ), | 2608 | ), |
2609 | name: "Foo", | 2609 | name: "Foo", |
2610 | kind: TRAIT, | 2610 | kind: Trait, |
2611 | container_name: None, | 2611 | container_name: None, |
2612 | description: Some( | 2612 | description: Some( |
2613 | "trait Foo", | 2613 | "trait Foo", |
@@ -2626,7 +2626,7 @@ fn main() { let s<|>t = foo(); } | |||
2626 | 19..22, | 2626 | 19..22, |
2627 | ), | 2627 | ), |
2628 | name: "Bar", | 2628 | name: "Bar", |
2629 | kind: TRAIT, | 2629 | kind: Trait, |
2630 | container_name: None, | 2630 | container_name: None, |
2631 | description: Some( | 2631 | description: Some( |
2632 | "trait Bar", | 2632 | "trait Bar", |
@@ -2669,7 +2669,7 @@ fn main() { let s<|>t = foo(); } | |||
2669 | 6..9, | 2669 | 6..9, |
2670 | ), | 2670 | ), |
2671 | name: "Foo", | 2671 | name: "Foo", |
2672 | kind: TRAIT, | 2672 | kind: Trait, |
2673 | container_name: None, | 2673 | container_name: None, |
2674 | description: Some( | 2674 | description: Some( |
2675 | "trait Foo", | 2675 | "trait Foo", |
@@ -2688,7 +2688,7 @@ fn main() { let s<|>t = foo(); } | |||
2688 | 22..25, | 2688 | 22..25, |
2689 | ), | 2689 | ), |
2690 | name: "Bar", | 2690 | name: "Bar", |
2691 | kind: TRAIT, | 2691 | kind: Trait, |
2692 | container_name: None, | 2692 | container_name: None, |
2693 | description: Some( | 2693 | description: Some( |
2694 | "trait Bar", | 2694 | "trait Bar", |
@@ -2707,7 +2707,7 @@ fn main() { let s<|>t = foo(); } | |||
2707 | 39..41, | 2707 | 39..41, |
2708 | ), | 2708 | ), |
2709 | name: "S1", | 2709 | name: "S1", |
2710 | kind: STRUCT, | 2710 | kind: Struct, |
2711 | container_name: None, | 2711 | container_name: None, |
2712 | description: Some( | 2712 | description: Some( |
2713 | "struct S1", | 2713 | "struct S1", |
@@ -2726,7 +2726,7 @@ fn main() { let s<|>t = foo(); } | |||
2726 | 52..54, | 2726 | 52..54, |
2727 | ), | 2727 | ), |
2728 | name: "S2", | 2728 | name: "S2", |
2729 | kind: STRUCT, | 2729 | kind: Struct, |
2730 | container_name: None, | 2730 | container_name: None, |
2731 | description: Some( | 2731 | description: Some( |
2732 | "struct S2", | 2732 | "struct S2", |
@@ -2763,7 +2763,7 @@ fn foo(ar<|>g: &impl Foo) {} | |||
2763 | 6..9, | 2763 | 6..9, |
2764 | ), | 2764 | ), |
2765 | name: "Foo", | 2765 | name: "Foo", |
2766 | kind: TRAIT, | 2766 | kind: Trait, |
2767 | container_name: None, | 2767 | container_name: None, |
2768 | description: Some( | 2768 | description: Some( |
2769 | "trait Foo", | 2769 | "trait Foo", |
@@ -2803,7 +2803,7 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {} | |||
2803 | 6..9, | 2803 | 6..9, |
2804 | ), | 2804 | ), |
2805 | name: "Foo", | 2805 | name: "Foo", |
2806 | kind: TRAIT, | 2806 | kind: Trait, |
2807 | container_name: None, | 2807 | container_name: None, |
2808 | description: Some( | 2808 | description: Some( |
2809 | "trait Foo", | 2809 | "trait Foo", |
@@ -2822,7 +2822,7 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {} | |||
2822 | 19..22, | 2822 | 19..22, |
2823 | ), | 2823 | ), |
2824 | name: "Bar", | 2824 | name: "Bar", |
2825 | kind: TRAIT, | 2825 | kind: Trait, |
2826 | container_name: None, | 2826 | container_name: None, |
2827 | description: Some( | 2827 | description: Some( |
2828 | "trait Bar", | 2828 | "trait Bar", |
@@ -2841,7 +2841,7 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {} | |||
2841 | 36..37, | 2841 | 36..37, |
2842 | ), | 2842 | ), |
2843 | name: "S", | 2843 | name: "S", |
2844 | kind: STRUCT, | 2844 | kind: Struct, |
2845 | container_name: None, | 2845 | container_name: None, |
2846 | description: Some( | 2846 | description: Some( |
2847 | "struct S", | 2847 | "struct S", |
@@ -2886,7 +2886,7 @@ mod future { | |||
2886 | 140..146, | 2886 | 140..146, |
2887 | ), | 2887 | ), |
2888 | name: "Future", | 2888 | name: "Future", |
2889 | kind: TRAIT, | 2889 | kind: Trait, |
2890 | container_name: None, | 2890 | container_name: None, |
2891 | description: Some( | 2891 | description: Some( |
2892 | "pub trait Future", | 2892 | "pub trait Future", |
@@ -2905,7 +2905,7 @@ mod future { | |||
2905 | 7..8, | 2905 | 7..8, |
2906 | ), | 2906 | ), |
2907 | name: "S", | 2907 | name: "S", |
2908 | kind: STRUCT, | 2908 | kind: Struct, |
2909 | container_name: None, | 2909 | container_name: None, |
2910 | description: Some( | 2910 | description: Some( |
2911 | "struct S", | 2911 | "struct S", |
@@ -2943,7 +2943,7 @@ fn foo(ar<|>g: &impl Foo<S>) {} | |||
2943 | 6..9, | 2943 | 6..9, |
2944 | ), | 2944 | ), |
2945 | name: "Foo", | 2945 | name: "Foo", |
2946 | kind: TRAIT, | 2946 | kind: Trait, |
2947 | container_name: None, | 2947 | container_name: None, |
2948 | description: Some( | 2948 | description: Some( |
2949 | "trait Foo", | 2949 | "trait Foo", |
@@ -2962,7 +2962,7 @@ fn foo(ar<|>g: &impl Foo<S>) {} | |||
2962 | 23..24, | 2962 | 23..24, |
2963 | ), | 2963 | ), |
2964 | name: "S", | 2964 | name: "S", |
2965 | kind: STRUCT, | 2965 | kind: Struct, |
2966 | container_name: None, | 2966 | container_name: None, |
2967 | description: Some( | 2967 | description: Some( |
2968 | "struct S", | 2968 | "struct S", |
@@ -3005,7 +3005,7 @@ fn main() { let s<|>t = foo(); } | |||
3005 | 49..50, | 3005 | 49..50, |
3006 | ), | 3006 | ), |
3007 | name: "B", | 3007 | name: "B", |
3008 | kind: STRUCT, | 3008 | kind: Struct, |
3009 | container_name: None, | 3009 | container_name: None, |
3010 | description: Some( | 3010 | description: Some( |
3011 | "struct B", | 3011 | "struct B", |
@@ -3024,7 +3024,7 @@ fn main() { let s<|>t = foo(); } | |||
3024 | 6..9, | 3024 | 6..9, |
3025 | ), | 3025 | ), |
3026 | name: "Foo", | 3026 | name: "Foo", |
3027 | kind: TRAIT, | 3027 | kind: Trait, |
3028 | container_name: None, | 3028 | container_name: None, |
3029 | description: Some( | 3029 | description: Some( |
3030 | "trait Foo", | 3030 | "trait Foo", |
@@ -3061,7 +3061,7 @@ fn foo(ar<|>g: &dyn Foo) {} | |||
3061 | 6..9, | 3061 | 6..9, |
3062 | ), | 3062 | ), |
3063 | name: "Foo", | 3063 | name: "Foo", |
3064 | kind: TRAIT, | 3064 | kind: Trait, |
3065 | container_name: None, | 3065 | container_name: None, |
3066 | description: Some( | 3066 | description: Some( |
3067 | "trait Foo", | 3067 | "trait Foo", |
@@ -3099,7 +3099,7 @@ fn foo(ar<|>g: &dyn Foo<S>) {} | |||
3099 | 6..9, | 3099 | 6..9, |
3100 | ), | 3100 | ), |
3101 | name: "Foo", | 3101 | name: "Foo", |
3102 | kind: TRAIT, | 3102 | kind: Trait, |
3103 | container_name: None, | 3103 | container_name: None, |
3104 | description: Some( | 3104 | description: Some( |
3105 | "trait Foo", | 3105 | "trait Foo", |
@@ -3118,7 +3118,7 @@ fn foo(ar<|>g: &dyn Foo<S>) {} | |||
3118 | 23..24, | 3118 | 23..24, |
3119 | ), | 3119 | ), |
3120 | name: "S", | 3120 | name: "S", |
3121 | kind: STRUCT, | 3121 | kind: Struct, |
3122 | container_name: None, | 3122 | container_name: None, |
3123 | description: Some( | 3123 | description: Some( |
3124 | "struct S", | 3124 | "struct S", |
@@ -3159,7 +3159,7 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {} | |||
3159 | 6..15, | 3159 | 6..15, |
3160 | ), | 3160 | ), |
3161 | name: "ImplTrait", | 3161 | name: "ImplTrait", |
3162 | kind: TRAIT, | 3162 | kind: Trait, |
3163 | container_name: None, | 3163 | container_name: None, |
3164 | description: Some( | 3164 | description: Some( |
3165 | "trait ImplTrait", | 3165 | "trait ImplTrait", |
@@ -3178,7 +3178,7 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {} | |||
3178 | 50..51, | 3178 | 50..51, |
3179 | ), | 3179 | ), |
3180 | name: "B", | 3180 | name: "B", |
3181 | kind: STRUCT, | 3181 | kind: Struct, |
3182 | container_name: None, | 3182 | container_name: None, |
3183 | description: Some( | 3183 | description: Some( |
3184 | "struct B", | 3184 | "struct B", |
@@ -3197,7 +3197,7 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {} | |||
3197 | 28..36, | 3197 | 28..36, |
3198 | ), | 3198 | ), |
3199 | name: "DynTrait", | 3199 | name: "DynTrait", |
3200 | kind: TRAIT, | 3200 | kind: Trait, |
3201 | container_name: None, | 3201 | container_name: None, |
3202 | description: Some( | 3202 | description: Some( |
3203 | "trait DynTrait", | 3203 | "trait DynTrait", |
@@ -3216,7 +3216,7 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {} | |||
3216 | 65..66, | 3216 | 65..66, |
3217 | ), | 3217 | ), |
3218 | name: "S", | 3218 | name: "S", |
3219 | kind: STRUCT, | 3219 | kind: Struct, |
3220 | container_name: None, | 3220 | container_name: None, |
3221 | description: Some( | 3221 | description: Some( |
3222 | "struct S", | 3222 | "struct S", |
@@ -3264,7 +3264,7 @@ fn main() { let s<|>t = test().get(); } | |||
3264 | 6..9, | 3264 | 6..9, |
3265 | ), | 3265 | ), |
3266 | name: "Foo", | 3266 | name: "Foo", |
3267 | kind: TRAIT, | 3267 | kind: Trait, |
3268 | container_name: None, | 3268 | container_name: None, |
3269 | description: Some( | 3269 | description: Some( |
3270 | "trait Foo", | 3270 | "trait Foo", |
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 4b245c040..dbad9a84f 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs | |||
@@ -64,7 +64,7 @@ use crate::display::ToNav; | |||
64 | pub use crate::{ | 64 | pub use crate::{ |
65 | call_hierarchy::CallItem, | 65 | call_hierarchy::CallItem, |
66 | diagnostics::{Diagnostic, DiagnosticsConfig, Fix, Severity}, | 66 | diagnostics::{Diagnostic, DiagnosticsConfig, Fix, Severity}, |
67 | display::NavigationTarget, | 67 | display::navigation_target::{NavigationTarget, SymbolKind}, |
68 | expand_macro::ExpandedMacro, | 68 | expand_macro::ExpandedMacro, |
69 | file_structure::StructureNode, | 69 | file_structure::StructureNode, |
70 | folding_ranges::{Fold, FoldKind}, | 70 | folding_ranges::{Fold, FoldKind}, |
diff --git a/crates/ide/src/parent_module.rs b/crates/ide/src/parent_module.rs index 6cc3b2991..be344a09b 100644 --- a/crates/ide/src/parent_module.rs +++ b/crates/ide/src/parent_module.rs | |||
@@ -78,7 +78,7 @@ mod tests { | |||
78 | ", | 78 | ", |
79 | ); | 79 | ); |
80 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); | 80 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); |
81 | nav.assert_match("foo MODULE FileId(0) 0..8"); | 81 | nav.assert_match("foo Module FileId(0) 0..8"); |
82 | } | 82 | } |
83 | 83 | ||
84 | #[test] | 84 | #[test] |
@@ -97,7 +97,7 @@ mod tests { | |||
97 | ", | 97 | ", |
98 | ); | 98 | ); |
99 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); | 99 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); |
100 | nav.assert_match("foo MODULE FileId(0) 0..8"); | 100 | nav.assert_match("foo Module FileId(0) 0..8"); |
101 | } | 101 | } |
102 | 102 | ||
103 | #[test] | 103 | #[test] |
@@ -113,7 +113,7 @@ mod tests { | |||
113 | ", | 113 | ", |
114 | ); | 114 | ); |
115 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); | 115 | let nav = analysis.parent_module(pos).unwrap().pop().unwrap(); |
116 | nav.assert_match("baz MODULE FileId(0) 32..44"); | 116 | nav.assert_match("baz Module FileId(0) 32..44"); |
117 | } | 117 | } |
118 | 118 | ||
119 | #[test] | 119 | #[test] |
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs index 98190a86b..d8069eb64 100644 --- a/crates/ide/src/references.rs +++ b/crates/ide/src/references.rs | |||
@@ -24,7 +24,7 @@ use syntax::{ | |||
24 | match_ast, AstNode, SyntaxKind, SyntaxNode, TextRange, TokenAtOffset, | 24 | match_ast, AstNode, SyntaxKind, SyntaxNode, TextRange, TokenAtOffset, |
25 | }; | 25 | }; |
26 | 26 | ||
27 | use crate::{display::TryToNav, FilePosition, FileRange, NavigationTarget, RangeInfo}; | 27 | use crate::{display::TryToNav, FilePosition, FileRange, NavigationTarget, RangeInfo, SymbolKind}; |
28 | 28 | ||
29 | #[derive(Debug, Clone)] | 29 | #[derive(Debug, Clone)] |
30 | pub struct ReferenceSearchResult { | 30 | pub struct ReferenceSearchResult { |
@@ -278,7 +278,7 @@ fn try_find_self_references( | |||
278 | full_range: self_param.syntax().text_range(), | 278 | full_range: self_param.syntax().text_range(), |
279 | focus_range: Some(param_self_token.text_range()), | 279 | focus_range: Some(param_self_token.text_range()), |
280 | name: param_self_token.text().clone(), | 280 | name: param_self_token.text().clone(), |
281 | kind: param_self_token.kind(), | 281 | kind: SymbolKind::SelfParam, |
282 | container_name: None, | 282 | container_name: None, |
283 | description: None, | 283 | description: None, |
284 | docs: None, | 284 | docs: None, |
@@ -343,7 +343,7 @@ fn main() { | |||
343 | } | 343 | } |
344 | "#, | 344 | "#, |
345 | expect![[r#" | 345 | expect![[r#" |
346 | Foo STRUCT FileId(0) 0..26 7..10 Other | 346 | Foo Struct FileId(0) 0..26 7..10 Other |
347 | 347 | ||
348 | FileId(0) 101..104 StructLiteral | 348 | FileId(0) 101..104 StructLiteral |
349 | "#]], | 349 | "#]], |
@@ -361,7 +361,7 @@ struct Foo<|> {} | |||
361 | } | 361 | } |
362 | "#, | 362 | "#, |
363 | expect![[r#" | 363 | expect![[r#" |
364 | Foo STRUCT FileId(0) 0..13 7..10 Other | 364 | Foo Struct FileId(0) 0..13 7..10 Other |
365 | 365 | ||
366 | FileId(0) 41..44 Other | 366 | FileId(0) 41..44 Other |
367 | FileId(0) 54..57 StructLiteral | 367 | FileId(0) 54..57 StructLiteral |
@@ -380,7 +380,7 @@ struct Foo<T> <|>{} | |||
380 | } | 380 | } |
381 | "#, | 381 | "#, |
382 | expect![[r#" | 382 | expect![[r#" |
383 | Foo STRUCT FileId(0) 0..16 7..10 Other | 383 | Foo Struct FileId(0) 0..16 7..10 Other |
384 | 384 | ||
385 | FileId(0) 64..67 StructLiteral | 385 | FileId(0) 64..67 StructLiteral |
386 | "#]], | 386 | "#]], |
@@ -399,7 +399,7 @@ fn main() { | |||
399 | } | 399 | } |
400 | "#, | 400 | "#, |
401 | expect![[r#" | 401 | expect![[r#" |
402 | Foo STRUCT FileId(0) 0..16 7..10 Other | 402 | Foo Struct FileId(0) 0..16 7..10 Other |
403 | 403 | ||
404 | FileId(0) 54..57 StructLiteral | 404 | FileId(0) 54..57 StructLiteral |
405 | "#]], | 405 | "#]], |
@@ -420,7 +420,7 @@ fn main() { | |||
420 | } | 420 | } |
421 | "#, | 421 | "#, |
422 | expect![[r#" | 422 | expect![[r#" |
423 | Foo ENUM FileId(0) 0..26 5..8 Other | 423 | Foo Enum FileId(0) 0..26 5..8 Other |
424 | 424 | ||
425 | FileId(0) 63..66 EnumLiteral | 425 | FileId(0) 63..66 EnumLiteral |
426 | "#]], | 426 | "#]], |
@@ -441,7 +441,7 @@ fn main() { | |||
441 | } | 441 | } |
442 | "#, | 442 | "#, |
443 | expect![[r#" | 443 | expect![[r#" |
444 | Foo ENUM FileId(0) 0..26 5..8 Other | 444 | Foo Enum FileId(0) 0..26 5..8 Other |
445 | 445 | ||
446 | FileId(0) 50..53 Other | 446 | FileId(0) 50..53 Other |
447 | FileId(0) 63..66 EnumLiteral | 447 | FileId(0) 63..66 EnumLiteral |
@@ -463,7 +463,7 @@ fn main() { | |||
463 | } | 463 | } |
464 | "#, | 464 | "#, |
465 | expect![[r#" | 465 | expect![[r#" |
466 | Foo ENUM FileId(0) 0..32 5..8 Other | 466 | Foo Enum FileId(0) 0..32 5..8 Other |
467 | 467 | ||
468 | FileId(0) 73..76 EnumLiteral | 468 | FileId(0) 73..76 EnumLiteral |
469 | "#]], | 469 | "#]], |
@@ -484,7 +484,7 @@ fn main() { | |||
484 | } | 484 | } |
485 | "#, | 485 | "#, |
486 | expect![[r#" | 486 | expect![[r#" |
487 | Foo ENUM FileId(0) 0..33 5..8 Other | 487 | Foo Enum FileId(0) 0..33 5..8 Other |
488 | 488 | ||
489 | FileId(0) 70..73 EnumLiteral | 489 | FileId(0) 70..73 EnumLiteral |
490 | "#]], | 490 | "#]], |
@@ -507,7 +507,7 @@ fn main() { | |||
507 | i = 5; | 507 | i = 5; |
508 | }"#, | 508 | }"#, |
509 | expect![[r#" | 509 | expect![[r#" |
510 | i IDENT_PAT FileId(0) 24..25 Other Write | 510 | i Local FileId(0) 24..25 Other Write |
511 | 511 | ||
512 | FileId(0) 50..51 Other Write | 512 | FileId(0) 50..51 Other Write |
513 | FileId(0) 54..55 Other Read | 513 | FileId(0) 54..55 Other Read |
@@ -531,7 +531,7 @@ fn bar() { | |||
531 | } | 531 | } |
532 | "#, | 532 | "#, |
533 | expect![[r#" | 533 | expect![[r#" |
534 | spam IDENT_PAT FileId(0) 19..23 Other | 534 | spam Local FileId(0) 19..23 Other |
535 | 535 | ||
536 | FileId(0) 34..38 Other Read | 536 | FileId(0) 34..38 Other Read |
537 | FileId(0) 41..45 Other Read | 537 | FileId(0) 41..45 Other Read |
@@ -546,7 +546,7 @@ fn bar() { | |||
546 | fn foo(i : u32) -> u32 { i<|> } | 546 | fn foo(i : u32) -> u32 { i<|> } |
547 | "#, | 547 | "#, |
548 | expect![[r#" | 548 | expect![[r#" |
549 | i IDENT_PAT FileId(0) 7..8 Other | 549 | i Local FileId(0) 7..8 Other |
550 | 550 | ||
551 | FileId(0) 25..26 Other Read | 551 | FileId(0) 25..26 Other Read |
552 | "#]], | 552 | "#]], |
@@ -560,7 +560,7 @@ fn foo(i : u32) -> u32 { i<|> } | |||
560 | fn foo(i<|> : u32) -> u32 { i } | 560 | fn foo(i<|> : u32) -> u32 { i } |
561 | "#, | 561 | "#, |
562 | expect![[r#" | 562 | expect![[r#" |
563 | i IDENT_PAT FileId(0) 7..8 Other | 563 | i Local FileId(0) 7..8 Other |
564 | 564 | ||
565 | FileId(0) 25..26 Other Read | 565 | FileId(0) 25..26 Other Read |
566 | "#]], | 566 | "#]], |
@@ -581,7 +581,7 @@ fn main(s: Foo) { | |||
581 | } | 581 | } |
582 | "#, | 582 | "#, |
583 | expect![[r#" | 583 | expect![[r#" |
584 | spam RECORD_FIELD FileId(0) 17..30 21..25 Other | 584 | spam Field FileId(0) 17..30 21..25 Other |
585 | 585 | ||
586 | FileId(0) 67..71 Other Read | 586 | FileId(0) 67..71 Other Read |
587 | "#]], | 587 | "#]], |
@@ -598,7 +598,7 @@ impl Foo { | |||
598 | } | 598 | } |
599 | "#, | 599 | "#, |
600 | expect![[r#" | 600 | expect![[r#" |
601 | f FN FileId(0) 27..43 30..31 Other | 601 | f Function FileId(0) 27..43 30..31 Other |
602 | 602 | ||
603 | "#]], | 603 | "#]], |
604 | ); | 604 | ); |
@@ -615,7 +615,7 @@ enum Foo { | |||
615 | } | 615 | } |
616 | "#, | 616 | "#, |
617 | expect![[r#" | 617 | expect![[r#" |
618 | B VARIANT FileId(0) 22..23 22..23 Other | 618 | B Variant FileId(0) 22..23 22..23 Other |
619 | 619 | ||
620 | "#]], | 620 | "#]], |
621 | ); | 621 | ); |
@@ -632,7 +632,7 @@ enum Foo { | |||
632 | } | 632 | } |
633 | "#, | 633 | "#, |
634 | expect![[r#" | 634 | expect![[r#" |
635 | field RECORD_FIELD FileId(0) 26..35 26..31 Other | 635 | field Field FileId(0) 26..35 26..31 Other |
636 | 636 | ||
637 | "#]], | 637 | "#]], |
638 | ); | 638 | ); |
@@ -673,7 +673,7 @@ fn f() { | |||
673 | } | 673 | } |
674 | "#, | 674 | "#, |
675 | expect![[r#" | 675 | expect![[r#" |
676 | Foo STRUCT FileId(1) 17..51 28..31 Other | 676 | Foo Struct FileId(1) 17..51 28..31 Other |
677 | 677 | ||
678 | FileId(0) 53..56 StructLiteral | 678 | FileId(0) 53..56 StructLiteral |
679 | FileId(2) 79..82 StructLiteral | 679 | FileId(2) 79..82 StructLiteral |
@@ -703,7 +703,7 @@ pub struct Foo { | |||
703 | } | 703 | } |
704 | "#, | 704 | "#, |
705 | expect![[r#" | 705 | expect![[r#" |
706 | foo SOURCE_FILE FileId(1) 0..35 Other | 706 | foo Module FileId(1) 0..35 Other |
707 | 707 | ||
708 | FileId(0) 14..17 Other | 708 | FileId(0) 14..17 Other |
709 | "#]], | 709 | "#]], |
@@ -731,7 +731,7 @@ pub(super) struct Foo<|> { | |||
731 | } | 731 | } |
732 | "#, | 732 | "#, |
733 | expect![[r#" | 733 | expect![[r#" |
734 | Foo STRUCT FileId(2) 0..41 18..21 Other | 734 | Foo Struct FileId(2) 0..41 18..21 Other |
735 | 735 | ||
736 | FileId(1) 20..23 Other | 736 | FileId(1) 20..23 Other |
737 | FileId(1) 47..50 StructLiteral | 737 | FileId(1) 47..50 StructLiteral |
@@ -759,7 +759,7 @@ pub(super) struct Foo<|> { | |||
759 | code, | 759 | code, |
760 | None, | 760 | None, |
761 | expect![[r#" | 761 | expect![[r#" |
762 | quux FN FileId(0) 19..35 26..30 Other | 762 | quux Function FileId(0) 19..35 26..30 Other |
763 | 763 | ||
764 | FileId(1) 16..20 StructLiteral | 764 | FileId(1) 16..20 StructLiteral |
765 | FileId(2) 16..20 StructLiteral | 765 | FileId(2) 16..20 StructLiteral |
@@ -770,7 +770,7 @@ pub(super) struct Foo<|> { | |||
770 | code, | 770 | code, |
771 | Some(SearchScope::single_file(FileId(2))), | 771 | Some(SearchScope::single_file(FileId(2))), |
772 | expect![[r#" | 772 | expect![[r#" |
773 | quux FN FileId(0) 19..35 26..30 Other | 773 | quux Function FileId(0) 19..35 26..30 Other |
774 | 774 | ||
775 | FileId(2) 16..20 StructLiteral | 775 | FileId(2) 16..20 StructLiteral |
776 | "#]], | 776 | "#]], |
@@ -790,7 +790,7 @@ fn foo() { | |||
790 | } | 790 | } |
791 | "#, | 791 | "#, |
792 | expect![[r#" | 792 | expect![[r#" |
793 | m1 MACRO_RULES FileId(0) 0..46 29..31 Other | 793 | m1 Macro FileId(0) 0..46 29..31 Other |
794 | 794 | ||
795 | FileId(0) 63..65 StructLiteral | 795 | FileId(0) 63..65 StructLiteral |
796 | FileId(0) 73..75 StructLiteral | 796 | FileId(0) 73..75 StructLiteral |
@@ -808,7 +808,7 @@ fn foo() { | |||
808 | } | 808 | } |
809 | "#, | 809 | "#, |
810 | expect![[r#" | 810 | expect![[r#" |
811 | i IDENT_PAT FileId(0) 23..24 Other Write | 811 | i Local FileId(0) 23..24 Other Write |
812 | 812 | ||
813 | FileId(0) 34..35 Other Write | 813 | FileId(0) 34..35 Other Write |
814 | FileId(0) 38..39 Other Read | 814 | FileId(0) 38..39 Other Read |
@@ -830,7 +830,7 @@ fn foo() { | |||
830 | } | 830 | } |
831 | "#, | 831 | "#, |
832 | expect![[r#" | 832 | expect![[r#" |
833 | f RECORD_FIELD FileId(0) 15..21 15..16 Other | 833 | f Field FileId(0) 15..21 15..16 Other |
834 | 834 | ||
835 | FileId(0) 55..56 RecordFieldExprOrPat Read | 835 | FileId(0) 55..56 RecordFieldExprOrPat Read |
836 | FileId(0) 68..69 Other Write | 836 | FileId(0) 68..69 Other Write |
@@ -848,7 +848,7 @@ fn foo() { | |||
848 | } | 848 | } |
849 | "#, | 849 | "#, |
850 | expect![[r#" | 850 | expect![[r#" |
851 | i IDENT_PAT FileId(0) 19..20 Other | 851 | i Local FileId(0) 19..20 Other |
852 | 852 | ||
853 | FileId(0) 26..27 Other Write | 853 | FileId(0) 26..27 Other Write |
854 | "#]], | 854 | "#]], |
@@ -872,7 +872,7 @@ fn main() { | |||
872 | } | 872 | } |
873 | "#, | 873 | "#, |
874 | expect![[r#" | 874 | expect![[r#" |
875 | new FN FileId(0) 54..81 61..64 Other | 875 | new Function FileId(0) 54..81 61..64 Other |
876 | 876 | ||
877 | FileId(0) 126..129 StructLiteral | 877 | FileId(0) 126..129 StructLiteral |
878 | "#]], | 878 | "#]], |
@@ -894,7 +894,7 @@ use crate::f; | |||
894 | fn g() { f(); } | 894 | fn g() { f(); } |
895 | "#, | 895 | "#, |
896 | expect![[r#" | 896 | expect![[r#" |
897 | f FN FileId(0) 22..31 25..26 Other | 897 | f Function FileId(0) 22..31 25..26 Other |
898 | 898 | ||
899 | FileId(1) 11..12 Other | 899 | FileId(1) 11..12 Other |
900 | FileId(1) 24..25 StructLiteral | 900 | FileId(1) 24..25 StructLiteral |
@@ -917,7 +917,7 @@ fn f(s: S) { | |||
917 | } | 917 | } |
918 | "#, | 918 | "#, |
919 | expect![[r#" | 919 | expect![[r#" |
920 | field RECORD_FIELD FileId(0) 15..24 15..20 Other | 920 | field Field FileId(0) 15..24 15..20 Other |
921 | 921 | ||
922 | FileId(0) 68..73 FieldShorthandForField Read | 922 | FileId(0) 68..73 FieldShorthandForField Read |
923 | "#]], | 923 | "#]], |
@@ -941,7 +941,7 @@ fn f(e: En) { | |||
941 | } | 941 | } |
942 | "#, | 942 | "#, |
943 | expect![[r#" | 943 | expect![[r#" |
944 | field RECORD_FIELD FileId(0) 32..41 32..37 Other | 944 | field Field FileId(0) 32..41 32..37 Other |
945 | 945 | ||
946 | FileId(0) 102..107 FieldShorthandForField Read | 946 | FileId(0) 102..107 FieldShorthandForField Read |
947 | "#]], | 947 | "#]], |
@@ -965,7 +965,7 @@ fn f() -> m::En { | |||
965 | } | 965 | } |
966 | "#, | 966 | "#, |
967 | expect![[r#" | 967 | expect![[r#" |
968 | field RECORD_FIELD FileId(0) 56..65 56..61 Other | 968 | field Field FileId(0) 56..65 56..61 Other |
969 | 969 | ||
970 | FileId(0) 125..130 RecordFieldExprOrPat Read | 970 | FileId(0) 125..130 RecordFieldExprOrPat Read |
971 | "#]], | 971 | "#]], |
@@ -990,7 +990,7 @@ impl Foo { | |||
990 | } | 990 | } |
991 | "#, | 991 | "#, |
992 | expect![[r#" | 992 | expect![[r#" |
993 | self SELF_KW FileId(0) 47..51 47..51 SelfKw Read | 993 | self SelfParam FileId(0) 47..51 47..51 SelfKw Read |
994 | 994 | ||
995 | FileId(0) 71..75 SelfKw Read | 995 | FileId(0) 71..75 SelfKw Read |
996 | FileId(0) 152..156 SelfKw Read | 996 | FileId(0) 152..156 SelfKw Read |
@@ -1038,7 +1038,7 @@ fn foo<'a, 'b: 'a>(x: &'a<|> ()) -> &'a () where &'a (): Foo<'a> { | |||
1038 | } | 1038 | } |
1039 | "#, | 1039 | "#, |
1040 | expect![[r#" | 1040 | expect![[r#" |
1041 | 'a LIFETIME_PARAM FileId(0) 55..57 55..57 Lifetime | 1041 | 'a LifetimeParam FileId(0) 55..57 55..57 Lifetime |
1042 | 1042 | ||
1043 | FileId(0) 63..65 Lifetime | 1043 | FileId(0) 63..65 Lifetime |
1044 | FileId(0) 71..73 Lifetime | 1044 | FileId(0) 71..73 Lifetime |
@@ -1056,7 +1056,7 @@ fn foo<'a, 'b: 'a>(x: &'a<|> ()) -> &'a () where &'a (): Foo<'a> { | |||
1056 | type Foo<'a, T> where T: 'a<|> = &'a T; | 1056 | type Foo<'a, T> where T: 'a<|> = &'a T; |
1057 | "#, | 1057 | "#, |
1058 | expect![[r#" | 1058 | expect![[r#" |
1059 | 'a LIFETIME_PARAM FileId(0) 9..11 9..11 Lifetime | 1059 | 'a LifetimeParam FileId(0) 9..11 9..11 Lifetime |
1060 | 1060 | ||
1061 | FileId(0) 25..27 Lifetime | 1061 | FileId(0) 25..27 Lifetime |
1062 | FileId(0) 31..33 Lifetime | 1062 | FileId(0) 31..33 Lifetime |
@@ -1078,7 +1078,7 @@ impl<'a> Foo<'a> for &'a () { | |||
1078 | } | 1078 | } |
1079 | "#, | 1079 | "#, |
1080 | expect![[r#" | 1080 | expect![[r#" |
1081 | 'a LIFETIME_PARAM FileId(0) 47..49 47..49 Lifetime | 1081 | 'a LifetimeParam FileId(0) 47..49 47..49 Lifetime |
1082 | 1082 | ||
1083 | FileId(0) 55..57 Lifetime | 1083 | FileId(0) 55..57 Lifetime |
1084 | FileId(0) 64..66 Lifetime | 1084 | FileId(0) 64..66 Lifetime |
diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs index 2f465c195..600e93b6a 100644 --- a/crates/ide/src/runnables.rs +++ b/crates/ide/src/runnables.rs | |||
@@ -12,7 +12,7 @@ use syntax::{ | |||
12 | 12 | ||
13 | use crate::{ | 13 | use crate::{ |
14 | display::{ToNav, TryToNav}, | 14 | display::{ToNav, TryToNav}, |
15 | FileId, NavigationTarget, | 15 | FileId, NavigationTarget, SymbolKind, |
16 | }; | 16 | }; |
17 | 17 | ||
18 | #[derive(Debug, Clone)] | 18 | #[derive(Debug, Clone)] |
@@ -137,7 +137,11 @@ fn runnable_fn(sema: &Semantics<RootDatabase>, func: ast::Fn, file_id: FileId) - | |||
137 | } | 137 | } |
138 | }; | 138 | }; |
139 | 139 | ||
140 | let nav = NavigationTarget::from_named(sema.db, InFile::new(file_id.into(), &func)); | 140 | let nav = NavigationTarget::from_named( |
141 | sema.db, | ||
142 | InFile::new(file_id.into(), &func), | ||
143 | SymbolKind::Function, | ||
144 | ); | ||
141 | let cfg = def.attrs(sema.db).cfg(); | 145 | let cfg = def.attrs(sema.db).cfg(); |
142 | Some(Runnable { nav, kind, cfg }) | 146 | Some(Runnable { nav, kind, cfg }) |
143 | } | 147 | } |
@@ -204,7 +208,7 @@ fn module_def_doctest(sema: &Semantics<RootDatabase>, def: hir::ModuleDef) -> Op | |||
204 | nav.focus_range = None; | 208 | nav.focus_range = None; |
205 | nav.description = None; | 209 | nav.description = None; |
206 | nav.docs = None; | 210 | nav.docs = None; |
207 | nav.kind = syntax::SyntaxKind::COMMENT; | 211 | nav.kind = SymbolKind::DocTest; |
208 | let res = Runnable { nav, kind: RunnableKind::DocTest { test_id }, cfg: attrs.cfg() }; | 212 | let res = Runnable { nav, kind: RunnableKind::DocTest { test_id }, cfg: attrs.cfg() }; |
209 | Some(res) | 213 | Some(res) |
210 | } | 214 | } |
@@ -352,7 +356,7 @@ fn bench() {} | |||
352 | 4..8, | 356 | 4..8, |
353 | ), | 357 | ), |
354 | name: "main", | 358 | name: "main", |
355 | kind: FN, | 359 | kind: Function, |
356 | container_name: None, | 360 | container_name: None, |
357 | description: None, | 361 | description: None, |
358 | docs: None, | 362 | docs: None, |
@@ -370,7 +374,7 @@ fn bench() {} | |||
370 | 26..34, | 374 | 26..34, |
371 | ), | 375 | ), |
372 | name: "test_foo", | 376 | name: "test_foo", |
373 | kind: FN, | 377 | kind: Function, |
374 | container_name: None, | 378 | container_name: None, |
375 | description: None, | 379 | description: None, |
376 | docs: None, | 380 | docs: None, |
@@ -395,7 +399,7 @@ fn bench() {} | |||
395 | 62..70, | 399 | 62..70, |
396 | ), | 400 | ), |
397 | name: "test_foo", | 401 | name: "test_foo", |
398 | kind: FN, | 402 | kind: Function, |
399 | container_name: None, | 403 | container_name: None, |
400 | description: None, | 404 | description: None, |
401 | docs: None, | 405 | docs: None, |
@@ -420,7 +424,7 @@ fn bench() {} | |||
420 | 89..94, | 424 | 89..94, |
421 | ), | 425 | ), |
422 | name: "bench", | 426 | name: "bench", |
423 | kind: FN, | 427 | kind: Function, |
424 | container_name: None, | 428 | container_name: None, |
425 | description: None, | 429 | description: None, |
426 | docs: None, | 430 | docs: None, |
@@ -517,7 +521,7 @@ struct StructWithRunnable(String); | |||
517 | 4..8, | 521 | 4..8, |
518 | ), | 522 | ), |
519 | name: "main", | 523 | name: "main", |
520 | kind: FN, | 524 | kind: Function, |
521 | container_name: None, | 525 | container_name: None, |
522 | description: None, | 526 | description: None, |
523 | docs: None, | 527 | docs: None, |
@@ -533,7 +537,7 @@ struct StructWithRunnable(String); | |||
533 | full_range: 15..74, | 537 | full_range: 15..74, |
534 | focus_range: None, | 538 | focus_range: None, |
535 | name: "should_have_runnable", | 539 | name: "should_have_runnable", |
536 | kind: COMMENT, | 540 | kind: DocTest, |
537 | container_name: None, | 541 | container_name: None, |
538 | description: None, | 542 | description: None, |
539 | docs: None, | 543 | docs: None, |
@@ -553,7 +557,7 @@ struct StructWithRunnable(String); | |||
553 | full_range: 76..148, | 557 | full_range: 76..148, |
554 | focus_range: None, | 558 | focus_range: None, |
555 | name: "should_have_runnable_1", | 559 | name: "should_have_runnable_1", |
556 | kind: COMMENT, | 560 | kind: DocTest, |
557 | container_name: None, | 561 | container_name: None, |
558 | description: None, | 562 | description: None, |
559 | docs: None, | 563 | docs: None, |
@@ -573,7 +577,7 @@ struct StructWithRunnable(String); | |||
573 | full_range: 150..254, | 577 | full_range: 150..254, |
574 | focus_range: None, | 578 | focus_range: None, |
575 | name: "should_have_runnable_2", | 579 | name: "should_have_runnable_2", |
576 | kind: COMMENT, | 580 | kind: DocTest, |
577 | container_name: None, | 581 | container_name: None, |
578 | description: None, | 582 | description: None, |
579 | docs: None, | 583 | docs: None, |
@@ -593,7 +597,7 @@ struct StructWithRunnable(String); | |||
593 | full_range: 756..821, | 597 | full_range: 756..821, |
594 | focus_range: None, | 598 | focus_range: None, |
595 | name: "StructWithRunnable", | 599 | name: "StructWithRunnable", |
596 | kind: COMMENT, | 600 | kind: DocTest, |
597 | container_name: None, | 601 | container_name: None, |
598 | description: None, | 602 | description: None, |
599 | docs: None, | 603 | docs: None, |
@@ -639,7 +643,7 @@ impl Data { | |||
639 | 4..8, | 643 | 4..8, |
640 | ), | 644 | ), |
641 | name: "main", | 645 | name: "main", |
642 | kind: FN, | 646 | kind: Function, |
643 | container_name: None, | 647 | container_name: None, |
644 | description: None, | 648 | description: None, |
645 | docs: None, | 649 | docs: None, |
@@ -655,7 +659,7 @@ impl Data { | |||
655 | full_range: 44..98, | 659 | full_range: 44..98, |
656 | focus_range: None, | 660 | focus_range: None, |
657 | name: "foo", | 661 | name: "foo", |
658 | kind: COMMENT, | 662 | kind: DocTest, |
659 | container_name: None, | 663 | container_name: None, |
660 | description: None, | 664 | description: None, |
661 | docs: None, | 665 | docs: None, |
@@ -696,7 +700,7 @@ mod test_mod { | |||
696 | 5..13, | 700 | 5..13, |
697 | ), | 701 | ), |
698 | name: "test_mod", | 702 | name: "test_mod", |
699 | kind: MODULE, | 703 | kind: Module, |
700 | container_name: None, | 704 | container_name: None, |
701 | description: None, | 705 | description: None, |
702 | docs: None, | 706 | docs: None, |
@@ -716,7 +720,7 @@ mod test_mod { | |||
716 | 35..44, | 720 | 35..44, |
717 | ), | 721 | ), |
718 | name: "test_foo1", | 722 | name: "test_foo1", |
719 | kind: FN, | 723 | kind: Function, |
720 | container_name: None, | 724 | container_name: None, |
721 | description: None, | 725 | description: None, |
722 | docs: None, | 726 | docs: None, |
@@ -776,7 +780,7 @@ mod root_tests { | |||
776 | 26..40, | 780 | 26..40, |
777 | ), | 781 | ), |
778 | name: "nested_tests_0", | 782 | name: "nested_tests_0", |
779 | kind: MODULE, | 783 | kind: Module, |
780 | container_name: None, | 784 | container_name: None, |
781 | description: None, | 785 | description: None, |
782 | docs: None, | 786 | docs: None, |
@@ -796,7 +800,7 @@ mod root_tests { | |||
796 | 55..69, | 800 | 55..69, |
797 | ), | 801 | ), |
798 | name: "nested_tests_1", | 802 | name: "nested_tests_1", |
799 | kind: MODULE, | 803 | kind: Module, |
800 | container_name: None, | 804 | container_name: None, |
801 | description: None, | 805 | description: None, |
802 | docs: None, | 806 | docs: None, |
@@ -816,7 +820,7 @@ mod root_tests { | |||
816 | 107..121, | 820 | 107..121, |
817 | ), | 821 | ), |
818 | name: "nested_test_11", | 822 | name: "nested_test_11", |
819 | kind: FN, | 823 | kind: Function, |
820 | container_name: None, | 824 | container_name: None, |
821 | description: None, | 825 | description: None, |
822 | docs: None, | 826 | docs: None, |
@@ -841,7 +845,7 @@ mod root_tests { | |||
841 | 163..177, | 845 | 163..177, |
842 | ), | 846 | ), |
843 | name: "nested_test_12", | 847 | name: "nested_test_12", |
844 | kind: FN, | 848 | kind: Function, |
845 | container_name: None, | 849 | container_name: None, |
846 | description: None, | 850 | description: None, |
847 | docs: None, | 851 | docs: None, |
@@ -866,7 +870,7 @@ mod root_tests { | |||
866 | 206..220, | 870 | 206..220, |
867 | ), | 871 | ), |
868 | name: "nested_tests_2", | 872 | name: "nested_tests_2", |
869 | kind: MODULE, | 873 | kind: Module, |
870 | container_name: None, | 874 | container_name: None, |
871 | description: None, | 875 | description: None, |
872 | docs: None, | 876 | docs: None, |
@@ -886,7 +890,7 @@ mod root_tests { | |||
886 | 258..271, | 890 | 258..271, |
887 | ), | 891 | ), |
888 | name: "nested_test_2", | 892 | name: "nested_test_2", |
889 | kind: FN, | 893 | kind: Function, |
890 | container_name: None, | 894 | container_name: None, |
891 | description: None, | 895 | description: None, |
892 | docs: None, | 896 | docs: None, |
@@ -929,7 +933,7 @@ fn test_foo1() {} | |||
929 | 36..45, | 933 | 36..45, |
930 | ), | 934 | ), |
931 | name: "test_foo1", | 935 | name: "test_foo1", |
932 | kind: FN, | 936 | kind: Function, |
933 | container_name: None, | 937 | container_name: None, |
934 | description: None, | 938 | description: None, |
935 | docs: None, | 939 | docs: None, |
@@ -979,7 +983,7 @@ fn test_foo1() {} | |||
979 | 58..67, | 983 | 58..67, |
980 | ), | 984 | ), |
981 | name: "test_foo1", | 985 | name: "test_foo1", |
982 | kind: FN, | 986 | kind: Function, |
983 | container_name: None, | 987 | container_name: None, |
984 | description: None, | 988 | description: None, |
985 | docs: None, | 989 | docs: None, |
diff --git a/crates/ide_db/src/symbol_index.rs b/crates/ide_db/src/symbol_index.rs index ca455fa03..0aa6a0765 100644 --- a/crates/ide_db/src/symbol_index.rs +++ b/crates/ide_db/src/symbol_index.rs | |||
@@ -39,7 +39,7 @@ use rustc_hash::{FxHashMap, FxHashSet}; | |||
39 | use syntax::{ | 39 | use syntax::{ |
40 | ast::{self, NameOwner}, | 40 | ast::{self, NameOwner}, |
41 | match_ast, AstNode, Parse, SmolStr, SourceFile, | 41 | match_ast, AstNode, Parse, SmolStr, SourceFile, |
42 | SyntaxKind::{self, *}, | 42 | SyntaxKind::*, |
43 | SyntaxNode, SyntaxNodePtr, TextRange, WalkEvent, | 43 | SyntaxNode, SyntaxNodePtr, TextRange, WalkEvent, |
44 | }; | 44 | }; |
45 | 45 | ||
@@ -323,7 +323,7 @@ impl Query { | |||
323 | let (start, end) = SymbolIndex::map_value_to_range(indexed_value.value); | 323 | let (start, end) = SymbolIndex::map_value_to_range(indexed_value.value); |
324 | 324 | ||
325 | for symbol in &symbol_index.symbols[start..end] { | 325 | for symbol in &symbol_index.symbols[start..end] { |
326 | if self.only_types && !is_type(symbol.kind) { | 326 | if self.only_types && !symbol.kind.is_type() { |
327 | continue; | 327 | continue; |
328 | } | 328 | } |
329 | if self.exact && symbol.name != self.query { | 329 | if self.exact && symbol.name != self.query { |
@@ -341,23 +341,44 @@ impl Query { | |||
341 | } | 341 | } |
342 | } | 342 | } |
343 | 343 | ||
344 | fn is_type(kind: SyntaxKind) -> bool { | ||
345 | matches!(kind, STRUCT | ENUM | TRAIT | TYPE_ALIAS) | ||
346 | } | ||
347 | |||
348 | /// The actual data that is stored in the index. It should be as compact as | 344 | /// The actual data that is stored in the index. It should be as compact as |
349 | /// possible. | 345 | /// possible. |
350 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 346 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
351 | pub struct FileSymbol { | 347 | pub struct FileSymbol { |
352 | pub file_id: FileId, | 348 | pub file_id: FileId, |
353 | pub name: SmolStr, | 349 | pub name: SmolStr, |
354 | pub kind: SyntaxKind, | 350 | pub kind: FileSymbolKind, |
355 | pub range: TextRange, | 351 | pub range: TextRange, |
356 | pub ptr: SyntaxNodePtr, | 352 | pub ptr: SyntaxNodePtr, |
357 | pub name_range: Option<TextRange>, | 353 | pub name_range: Option<TextRange>, |
358 | pub container_name: Option<SmolStr>, | 354 | pub container_name: Option<SmolStr>, |
359 | } | 355 | } |
360 | 356 | ||
357 | #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] | ||
358 | pub enum FileSymbolKind { | ||
359 | Function, | ||
360 | Struct, | ||
361 | Enum, | ||
362 | Trait, | ||
363 | Module, | ||
364 | TypeAlias, | ||
365 | Const, | ||
366 | Static, | ||
367 | Macro, | ||
368 | } | ||
369 | |||
370 | impl FileSymbolKind { | ||
371 | fn is_type(self: FileSymbolKind) -> bool { | ||
372 | matches!( | ||
373 | self, | ||
374 | FileSymbolKind::Struct | ||
375 | | FileSymbolKind::Enum | ||
376 | | FileSymbolKind::Trait | ||
377 | | FileSymbolKind::TypeAlias | ||
378 | ) | ||
379 | } | ||
380 | } | ||
381 | |||
361 | fn source_file_to_file_symbols(source_file: &SourceFile, file_id: FileId) -> Vec<FileSymbol> { | 382 | fn source_file_to_file_symbols(source_file: &SourceFile, file_id: FileId) -> Vec<FileSymbol> { |
362 | let mut symbols = Vec::new(); | 383 | let mut symbols = Vec::new(); |
363 | let mut stack = Vec::new(); | 384 | let mut stack = Vec::new(); |
@@ -412,7 +433,18 @@ fn to_symbol(node: &SyntaxNode) -> Option<(SmolStr, SyntaxNodePtr, TextRange)> { | |||
412 | fn to_file_symbol(node: &SyntaxNode, file_id: FileId) -> Option<FileSymbol> { | 433 | fn to_file_symbol(node: &SyntaxNode, file_id: FileId) -> Option<FileSymbol> { |
413 | to_symbol(node).map(move |(name, ptr, name_range)| FileSymbol { | 434 | to_symbol(node).map(move |(name, ptr, name_range)| FileSymbol { |
414 | name, | 435 | name, |
415 | kind: node.kind(), | 436 | kind: match node.kind() { |
437 | FN => FileSymbolKind::Function, | ||
438 | STRUCT => FileSymbolKind::Struct, | ||
439 | ENUM => FileSymbolKind::Enum, | ||
440 | TRAIT => FileSymbolKind::Trait, | ||
441 | MODULE => FileSymbolKind::Module, | ||
442 | TYPE_ALIAS => FileSymbolKind::TypeAlias, | ||
443 | CONST => FileSymbolKind::Const, | ||
444 | STATIC => FileSymbolKind::Static, | ||
445 | MACRO_RULES => FileSymbolKind::Macro, | ||
446 | kind => unreachable!("{:?}", kind), | ||
447 | }, | ||
416 | range: node.text_range(), | 448 | range: node.text_range(), |
417 | ptr, | 449 | ptr, |
418 | file_id, | 450 | file_id, |
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index af226c109..404b35025 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -9,7 +9,7 @@ use std::{ | |||
9 | 9 | ||
10 | use ide::{ | 10 | use ide::{ |
11 | CompletionResolveCapability, FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, | 11 | CompletionResolveCapability, FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, |
12 | NavigationTarget, Query, RangeInfo, Runnable, RunnableKind, SearchScope, TextEdit, | 12 | NavigationTarget, Query, RangeInfo, Runnable, RunnableKind, SearchScope, SymbolKind, TextEdit, |
13 | }; | 13 | }; |
14 | use itertools::Itertools; | 14 | use itertools::Itertools; |
15 | use lsp_server::ErrorCode; | 15 | use lsp_server::ErrorCode; |
@@ -27,7 +27,7 @@ use project_model::TargetKind; | |||
27 | use serde::{Deserialize, Serialize}; | 27 | use serde::{Deserialize, Serialize}; |
28 | use serde_json::to_value; | 28 | use serde_json::to_value; |
29 | use stdx::{format_to, split_once}; | 29 | use stdx::{format_to, split_once}; |
30 | use syntax::{algo, ast, AstNode, SyntaxKind, TextRange, TextSize}; | 30 | use syntax::{algo, ast, AstNode, TextRange, TextSize}; |
31 | 31 | ||
32 | use crate::{ | 32 | use crate::{ |
33 | cargo_target_spec::CargoTargetSpec, | 33 | cargo_target_spec::CargoTargetSpec, |
@@ -1037,10 +1037,10 @@ pub(crate) fn handle_code_lens( | |||
1037 | .filter(|it| { | 1037 | .filter(|it| { |
1038 | matches!( | 1038 | matches!( |
1039 | it.kind, | 1039 | it.kind, |
1040 | SyntaxKind::TRAIT | 1040 | SymbolKind::Trait |
1041 | | SyntaxKind::STRUCT | 1041 | | SymbolKind::Struct |
1042 | | SyntaxKind::ENUM | 1042 | | SymbolKind::Enum |
1043 | | SyntaxKind::UNION | 1043 | | SymbolKind::Union |
1044 | ) | 1044 | ) |
1045 | }) | 1045 | }) |
1046 | .map(|it| { | 1046 | .map(|it| { |
@@ -1263,7 +1263,7 @@ pub(crate) fn handle_call_hierarchy_prepare( | |||
1263 | let RangeInfo { range: _, info: navs } = nav_info; | 1263 | let RangeInfo { range: _, info: navs } = nav_info; |
1264 | let res = navs | 1264 | let res = navs |
1265 | .into_iter() | 1265 | .into_iter() |
1266 | .filter(|it| it.kind == SyntaxKind::FN) | 1266 | .filter(|it| it.kind == SymbolKind::Function) |
1267 | .map(|it| to_proto::call_hierarchy_item(&snap, it)) | 1267 | .map(|it| to_proto::call_hierarchy_item(&snap, it)) |
1268 | .collect::<Result<Vec<_>>>()?; | 1268 | .collect::<Result<Vec<_>>>()?; |
1269 | 1269 | ||
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 1753bbff2..79caafe80 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs | |||
@@ -9,10 +9,9 @@ use ide::{ | |||
9 | FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HighlightModifier, HighlightTag, | 9 | FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HighlightModifier, HighlightTag, |
10 | HighlightedRange, Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup, | 10 | HighlightedRange, Indel, InlayHint, InlayKind, InsertTextFormat, LineIndex, Markup, |
11 | NavigationTarget, ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange, | 11 | NavigationTarget, ReferenceAccess, ResolvedAssist, Runnable, Severity, SourceChange, |
12 | SourceFileEdit, TextEdit, TextRange, TextSize, | 12 | SourceFileEdit, SymbolKind, TextEdit, TextRange, TextSize, |
13 | }; | 13 | }; |
14 | use itertools::Itertools; | 14 | use itertools::Itertools; |
15 | use syntax::SyntaxKind; | ||
16 | 15 | ||
17 | use crate::{ | 16 | use crate::{ |
18 | cargo_target_spec::CargoTargetSpec, global_state::GlobalStateSnapshot, | 17 | cargo_target_spec::CargoTargetSpec, global_state::GlobalStateSnapshot, |
@@ -30,21 +29,25 @@ pub(crate) fn range(line_index: &LineIndex, range: TextRange) -> lsp_types::Rang | |||
30 | lsp_types::Range::new(start, end) | 29 | lsp_types::Range::new(start, end) |
31 | } | 30 | } |
32 | 31 | ||
33 | pub(crate) fn symbol_kind(syntax_kind: SyntaxKind) -> lsp_types::SymbolKind { | 32 | pub(crate) fn symbol_kind(symbol_kind: SymbolKind) -> lsp_types::SymbolKind { |
34 | match syntax_kind { | 33 | match symbol_kind { |
35 | SyntaxKind::FN => lsp_types::SymbolKind::Function, | 34 | SymbolKind::Function => lsp_types::SymbolKind::Function, |
36 | SyntaxKind::STRUCT => lsp_types::SymbolKind::Struct, | 35 | SymbolKind::Struct => lsp_types::SymbolKind::Struct, |
37 | SyntaxKind::ENUM => lsp_types::SymbolKind::Enum, | 36 | SymbolKind::Enum => lsp_types::SymbolKind::Enum, |
38 | SyntaxKind::VARIANT => lsp_types::SymbolKind::EnumMember, | 37 | SymbolKind::Variant => lsp_types::SymbolKind::EnumMember, |
39 | SyntaxKind::TRAIT => lsp_types::SymbolKind::Interface, | 38 | SymbolKind::Trait => lsp_types::SymbolKind::Interface, |
40 | SyntaxKind::MACRO_CALL => lsp_types::SymbolKind::Function, | 39 | SymbolKind::Macro => lsp_types::SymbolKind::Function, |
41 | SyntaxKind::MODULE => lsp_types::SymbolKind::Module, | 40 | SymbolKind::Module => lsp_types::SymbolKind::Module, |
42 | SyntaxKind::TYPE_ALIAS => lsp_types::SymbolKind::TypeParameter, | 41 | SymbolKind::TypeAlias | SymbolKind::TypeParam => lsp_types::SymbolKind::TypeParameter, |
43 | SyntaxKind::RECORD_FIELD => lsp_types::SymbolKind::Field, | 42 | SymbolKind::Field => lsp_types::SymbolKind::Field, |
44 | SyntaxKind::STATIC => lsp_types::SymbolKind::Constant, | 43 | SymbolKind::Static => lsp_types::SymbolKind::Constant, |
45 | SyntaxKind::CONST => lsp_types::SymbolKind::Constant, | 44 | SymbolKind::Const => lsp_types::SymbolKind::Constant, |
46 | SyntaxKind::IMPL => lsp_types::SymbolKind::Object, | 45 | SymbolKind::Impl => lsp_types::SymbolKind::Object, |
47 | _ => lsp_types::SymbolKind::Variable, | 46 | SymbolKind::Local |
47 | | SymbolKind::SelfParam | ||
48 | | SymbolKind::LifetimeParam | ||
49 | | SymbolKind::DocTest => lsp_types::SymbolKind::Variable, | ||
50 | SymbolKind::Union => lsp_types::SymbolKind::Struct, | ||
48 | } | 51 | } |
49 | } | 52 | } |
50 | 53 | ||