aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-12-18 18:27:28 +0000
committerGitHub <[email protected]>2020-12-18 18:27:28 +0000
commit25185c1418022868e2f7ec1599e32a34d63e8314 (patch)
treef0ce5fc87361263a4d4703b6ee418518bd0aa212
parent53f81e4e8c8307069d89cee58cb12142350b09c2 (diff)
parentade2f5cd124049614801fc821298205006c6bdf4 (diff)
Merge #6933
6933: Reduce test verbosity r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
-rw-r--r--crates/ide/src/display/navigation_target.rs70
-rw-r--r--crates/ide/src/goto_definition.rs2
-rw-r--r--crates/ide/src/hover.rs364
-rw-r--r--crates/ide/src/references.rs2
-rw-r--r--crates/ide/src/runnables.rs139
-rw-r--r--crates/rust-analyzer/src/handlers.rs7
-rw-r--r--crates/rust-analyzer/src/to_proto.rs9
7 files changed, 140 insertions, 453 deletions
diff --git a/crates/ide/src/display/navigation_target.rs b/crates/ide/src/display/navigation_target.rs
index ac6346b2b..cbdd4ecc2 100644
--- a/crates/ide/src/display/navigation_target.rs
+++ b/crates/ide/src/display/navigation_target.rs
@@ -1,5 +1,7 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use std::fmt;
4
3use either::Either; 5use either::Either;
4use hir::{AssocItem, Documentation, FieldSource, HasAttrs, HasSource, InFile, ModuleSource}; 6use hir::{AssocItem, Documentation, FieldSource, HasAttrs, HasSource, InFile, ModuleSource};
5use ide_db::{ 7use ide_db::{
@@ -35,8 +37,6 @@ pub enum SymbolKind {
35 TypeAlias, 37 TypeAlias,
36 Trait, 38 Trait,
37 Macro, 39 Macro,
38 // Do we actually need this?
39 DocTest,
40} 40}
41 41
42/// `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
@@ -44,7 +44,7 @@ pub enum SymbolKind {
44/// 44///
45/// Typically, a `NavigationTarget` corresponds to some element in the source 45/// Typically, a `NavigationTarget` corresponds to some element in the source
46/// code, like a function or a struct, but this is not strictly required. 46/// code, like a function or a struct, but this is not strictly required.
47#[derive(Debug, Clone, PartialEq, Eq, Hash)] 47#[derive(Clone, PartialEq, Eq, Hash)]
48pub struct NavigationTarget { 48pub struct NavigationTarget {
49 pub file_id: FileId, 49 pub file_id: FileId,
50 /// Range which encompasses the whole element. 50 /// Range which encompasses the whole element.
@@ -64,12 +64,30 @@ pub struct NavigationTarget {
64 /// 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.
65 pub focus_range: Option<TextRange>, 65 pub focus_range: Option<TextRange>,
66 pub name: SmolStr, 66 pub name: SmolStr,
67 pub kind: SymbolKind, 67 pub kind: Option<SymbolKind>,
68 pub container_name: Option<SmolStr>, 68 pub container_name: Option<SmolStr>,
69 pub description: Option<String>, 69 pub description: Option<String>,
70 pub docs: Option<Documentation>, 70 pub docs: Option<Documentation>,
71} 71}
72 72
73impl fmt::Debug for NavigationTarget {
74 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
75 let mut f = f.debug_struct("NavigationTarget");
76 macro_rules! opt {
77 ($($name:ident)*) => {$(
78 if let Some(it) = &self.$name {
79 f.field(stringify!($name), it);
80 }
81 )*}
82 }
83 f.field("file_id", &self.file_id).field("full_range", &self.full_range);
84 opt!(focus_range);
85 f.field("name", &self.name);
86 opt!(kind container_name description docs);
87 f.finish()
88 }
89}
90
73pub(crate) trait ToNav { 91pub(crate) trait ToNav {
74 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget; 92 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget;
75} 93}
@@ -110,8 +128,13 @@ impl NavigationTarget {
110 128
111 #[cfg(test)] 129 #[cfg(test)]
112 pub(crate) fn debug_render(&self) -> String { 130 pub(crate) fn debug_render(&self) -> String {
113 let mut buf = 131 let mut buf = format!(
114 format!("{} {:?} {:?} {:?}", self.name, self.kind, self.file_id, self.full_range); 132 "{} {:?} {:?} {:?}",
133 self.name,
134 self.kind.unwrap(),
135 self.file_id,
136 self.full_range
137 );
115 if let Some(focus_range) = self.focus_range { 138 if let Some(focus_range) = self.focus_range {
116 buf.push_str(&format!(" {:?}", focus_range)) 139 buf.push_str(&format!(" {:?}", focus_range))
117 } 140 }
@@ -146,7 +169,7 @@ impl NavigationTarget {
146 NavigationTarget { 169 NavigationTarget {
147 file_id, 170 file_id,
148 name, 171 name,
149 kind, 172 kind: Some(kind),
150 full_range, 173 full_range,
151 focus_range, 174 focus_range,
152 container_name: None, 175 container_name: None,
@@ -161,7 +184,7 @@ impl ToNav for FileSymbol {
161 NavigationTarget { 184 NavigationTarget {
162 file_id: self.file_id, 185 file_id: self.file_id,
163 name: self.name.clone(), 186 name: self.name.clone(),
164 kind: match self.kind { 187 kind: Some(match self.kind {
165 FileSymbolKind::Function => SymbolKind::Function, 188 FileSymbolKind::Function => SymbolKind::Function,
166 FileSymbolKind::Struct => SymbolKind::Struct, 189 FileSymbolKind::Struct => SymbolKind::Struct,
167 FileSymbolKind::Enum => SymbolKind::Enum, 190 FileSymbolKind::Enum => SymbolKind::Enum,
@@ -171,7 +194,7 @@ impl ToNav for FileSymbol {
171 FileSymbolKind::Const => SymbolKind::Const, 194 FileSymbolKind::Const => SymbolKind::Const,
172 FileSymbolKind::Static => SymbolKind::Static, 195 FileSymbolKind::Static => SymbolKind::Static,
173 FileSymbolKind::Macro => SymbolKind::Macro, 196 FileSymbolKind::Macro => SymbolKind::Macro,
174 }, 197 }),
175 full_range: self.range, 198 full_range: self.range,
176 focus_range: self.name_range, 199 focus_range: self.name_range,
177 container_name: self.container_name.clone(), 200 container_name: self.container_name.clone(),
@@ -386,7 +409,7 @@ impl ToNav for hir::Local {
386 NavigationTarget { 409 NavigationTarget {
387 file_id: full_range.file_id, 410 file_id: full_range.file_id,
388 name, 411 name,
389 kind: SymbolKind::Local, 412 kind: Some(SymbolKind::Local),
390 full_range: full_range.range, 413 full_range: full_range.range,
391 focus_range: None, 414 focus_range: None,
392 container_name: None, 415 container_name: None,
@@ -410,7 +433,7 @@ impl ToNav for hir::TypeParam {
410 NavigationTarget { 433 NavigationTarget {
411 file_id: src.file_id.original_file(db), 434 file_id: src.file_id.original_file(db),
412 name: self.name(db).to_string().into(), 435 name: self.name(db).to_string().into(),
413 kind: SymbolKind::TypeParam, 436 kind: Some(SymbolKind::TypeParam),
414 full_range, 437 full_range,
415 focus_range, 438 focus_range,
416 container_name: None, 439 container_name: None,
@@ -427,7 +450,7 @@ impl ToNav for hir::LifetimeParam {
427 NavigationTarget { 450 NavigationTarget {
428 file_id: src.file_id.original_file(db), 451 file_id: src.file_id.original_file(db),
429 name: self.name(db).to_string().into(), 452 name: self.name(db).to_string().into(),
430 kind: SymbolKind::LifetimeParam, 453 kind: Some(SymbolKind::LifetimeParam),
431 full_range, 454 full_range,
432 focus_range: Some(full_range), 455 focus_range: Some(full_range),
433 container_name: None, 456 container_name: None,
@@ -484,34 +507,21 @@ fn foo() { enum FooInner { } }
484 0, 507 0,
485 ), 508 ),
486 full_range: 0..17, 509 full_range: 0..17,
487 focus_range: Some( 510 focus_range: 5..13,
488 5..13,
489 ),
490 name: "FooInner", 511 name: "FooInner",
491 kind: Enum, 512 kind: Enum,
492 container_name: None, 513 description: "enum FooInner",
493 description: Some(
494 "enum FooInner",
495 ),
496 docs: None,
497 }, 514 },
498 NavigationTarget { 515 NavigationTarget {
499 file_id: FileId( 516 file_id: FileId(
500 0, 517 0,
501 ), 518 ),
502 full_range: 29..46, 519 full_range: 29..46,
503 focus_range: Some( 520 focus_range: 34..42,
504 34..42,
505 ),
506 name: "FooInner", 521 name: "FooInner",
507 kind: Enum, 522 kind: Enum,
508 container_name: Some( 523 container_name: "foo",
509 "foo", 524 description: "enum FooInner",
510 ),
511 description: Some(
512 "enum FooInner",
513 ),
514 docs: None,
515 }, 525 },
516 ] 526 ]
517 "#]] 527 "#]]
diff --git a/crates/ide/src/goto_definition.rs b/crates/ide/src/goto_definition.rs
index 5bee69f4b..7a12e9965 100644
--- a/crates/ide/src/goto_definition.rs
+++ b/crates/ide/src/goto_definition.rs
@@ -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: SymbolKind::SelfParam, 89 kind: Some(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 dca098af6..b06fa5f15 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -2187,14 +2187,9 @@ fn foo_<|>test() {}
2187 0, 2187 0,
2188 ), 2188 ),
2189 full_range: 0..24, 2189 full_range: 0..24,
2190 focus_range: Some( 2190 focus_range: 11..19,
2191 11..19,
2192 ),
2193 name: "foo_test", 2191 name: "foo_test",
2194 kind: Function, 2192 kind: Function,
2195 container_name: None,
2196 description: None,
2197 docs: None,
2198 }, 2193 },
2199 kind: Test { 2194 kind: Test {
2200 test_id: Path( 2195 test_id: Path(
@@ -2230,14 +2225,9 @@ mod tests<|> {
2230 0, 2225 0,
2231 ), 2226 ),
2232 full_range: 0..46, 2227 full_range: 0..46,
2233 focus_range: Some( 2228 focus_range: 4..9,
2234 4..9,
2235 ),
2236 name: "tests", 2229 name: "tests",
2237 kind: Module, 2230 kind: Module,
2238 container_name: None,
2239 description: None,
2240 docs: None,
2241 }, 2231 },
2242 kind: TestMod { 2232 kind: TestMod {
2243 path: "tests", 2233 path: "tests",
@@ -2269,16 +2259,10 @@ fn main() { let s<|>t = S{ f1:0 }; }
2269 0, 2259 0,
2270 ), 2260 ),
2271 full_range: 0..19, 2261 full_range: 0..19,
2272 focus_range: Some( 2262 focus_range: 7..8,
2273 7..8,
2274 ),
2275 name: "S", 2263 name: "S",
2276 kind: Struct, 2264 kind: Struct,
2277 container_name: None, 2265 description: "struct S",
2278 description: Some(
2279 "struct S",
2280 ),
2281 docs: None,
2282 }, 2266 },
2283 }, 2267 },
2284 ], 2268 ],
@@ -2308,16 +2292,10 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; }
2308 0, 2292 0,
2309 ), 2293 ),
2310 full_range: 17..37, 2294 full_range: 17..37,
2311 focus_range: Some( 2295 focus_range: 24..25,
2312 24..25,
2313 ),
2314 name: "S", 2296 name: "S",
2315 kind: Struct, 2297 kind: Struct,
2316 container_name: None, 2298 description: "struct S",
2317 description: Some(
2318 "struct S",
2319 ),
2320 docs: None,
2321 }, 2299 },
2322 }, 2300 },
2323 HoverGotoTypeData { 2301 HoverGotoTypeData {
@@ -2327,16 +2305,10 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; }
2327 0, 2305 0,
2328 ), 2306 ),
2329 full_range: 0..16, 2307 full_range: 0..16,
2330 focus_range: Some( 2308 focus_range: 7..10,
2331 7..10,
2332 ),
2333 name: "Arg", 2309 name: "Arg",
2334 kind: Struct, 2310 kind: Struct,
2335 container_name: None, 2311 description: "struct Arg",
2336 description: Some(
2337 "struct Arg",
2338 ),
2339 docs: None,
2340 }, 2312 },
2341 }, 2313 },
2342 ], 2314 ],
@@ -2366,16 +2338,10 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; }
2366 0, 2338 0,
2367 ), 2339 ),
2368 full_range: 17..37, 2340 full_range: 17..37,
2369 focus_range: Some( 2341 focus_range: 24..25,
2370 24..25,
2371 ),
2372 name: "S", 2342 name: "S",
2373 kind: Struct, 2343 kind: Struct,
2374 container_name: None, 2344 description: "struct S",
2375 description: Some(
2376 "struct S",
2377 ),
2378 docs: None,
2379 }, 2345 },
2380 }, 2346 },
2381 HoverGotoTypeData { 2347 HoverGotoTypeData {
@@ -2385,16 +2351,10 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; }
2385 0, 2351 0,
2386 ), 2352 ),
2387 full_range: 0..16, 2353 full_range: 0..16,
2388 focus_range: Some( 2354 focus_range: 7..10,
2389 7..10,
2390 ),
2391 name: "Arg", 2355 name: "Arg",
2392 kind: Struct, 2356 kind: Struct,
2393 container_name: None, 2357 description: "struct Arg",
2394 description: Some(
2395 "struct Arg",
2396 ),
2397 docs: None,
2398 }, 2358 },
2399 }, 2359 },
2400 ], 2360 ],
@@ -2427,16 +2387,10 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); }
2427 0, 2387 0,
2428 ), 2388 ),
2429 full_range: 0..14, 2389 full_range: 0..14,
2430 focus_range: Some( 2390 focus_range: 7..8,
2431 7..8,
2432 ),
2433 name: "A", 2391 name: "A",
2434 kind: Struct, 2392 kind: Struct,
2435 container_name: None, 2393 description: "struct A",
2436 description: Some(
2437 "struct A",
2438 ),
2439 docs: None,
2440 }, 2394 },
2441 }, 2395 },
2442 HoverGotoTypeData { 2396 HoverGotoTypeData {
@@ -2446,16 +2400,10 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); }
2446 0, 2400 0,
2447 ), 2401 ),
2448 full_range: 15..29, 2402 full_range: 15..29,
2449 focus_range: Some( 2403 focus_range: 22..23,
2450 22..23,
2451 ),
2452 name: "B", 2404 name: "B",
2453 kind: Struct, 2405 kind: Struct,
2454 container_name: None, 2406 description: "struct B",
2455 description: Some(
2456 "struct B",
2457 ),
2458 docs: None,
2459 }, 2407 },
2460 }, 2408 },
2461 HoverGotoTypeData { 2409 HoverGotoTypeData {
@@ -2465,16 +2413,10 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); }
2465 0, 2413 0,
2466 ), 2414 ),
2467 full_range: 42..60, 2415 full_range: 42..60,
2468 focus_range: Some( 2416 focus_range: 53..54,
2469 53..54,
2470 ),
2471 name: "C", 2417 name: "C",
2472 kind: Struct, 2418 kind: Struct,
2473 container_name: None, 2419 description: "pub struct C",
2474 description: Some(
2475 "pub struct C",
2476 ),
2477 docs: None,
2478 }, 2420 },
2479 }, 2421 },
2480 ], 2422 ],
@@ -2504,16 +2446,10 @@ fn main() { let s<|>t = foo(); }
2504 0, 2446 0,
2505 ), 2447 ),
2506 full_range: 0..12, 2448 full_range: 0..12,
2507 focus_range: Some( 2449 focus_range: 6..9,
2508 6..9,
2509 ),
2510 name: "Foo", 2450 name: "Foo",
2511 kind: Trait, 2451 kind: Trait,
2512 container_name: None, 2452 description: "trait Foo",
2513 description: Some(
2514 "trait Foo",
2515 ),
2516 docs: None,
2517 }, 2453 },
2518 }, 2454 },
2519 ], 2455 ],
@@ -2544,16 +2480,10 @@ fn main() { let s<|>t = foo(); }
2544 0, 2480 0,
2545 ), 2481 ),
2546 full_range: 0..15, 2482 full_range: 0..15,
2547 focus_range: Some( 2483 focus_range: 6..9,
2548 6..9,
2549 ),
2550 name: "Foo", 2484 name: "Foo",
2551 kind: Trait, 2485 kind: Trait,
2552 container_name: None, 2486 description: "trait Foo",
2553 description: Some(
2554 "trait Foo",
2555 ),
2556 docs: None,
2557 }, 2487 },
2558 }, 2488 },
2559 HoverGotoTypeData { 2489 HoverGotoTypeData {
@@ -2563,16 +2493,10 @@ fn main() { let s<|>t = foo(); }
2563 0, 2493 0,
2564 ), 2494 ),
2565 full_range: 16..25, 2495 full_range: 16..25,
2566 focus_range: Some( 2496 focus_range: 23..24,
2567 23..24,
2568 ),
2569 name: "S", 2497 name: "S",
2570 kind: Struct, 2498 kind: Struct,
2571 container_name: None, 2499 description: "struct S",
2572 description: Some(
2573 "struct S",
2574 ),
2575 docs: None,
2576 }, 2500 },
2577 }, 2501 },
2578 ], 2502 ],
@@ -2603,16 +2527,10 @@ fn main() { let s<|>t = foo(); }
2603 0, 2527 0,
2604 ), 2528 ),
2605 full_range: 0..12, 2529 full_range: 0..12,
2606 focus_range: Some( 2530 focus_range: 6..9,
2607 6..9,
2608 ),
2609 name: "Foo", 2531 name: "Foo",
2610 kind: Trait, 2532 kind: Trait,
2611 container_name: None, 2533 description: "trait Foo",
2612 description: Some(
2613 "trait Foo",
2614 ),
2615 docs: None,
2616 }, 2534 },
2617 }, 2535 },
2618 HoverGotoTypeData { 2536 HoverGotoTypeData {
@@ -2622,16 +2540,10 @@ fn main() { let s<|>t = foo(); }
2622 0, 2540 0,
2623 ), 2541 ),
2624 full_range: 13..25, 2542 full_range: 13..25,
2625 focus_range: Some( 2543 focus_range: 19..22,
2626 19..22,
2627 ),
2628 name: "Bar", 2544 name: "Bar",
2629 kind: Trait, 2545 kind: Trait,
2630 container_name: None, 2546 description: "trait Bar",
2631 description: Some(
2632 "trait Bar",
2633 ),
2634 docs: None,
2635 }, 2547 },
2636 }, 2548 },
2637 ], 2549 ],
@@ -2665,16 +2577,10 @@ fn main() { let s<|>t = foo(); }
2665 0, 2577 0,
2666 ), 2578 ),
2667 full_range: 0..15, 2579 full_range: 0..15,
2668 focus_range: Some( 2580 focus_range: 6..9,
2669 6..9,
2670 ),
2671 name: "Foo", 2581 name: "Foo",
2672 kind: Trait, 2582 kind: Trait,
2673 container_name: None, 2583 description: "trait Foo",
2674 description: Some(
2675 "trait Foo",
2676 ),
2677 docs: None,
2678 }, 2584 },
2679 }, 2585 },
2680 HoverGotoTypeData { 2586 HoverGotoTypeData {
@@ -2684,16 +2590,10 @@ fn main() { let s<|>t = foo(); }
2684 0, 2590 0,
2685 ), 2591 ),
2686 full_range: 16..31, 2592 full_range: 16..31,
2687 focus_range: Some( 2593 focus_range: 22..25,
2688 22..25,
2689 ),
2690 name: "Bar", 2594 name: "Bar",
2691 kind: Trait, 2595 kind: Trait,
2692 container_name: None, 2596 description: "trait Bar",
2693 description: Some(
2694 "trait Bar",
2695 ),
2696 docs: None,
2697 }, 2597 },
2698 }, 2598 },
2699 HoverGotoTypeData { 2599 HoverGotoTypeData {
@@ -2703,16 +2603,10 @@ fn main() { let s<|>t = foo(); }
2703 0, 2603 0,
2704 ), 2604 ),
2705 full_range: 32..44, 2605 full_range: 32..44,
2706 focus_range: Some( 2606 focus_range: 39..41,
2707 39..41,
2708 ),
2709 name: "S1", 2607 name: "S1",
2710 kind: Struct, 2608 kind: Struct,
2711 container_name: None, 2609 description: "struct S1",
2712 description: Some(
2713 "struct S1",
2714 ),
2715 docs: None,
2716 }, 2610 },
2717 }, 2611 },
2718 HoverGotoTypeData { 2612 HoverGotoTypeData {
@@ -2722,16 +2616,10 @@ fn main() { let s<|>t = foo(); }
2722 0, 2616 0,
2723 ), 2617 ),
2724 full_range: 45..57, 2618 full_range: 45..57,
2725 focus_range: Some( 2619 focus_range: 52..54,
2726 52..54,
2727 ),
2728 name: "S2", 2620 name: "S2",
2729 kind: Struct, 2621 kind: Struct,
2730 container_name: None, 2622 description: "struct S2",
2731 description: Some(
2732 "struct S2",
2733 ),
2734 docs: None,
2735 }, 2623 },
2736 }, 2624 },
2737 ], 2625 ],
@@ -2759,16 +2647,10 @@ fn foo(ar<|>g: &impl Foo) {}
2759 0, 2647 0,
2760 ), 2648 ),
2761 full_range: 0..12, 2649 full_range: 0..12,
2762 focus_range: Some( 2650 focus_range: 6..9,
2763 6..9,
2764 ),
2765 name: "Foo", 2651 name: "Foo",
2766 kind: Trait, 2652 kind: Trait,
2767 container_name: None, 2653 description: "trait Foo",
2768 description: Some(
2769 "trait Foo",
2770 ),
2771 docs: None,
2772 }, 2654 },
2773 }, 2655 },
2774 ], 2656 ],
@@ -2799,16 +2681,10 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {}
2799 0, 2681 0,
2800 ), 2682 ),
2801 full_range: 0..12, 2683 full_range: 0..12,
2802 focus_range: Some( 2684 focus_range: 6..9,
2803 6..9,
2804 ),
2805 name: "Foo", 2685 name: "Foo",
2806 kind: Trait, 2686 kind: Trait,
2807 container_name: None, 2687 description: "trait Foo",
2808 description: Some(
2809 "trait Foo",
2810 ),
2811 docs: None,
2812 }, 2688 },
2813 }, 2689 },
2814 HoverGotoTypeData { 2690 HoverGotoTypeData {
@@ -2818,16 +2694,10 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {}
2818 0, 2694 0,
2819 ), 2695 ),
2820 full_range: 13..28, 2696 full_range: 13..28,
2821 focus_range: Some( 2697 focus_range: 19..22,
2822 19..22,
2823 ),
2824 name: "Bar", 2698 name: "Bar",
2825 kind: Trait, 2699 kind: Trait,
2826 container_name: None, 2700 description: "trait Bar",
2827 description: Some(
2828 "trait Bar",
2829 ),
2830 docs: None,
2831 }, 2701 },
2832 }, 2702 },
2833 HoverGotoTypeData { 2703 HoverGotoTypeData {
@@ -2837,16 +2707,10 @@ fn foo(ar<|>g: &impl Foo + Bar<S>) {}
2837 0, 2707 0,
2838 ), 2708 ),
2839 full_range: 29..39, 2709 full_range: 29..39,
2840 focus_range: Some( 2710 focus_range: 36..37,
2841 36..37,
2842 ),
2843 name: "S", 2711 name: "S",
2844 kind: Struct, 2712 kind: Struct,
2845 container_name: None, 2713 description: "struct S",
2846 description: Some(
2847 "struct S",
2848 ),
2849 docs: None,
2850 }, 2714 },
2851 }, 2715 },
2852 ], 2716 ],
@@ -2882,16 +2746,10 @@ mod future {
2882 0, 2746 0,
2883 ), 2747 ),
2884 full_range: 101..163, 2748 full_range: 101..163,
2885 focus_range: Some( 2749 focus_range: 140..146,
2886 140..146,
2887 ),
2888 name: "Future", 2750 name: "Future",
2889 kind: Trait, 2751 kind: Trait,
2890 container_name: None, 2752 description: "pub trait Future",
2891 description: Some(
2892 "pub trait Future",
2893 ),
2894 docs: None,
2895 }, 2753 },
2896 }, 2754 },
2897 HoverGotoTypeData { 2755 HoverGotoTypeData {
@@ -2901,16 +2759,10 @@ mod future {
2901 0, 2759 0,
2902 ), 2760 ),
2903 full_range: 0..9, 2761 full_range: 0..9,
2904 focus_range: Some( 2762 focus_range: 7..8,
2905 7..8,
2906 ),
2907 name: "S", 2763 name: "S",
2908 kind: Struct, 2764 kind: Struct,
2909 container_name: None, 2765 description: "struct S",
2910 description: Some(
2911 "struct S",
2912 ),
2913 docs: None,
2914 }, 2766 },
2915 }, 2767 },
2916 ], 2768 ],
@@ -2939,16 +2791,10 @@ fn foo(ar<|>g: &impl Foo<S>) {}
2939 0, 2791 0,
2940 ), 2792 ),
2941 full_range: 0..15, 2793 full_range: 0..15,
2942 focus_range: Some( 2794 focus_range: 6..9,
2943 6..9,
2944 ),
2945 name: "Foo", 2795 name: "Foo",
2946 kind: Trait, 2796 kind: Trait,
2947 container_name: None, 2797 description: "trait Foo",
2948 description: Some(
2949 "trait Foo",
2950 ),
2951 docs: None,
2952 }, 2798 },
2953 }, 2799 },
2954 HoverGotoTypeData { 2800 HoverGotoTypeData {
@@ -2958,16 +2804,10 @@ fn foo(ar<|>g: &impl Foo<S>) {}
2958 0, 2804 0,
2959 ), 2805 ),
2960 full_range: 16..27, 2806 full_range: 16..27,
2961 focus_range: Some( 2807 focus_range: 23..24,
2962 23..24,
2963 ),
2964 name: "S", 2808 name: "S",
2965 kind: Struct, 2809 kind: Struct,
2966 container_name: None, 2810 description: "struct S",
2967 description: Some(
2968 "struct S",
2969 ),
2970 docs: None,
2971 }, 2811 },
2972 }, 2812 },
2973 ], 2813 ],
@@ -3001,16 +2841,10 @@ fn main() { let s<|>t = foo(); }
3001 0, 2841 0,
3002 ), 2842 ),
3003 full_range: 42..55, 2843 full_range: 42..55,
3004 focus_range: Some( 2844 focus_range: 49..50,
3005 49..50,
3006 ),
3007 name: "B", 2845 name: "B",
3008 kind: Struct, 2846 kind: Struct,
3009 container_name: None, 2847 description: "struct B",
3010 description: Some(
3011 "struct B",
3012 ),
3013 docs: None,
3014 }, 2848 },
3015 }, 2849 },
3016 HoverGotoTypeData { 2850 HoverGotoTypeData {
@@ -3020,16 +2854,10 @@ fn main() { let s<|>t = foo(); }
3020 0, 2854 0,
3021 ), 2855 ),
3022 full_range: 0..12, 2856 full_range: 0..12,
3023 focus_range: Some( 2857 focus_range: 6..9,
3024 6..9,
3025 ),
3026 name: "Foo", 2858 name: "Foo",
3027 kind: Trait, 2859 kind: Trait,
3028 container_name: None, 2860 description: "trait Foo",
3029 description: Some(
3030 "trait Foo",
3031 ),
3032 docs: None,
3033 }, 2861 },
3034 }, 2862 },
3035 ], 2863 ],
@@ -3057,16 +2885,10 @@ fn foo(ar<|>g: &dyn Foo) {}
3057 0, 2885 0,
3058 ), 2886 ),
3059 full_range: 0..12, 2887 full_range: 0..12,
3060 focus_range: Some( 2888 focus_range: 6..9,
3061 6..9,
3062 ),
3063 name: "Foo", 2889 name: "Foo",
3064 kind: Trait, 2890 kind: Trait,
3065 container_name: None, 2891 description: "trait Foo",
3066 description: Some(
3067 "trait Foo",
3068 ),
3069 docs: None,
3070 }, 2892 },
3071 }, 2893 },
3072 ], 2894 ],
@@ -3095,16 +2917,10 @@ fn foo(ar<|>g: &dyn Foo<S>) {}
3095 0, 2917 0,
3096 ), 2918 ),
3097 full_range: 0..15, 2919 full_range: 0..15,
3098 focus_range: Some( 2920 focus_range: 6..9,
3099 6..9,
3100 ),
3101 name: "Foo", 2921 name: "Foo",
3102 kind: Trait, 2922 kind: Trait,
3103 container_name: None, 2923 description: "trait Foo",
3104 description: Some(
3105 "trait Foo",
3106 ),
3107 docs: None,
3108 }, 2924 },
3109 }, 2925 },
3110 HoverGotoTypeData { 2926 HoverGotoTypeData {
@@ -3114,16 +2930,10 @@ fn foo(ar<|>g: &dyn Foo<S>) {}
3114 0, 2930 0,
3115 ), 2931 ),
3116 full_range: 16..27, 2932 full_range: 16..27,
3117 focus_range: Some( 2933 focus_range: 23..24,
3118 23..24,
3119 ),
3120 name: "S", 2934 name: "S",
3121 kind: Struct, 2935 kind: Struct,
3122 container_name: None, 2936 description: "struct S",
3123 description: Some(
3124 "struct S",
3125 ),
3126 docs: None,
3127 }, 2937 },
3128 }, 2938 },
3129 ], 2939 ],
@@ -3155,16 +2965,10 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {}
3155 0, 2965 0,
3156 ), 2966 ),
3157 full_range: 0..21, 2967 full_range: 0..21,
3158 focus_range: Some( 2968 focus_range: 6..15,
3159 6..15,
3160 ),
3161 name: "ImplTrait", 2969 name: "ImplTrait",
3162 kind: Trait, 2970 kind: Trait,
3163 container_name: None, 2971 description: "trait ImplTrait",
3164 description: Some(
3165 "trait ImplTrait",
3166 ),
3167 docs: None,
3168 }, 2972 },
3169 }, 2973 },
3170 HoverGotoTypeData { 2974 HoverGotoTypeData {
@@ -3174,16 +2978,10 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {}
3174 0, 2978 0,
3175 ), 2979 ),
3176 full_range: 43..57, 2980 full_range: 43..57,
3177 focus_range: Some( 2981 focus_range: 50..51,
3178 50..51,
3179 ),
3180 name: "B", 2982 name: "B",
3181 kind: Struct, 2983 kind: Struct,
3182 container_name: None, 2984 description: "struct B",
3183 description: Some(
3184 "struct B",
3185 ),
3186 docs: None,
3187 }, 2985 },
3188 }, 2986 },
3189 HoverGotoTypeData { 2987 HoverGotoTypeData {
@@ -3193,16 +2991,10 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {}
3193 0, 2991 0,
3194 ), 2992 ),
3195 full_range: 22..42, 2993 full_range: 22..42,
3196 focus_range: Some( 2994 focus_range: 28..36,
3197 28..36,
3198 ),
3199 name: "DynTrait", 2995 name: "DynTrait",
3200 kind: Trait, 2996 kind: Trait,
3201 container_name: None, 2997 description: "trait DynTrait",
3202 description: Some(
3203 "trait DynTrait",
3204 ),
3205 docs: None,
3206 }, 2998 },
3207 }, 2999 },
3208 HoverGotoTypeData { 3000 HoverGotoTypeData {
@@ -3212,16 +3004,10 @@ fn foo(a<|>rg: &impl ImplTrait<B<dyn DynTrait<B<S>>>>) {}
3212 0, 3004 0,
3213 ), 3005 ),
3214 full_range: 58..69, 3006 full_range: 58..69,
3215 focus_range: Some( 3007 focus_range: 65..66,
3216 65..66,
3217 ),
3218 name: "S", 3008 name: "S",
3219 kind: Struct, 3009 kind: Struct,
3220 container_name: None, 3010 description: "struct S",
3221 description: Some(
3222 "struct S",
3223 ),
3224 docs: None,
3225 }, 3011 },
3226 }, 3012 },
3227 ], 3013 ],
@@ -3260,16 +3046,10 @@ fn main() { let s<|>t = test().get(); }
3260 0, 3046 0,
3261 ), 3047 ),
3262 full_range: 0..62, 3048 full_range: 0..62,
3263 focus_range: Some( 3049 focus_range: 6..9,
3264 6..9,
3265 ),
3266 name: "Foo", 3050 name: "Foo",
3267 kind: Trait, 3051 kind: Trait,
3268 container_name: None, 3052 description: "trait Foo",
3269 description: Some(
3270 "trait Foo",
3271 ),
3272 docs: None,
3273 }, 3053 },
3274 }, 3054 },
3275 ], 3055 ],
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs
index d8069eb64..8c00a7105 100644
--- a/crates/ide/src/references.rs
+++ b/crates/ide/src/references.rs
@@ -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: SymbolKind::SelfParam, 281 kind: Some(SymbolKind::SelfParam),
282 container_name: None, 282 container_name: None,
283 description: None, 283 description: None,
284 docs: None, 284 docs: None,
diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs
index 600e93b6a..ff386be80 100644
--- a/crates/ide/src/runnables.rs
+++ b/crates/ide/src/runnables.rs
@@ -208,7 +208,7 @@ fn module_def_doctest(sema: &Semantics<RootDatabase>, def: hir::ModuleDef) -> Op
208 nav.focus_range = None; 208 nav.focus_range = None;
209 nav.description = None; 209 nav.description = None;
210 nav.docs = None; 210 nav.docs = None;
211 nav.kind = SymbolKind::DocTest; 211 nav.kind = None;
212 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() };
213 Some(res) 213 Some(res)
214} 214}
@@ -352,14 +352,9 @@ fn bench() {}
352 0, 352 0,
353 ), 353 ),
354 full_range: 1..13, 354 full_range: 1..13,
355 focus_range: Some( 355 focus_range: 4..8,
356 4..8,
357 ),
358 name: "main", 356 name: "main",
359 kind: Function, 357 kind: Function,
360 container_name: None,
361 description: None,
362 docs: None,
363 }, 358 },
364 kind: Bin, 359 kind: Bin,
365 cfg: None, 360 cfg: None,
@@ -370,14 +365,9 @@ fn bench() {}
370 0, 365 0,
371 ), 366 ),
372 full_range: 15..39, 367 full_range: 15..39,
373 focus_range: Some( 368 focus_range: 26..34,
374 26..34,
375 ),
376 name: "test_foo", 369 name: "test_foo",
377 kind: Function, 370 kind: Function,
378 container_name: None,
379 description: None,
380 docs: None,
381 }, 371 },
382 kind: Test { 372 kind: Test {
383 test_id: Path( 373 test_id: Path(
@@ -395,14 +385,9 @@ fn bench() {}
395 0, 385 0,
396 ), 386 ),
397 full_range: 41..75, 387 full_range: 41..75,
398 focus_range: Some( 388 focus_range: 62..70,
399 62..70,
400 ),
401 name: "test_foo", 389 name: "test_foo",
402 kind: Function, 390 kind: Function,
403 container_name: None,
404 description: None,
405 docs: None,
406 }, 391 },
407 kind: Test { 392 kind: Test {
408 test_id: Path( 393 test_id: Path(
@@ -420,14 +405,9 @@ fn bench() {}
420 0, 405 0,
421 ), 406 ),
422 full_range: 77..99, 407 full_range: 77..99,
423 focus_range: Some( 408 focus_range: 89..94,
424 89..94,
425 ),
426 name: "bench", 409 name: "bench",
427 kind: Function, 410 kind: Function,
428 container_name: None,
429 description: None,
430 docs: None,
431 }, 411 },
432 kind: Bench { 412 kind: Bench {
433 test_id: Path( 413 test_id: Path(
@@ -517,14 +497,9 @@ struct StructWithRunnable(String);
517 0, 497 0,
518 ), 498 ),
519 full_range: 1..13, 499 full_range: 1..13,
520 focus_range: Some( 500 focus_range: 4..8,
521 4..8,
522 ),
523 name: "main", 501 name: "main",
524 kind: Function, 502 kind: Function,
525 container_name: None,
526 description: None,
527 docs: None,
528 }, 503 },
529 kind: Bin, 504 kind: Bin,
530 cfg: None, 505 cfg: None,
@@ -535,12 +510,7 @@ struct StructWithRunnable(String);
535 0, 510 0,
536 ), 511 ),
537 full_range: 15..74, 512 full_range: 15..74,
538 focus_range: None,
539 name: "should_have_runnable", 513 name: "should_have_runnable",
540 kind: DocTest,
541 container_name: None,
542 description: None,
543 docs: None,
544 }, 514 },
545 kind: DocTest { 515 kind: DocTest {
546 test_id: Path( 516 test_id: Path(
@@ -555,12 +525,7 @@ struct StructWithRunnable(String);
555 0, 525 0,
556 ), 526 ),
557 full_range: 76..148, 527 full_range: 76..148,
558 focus_range: None,
559 name: "should_have_runnable_1", 528 name: "should_have_runnable_1",
560 kind: DocTest,
561 container_name: None,
562 description: None,
563 docs: None,
564 }, 529 },
565 kind: DocTest { 530 kind: DocTest {
566 test_id: Path( 531 test_id: Path(
@@ -575,12 +540,7 @@ struct StructWithRunnable(String);
575 0, 540 0,
576 ), 541 ),
577 full_range: 150..254, 542 full_range: 150..254,
578 focus_range: None,
579 name: "should_have_runnable_2", 543 name: "should_have_runnable_2",
580 kind: DocTest,
581 container_name: None,
582 description: None,
583 docs: None,
584 }, 544 },
585 kind: DocTest { 545 kind: DocTest {
586 test_id: Path( 546 test_id: Path(
@@ -595,12 +555,7 @@ struct StructWithRunnable(String);
595 0, 555 0,
596 ), 556 ),
597 full_range: 756..821, 557 full_range: 756..821,
598 focus_range: None,
599 name: "StructWithRunnable", 558 name: "StructWithRunnable",
600 kind: DocTest,
601 container_name: None,
602 description: None,
603 docs: None,
604 }, 559 },
605 kind: DocTest { 560 kind: DocTest {
606 test_id: Path( 561 test_id: Path(
@@ -639,14 +594,9 @@ impl Data {
639 0, 594 0,
640 ), 595 ),
641 full_range: 1..13, 596 full_range: 1..13,
642 focus_range: Some( 597 focus_range: 4..8,
643 4..8,
644 ),
645 name: "main", 598 name: "main",
646 kind: Function, 599 kind: Function,
647 container_name: None,
648 description: None,
649 docs: None,
650 }, 600 },
651 kind: Bin, 601 kind: Bin,
652 cfg: None, 602 cfg: None,
@@ -657,12 +607,7 @@ impl Data {
657 0, 607 0,
658 ), 608 ),
659 full_range: 44..98, 609 full_range: 44..98,
660 focus_range: None,
661 name: "foo", 610 name: "foo",
662 kind: DocTest,
663 container_name: None,
664 description: None,
665 docs: None,
666 }, 611 },
667 kind: DocTest { 612 kind: DocTest {
668 test_id: Path( 613 test_id: Path(
@@ -696,14 +641,9 @@ mod test_mod {
696 0, 641 0,
697 ), 642 ),
698 full_range: 1..51, 643 full_range: 1..51,
699 focus_range: Some( 644 focus_range: 5..13,
700 5..13,
701 ),
702 name: "test_mod", 645 name: "test_mod",
703 kind: Module, 646 kind: Module,
704 container_name: None,
705 description: None,
706 docs: None,
707 }, 647 },
708 kind: TestMod { 648 kind: TestMod {
709 path: "test_mod", 649 path: "test_mod",
@@ -716,14 +656,9 @@ mod test_mod {
716 0, 656 0,
717 ), 657 ),
718 full_range: 20..49, 658 full_range: 20..49,
719 focus_range: Some( 659 focus_range: 35..44,
720 35..44,
721 ),
722 name: "test_foo1", 660 name: "test_foo1",
723 kind: Function, 661 kind: Function,
724 container_name: None,
725 description: None,
726 docs: None,
727 }, 662 },
728 kind: Test { 663 kind: Test {
729 test_id: Path( 664 test_id: Path(
@@ -776,14 +711,9 @@ mod root_tests {
776 0, 711 0,
777 ), 712 ),
778 full_range: 22..323, 713 full_range: 22..323,
779 focus_range: Some( 714 focus_range: 26..40,
780 26..40,
781 ),
782 name: "nested_tests_0", 715 name: "nested_tests_0",
783 kind: Module, 716 kind: Module,
784 container_name: None,
785 description: None,
786 docs: None,
787 }, 717 },
788 kind: TestMod { 718 kind: TestMod {
789 path: "root_tests::nested_tests_0", 719 path: "root_tests::nested_tests_0",
@@ -796,14 +726,9 @@ mod root_tests {
796 0, 726 0,
797 ), 727 ),
798 full_range: 51..192, 728 full_range: 51..192,
799 focus_range: Some( 729 focus_range: 55..69,
800 55..69,
801 ),
802 name: "nested_tests_1", 730 name: "nested_tests_1",
803 kind: Module, 731 kind: Module,
804 container_name: None,
805 description: None,
806 docs: None,
807 }, 732 },
808 kind: TestMod { 733 kind: TestMod {
809 path: "root_tests::nested_tests_0::nested_tests_1", 734 path: "root_tests::nested_tests_0::nested_tests_1",
@@ -816,14 +741,9 @@ mod root_tests {
816 0, 741 0,
817 ), 742 ),
818 full_range: 84..126, 743 full_range: 84..126,
819 focus_range: Some( 744 focus_range: 107..121,
820 107..121,
821 ),
822 name: "nested_test_11", 745 name: "nested_test_11",
823 kind: Function, 746 kind: Function,
824 container_name: None,
825 description: None,
826 docs: None,
827 }, 747 },
828 kind: Test { 748 kind: Test {
829 test_id: Path( 749 test_id: Path(
@@ -841,14 +761,9 @@ mod root_tests {
841 0, 761 0,
842 ), 762 ),
843 full_range: 140..182, 763 full_range: 140..182,
844 focus_range: Some( 764 focus_range: 163..177,
845 163..177,
846 ),
847 name: "nested_test_12", 765 name: "nested_test_12",
848 kind: Function, 766 kind: Function,
849 container_name: None,
850 description: None,
851 docs: None,
852 }, 767 },
853 kind: Test { 768 kind: Test {
854 test_id: Path( 769 test_id: Path(
@@ -866,14 +781,9 @@ mod root_tests {
866 0, 781 0,
867 ), 782 ),
868 full_range: 202..286, 783 full_range: 202..286,
869 focus_range: Some( 784 focus_range: 206..220,
870 206..220,
871 ),
872 name: "nested_tests_2", 785 name: "nested_tests_2",
873 kind: Module, 786 kind: Module,
874 container_name: None,
875 description: None,
876 docs: None,
877 }, 787 },
878 kind: TestMod { 788 kind: TestMod {
879 path: "root_tests::nested_tests_0::nested_tests_2", 789 path: "root_tests::nested_tests_0::nested_tests_2",
@@ -886,14 +796,9 @@ mod root_tests {
886 0, 796 0,
887 ), 797 ),
888 full_range: 235..276, 798 full_range: 235..276,
889 focus_range: Some( 799 focus_range: 258..271,
890 258..271,
891 ),
892 name: "nested_test_2", 800 name: "nested_test_2",
893 kind: Function, 801 kind: Function,
894 container_name: None,
895 description: None,
896 docs: None,
897 }, 802 },
898 kind: Test { 803 kind: Test {
899 test_id: Path( 804 test_id: Path(
@@ -929,14 +834,9 @@ fn test_foo1() {}
929 0, 834 0,
930 ), 835 ),
931 full_range: 1..50, 836 full_range: 1..50,
932 focus_range: Some( 837 focus_range: 36..45,
933 36..45,
934 ),
935 name: "test_foo1", 838 name: "test_foo1",
936 kind: Function, 839 kind: Function,
937 container_name: None,
938 description: None,
939 docs: None,
940 }, 840 },
941 kind: Test { 841 kind: Test {
942 test_id: Path( 842 test_id: Path(
@@ -979,14 +879,9 @@ fn test_foo1() {}
979 0, 879 0,
980 ), 880 ),
981 full_range: 1..72, 881 full_range: 1..72,
982 focus_range: Some( 882 focus_range: 58..67,
983 58..67,
984 ),
985 name: "test_foo1", 883 name: "test_foo1",
986 kind: Function, 884 kind: Function,
987 container_name: None,
988 description: None,
989 docs: None,
990 }, 885 },
991 kind: Test { 886 kind: Test {
992 test_id: Path( 887 test_id: Path(
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs
index 404b35025..66f8bee99 100644
--- a/crates/rust-analyzer/src/handlers.rs
+++ b/crates/rust-analyzer/src/handlers.rs
@@ -385,7 +385,10 @@ pub(crate) fn handle_workspace_symbol(
385 #[allow(deprecated)] 385 #[allow(deprecated)]
386 let info = SymbolInformation { 386 let info = SymbolInformation {
387 name: nav.name.to_string(), 387 name: nav.name.to_string(),
388 kind: to_proto::symbol_kind(nav.kind), 388 kind: nav
389 .kind
390 .map(to_proto::symbol_kind)
391 .unwrap_or(lsp_types::SymbolKind::Variable),
389 tags: None, 392 tags: None,
390 location: to_proto::location_from_nav(snap, nav)?, 393 location: to_proto::location_from_nav(snap, nav)?,
391 container_name, 394 container_name,
@@ -1263,7 +1266,7 @@ pub(crate) fn handle_call_hierarchy_prepare(
1263 let RangeInfo { range: _, info: navs } = nav_info; 1266 let RangeInfo { range: _, info: navs } = nav_info;
1264 let res = navs 1267 let res = navs
1265 .into_iter() 1268 .into_iter()
1266 .filter(|it| it.kind == SymbolKind::Function) 1269 .filter(|it| it.kind == Some(SymbolKind::Function))
1267 .map(|it| to_proto::call_hierarchy_item(&snap, it)) 1270 .map(|it| to_proto::call_hierarchy_item(&snap, it))
1268 .collect::<Result<Vec<_>>>()?; 1271 .collect::<Result<Vec<_>>>()?;
1269 1272
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index 79caafe80..6b2302803 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -43,10 +43,9 @@ pub(crate) fn symbol_kind(symbol_kind: SymbolKind) -> lsp_types::SymbolKind {
43 SymbolKind::Static => lsp_types::SymbolKind::Constant, 43 SymbolKind::Static => lsp_types::SymbolKind::Constant,
44 SymbolKind::Const => lsp_types::SymbolKind::Constant, 44 SymbolKind::Const => lsp_types::SymbolKind::Constant,
45 SymbolKind::Impl => lsp_types::SymbolKind::Object, 45 SymbolKind::Impl => lsp_types::SymbolKind::Object,
46 SymbolKind::Local 46 SymbolKind::Local | SymbolKind::SelfParam | SymbolKind::LifetimeParam => {
47 | SymbolKind::SelfParam 47 lsp_types::SymbolKind::Variable
48 | SymbolKind::LifetimeParam 48 }
49 | SymbolKind::DocTest => lsp_types::SymbolKind::Variable,
50 SymbolKind::Union => lsp_types::SymbolKind::Struct, 49 SymbolKind::Union => lsp_types::SymbolKind::Struct,
51 } 50 }
52} 51}
@@ -722,7 +721,7 @@ pub(crate) fn call_hierarchy_item(
722) -> Result<lsp_types::CallHierarchyItem> { 721) -> Result<lsp_types::CallHierarchyItem> {
723 let name = target.name.to_string(); 722 let name = target.name.to_string();
724 let detail = target.description.clone(); 723 let detail = target.description.clone();
725 let kind = symbol_kind(target.kind); 724 let kind = target.kind.map(symbol_kind).unwrap_or(lsp_types::SymbolKind::Function);
726 let (uri, range, selection_range) = location_info(snap, target)?; 725 let (uri, range, selection_range) = location_info(snap, target)?;
727 Ok(lsp_types::CallHierarchyItem { 726 Ok(lsp_types::CallHierarchyItem {
728 name, 727 name,