From d7548a36a7e814a165b05ffcb9ec5b55e0b291da Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 17 Jul 2020 12:42:48 +0200 Subject: [PATCH] Unclutter NavigationTarget API --- crates/ra_ide/src/call_hierarchy.rs | 3 +- .../ra_ide/src/display/navigation_target.rs | 81 ++++------ crates/ra_ide/src/goto_definition.rs | 2 +- crates/ra_ide/src/goto_implementation.rs | 2 +- crates/ra_ide/src/goto_type_definition.rs | 2 +- crates/ra_ide/src/hover.rs | 144 +++++++++--------- crates/ra_ide/src/lib.rs | 16 +- crates/ra_ide/src/references.rs | 6 +- crates/ra_ide/src/runnables.rs | 60 ++++---- crates/rust-analyzer/src/handlers.rs | 20 +-- crates/rust-analyzer/src/to_proto.rs | 28 ++-- 11 files changed, 166 insertions(+), 198 deletions(-) diff --git a/crates/ra_ide/src/call_hierarchy.rs b/crates/ra_ide/src/call_hierarchy.rs index 6af251d231..c28af8ab33 100644 --- a/crates/ra_ide/src/call_hierarchy.rs +++ b/crates/ra_ide/src/call_hierarchy.rs @@ -154,7 +154,8 @@ mod tests { let nav = navs.pop().unwrap(); nav.assert_match(expected); - let item_pos = FilePosition { file_id: nav.file_id(), offset: nav.range().start() }; + let item_pos = + FilePosition { file_id: nav.file_id, offset: nav.focus_or_full_range().start() }; let incoming_calls = analysis.incoming_calls(item_pos).unwrap().unwrap(); assert_eq!(incoming_calls.len(), expected_incoming.len()); diff --git a/crates/ra_ide/src/display/navigation_target.rs b/crates/ra_ide/src/display/navigation_target.rs index 8bf2428ed4..6dcb9415ab 100644 --- a/crates/ra_ide/src/display/navigation_target.rs +++ b/crates/ra_ide/src/display/navigation_target.rs @@ -22,15 +22,28 @@ use super::short_label::ShortLabel; /// code, like a function or a struct, but this is not strictly required. #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct NavigationTarget { - // FIXME: use FileRange? - file_id: FileId, - full_range: TextRange, - name: SmolStr, - kind: SyntaxKind, - focus_range: Option, - container_name: Option, - description: Option, - docs: Option, + pub file_id: FileId, + /// Range which encompasses the whole element. + /// + /// Should include body, doc comments, attributes, etc. + /// + /// Clients should use this range to answer "is the cursor inside the + /// element?" question. + pub full_range: TextRange, + /// A "most interesting" range withing the `full_range`. + /// + /// Typically, `full_range` is the whole syntax node, including doc + /// comments, and `focus_range` is the range of the identifier. "Most + /// interesting" range within the full range, typically the range of + /// identifier. + /// + /// Clients should place the cursor on this range when navigating to this target. + pub focus_range: Option, + pub name: SmolStr, + pub kind: SyntaxKind, + pub container_name: Option, + pub description: Option, + pub docs: Option, } pub(crate) trait ToNav { @@ -42,44 +55,9 @@ pub(crate) trait TryToNav { } impl NavigationTarget { - /// When `focus_range` is specified, returns it. otherwise - /// returns `full_range` - pub fn range(&self) -> TextRange { + pub fn focus_or_full_range(&self) -> TextRange { self.focus_range.unwrap_or(self.full_range) } - /// A "most interesting" range withing the `full_range`. - /// - /// Typically, `full_range` is the whole syntax node, - /// including doc comments, and `focus_range` is the range of the identifier. - pub fn focus_range(&self) -> Option { - self.focus_range - } - pub fn full_range(&self) -> TextRange { - self.full_range - } - pub fn file_id(&self) -> FileId { - self.file_id - } - - pub fn name(&self) -> &SmolStr { - &self.name - } - - pub fn container_name(&self) -> Option<&SmolStr> { - self.container_name.as_ref() - } - - pub fn kind(&self) -> SyntaxKind { - self.kind - } - - pub fn docs(&self) -> Option<&str> { - self.docs.as_deref() - } - - pub fn description(&self) -> Option<&str> { - self.description.as_deref() - } pub(crate) fn from_module_to_decl(db: &RootDatabase, module: hir::Module) -> NavigationTarget { let name = module.name(db).map(|it| it.to_string().into()).unwrap_or_default(); @@ -107,17 +85,12 @@ impl NavigationTarget { #[cfg(test)] pub(crate) fn debug_render(&self) -> String { - let mut buf = format!( - "{} {:?} {:?} {:?}", - self.name(), - self.kind(), - self.file_id(), - self.full_range() - ); - if let Some(focus_range) = self.focus_range() { + let mut buf = + format!("{} {:?} {:?} {:?}", self.name, self.kind, self.file_id, self.full_range); + if let Some(focus_range) = self.focus_range { buf.push_str(&format!(" {:?}", focus_range)) } - if let Some(container_name) = self.container_name() { + if let Some(container_name) = &self.container_name { buf.push_str(&format!(" {}", container_name)) } buf diff --git a/crates/ra_ide/src/goto_definition.rs b/crates/ra_ide/src/goto_definition.rs index c30b206115..db6d20a374 100644 --- a/crates/ra_ide/src/goto_definition.rs +++ b/crates/ra_ide/src/goto_definition.rs @@ -130,7 +130,7 @@ mod tests { assert_eq!(navs.len(), 1); let nav = navs.pop().unwrap(); - assert_eq!(expected, FileRange { file_id: nav.file_id(), range: nav.range() }); + assert_eq!(expected, FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }); } #[test] diff --git a/crates/ra_ide/src/goto_implementation.rs b/crates/ra_ide/src/goto_implementation.rs index 9acc960fc2..3ee048f285 100644 --- a/crates/ra_ide/src/goto_implementation.rs +++ b/crates/ra_ide/src/goto_implementation.rs @@ -98,7 +98,7 @@ mod tests { let mut actual = navs .into_iter() - .map(|nav| FileRange { file_id: nav.file_id(), range: nav.range() }) + .map(|nav| FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }) .collect::>(); actual.sort_by_key(key); diff --git a/crates/ra_ide/src/goto_type_definition.rs b/crates/ra_ide/src/goto_type_definition.rs index 069cb283e5..8f52feea6e 100644 --- a/crates/ra_ide/src/goto_type_definition.rs +++ b/crates/ra_ide/src/goto_type_definition.rs @@ -67,7 +67,7 @@ mod tests { let mut navs = analysis.goto_type_definition(position).unwrap().unwrap().info; assert_eq!(navs.len(), 1); let nav = navs.pop().unwrap(); - assert_eq!(expected, FileRange { file_id: nav.file_id(), range: nav.range() }); + assert_eq!(expected, FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }); } #[test] diff --git a/crates/ra_ide/src/hover.rs b/crates/ra_ide/src/hover.rs index a4c97e7f98..d067c339d3 100644 --- a/crates/ra_ide/src/hover.rs +++ b/crates/ra_ide/src/hover.rs @@ -133,8 +133,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option Option { fn to_action(nav_target: NavigationTarget) -> HoverAction { HoverAction::Implementaion(FilePosition { - file_id: nav_target.file_id(), - offset: nav_target.range().start(), + file_id: nav_target.file_id, + offset: nav_target.focus_or_full_range().start(), }) } @@ -1357,11 +1357,11 @@ fn foo_<|>test() {} 1, ), full_range: 0..24, - name: "foo_test", - kind: FN_DEF, focus_range: Some( 11..19, ), + name: "foo_test", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -1400,11 +1400,11 @@ mod tests<|> { 1, ), full_range: 0..46, - name: "tests", - kind: MODULE, focus_range: Some( 4..9, ), + name: "tests", + kind: MODULE, container_name: None, description: None, docs: None, @@ -1439,11 +1439,11 @@ fn main() { let s<|>t = S{ f1:0 }; } 1, ), full_range: 0..19, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 7..8, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -1478,11 +1478,11 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; } 1, ), full_range: 17..37, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 24..25, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -1497,11 +1497,11 @@ fn main() { let s<|>t = S{ f1:Arg(0) }; } 1, ), full_range: 0..16, - name: "Arg", - kind: STRUCT_DEF, focus_range: Some( 7..10, ), + name: "Arg", + kind: STRUCT_DEF, container_name: None, description: Some( "struct Arg", @@ -1536,11 +1536,11 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; } 1, ), full_range: 17..37, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 24..25, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -1555,11 +1555,11 @@ fn main() { let s<|>t = S{ f1: S{ f1: Arg(0) } }; } 1, ), full_range: 0..16, - name: "Arg", - kind: STRUCT_DEF, focus_range: Some( 7..10, ), + name: "Arg", + kind: STRUCT_DEF, container_name: None, description: Some( "struct Arg", @@ -1597,11 +1597,11 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } 1, ), full_range: 0..14, - name: "A", - kind: STRUCT_DEF, focus_range: Some( 7..8, ), + name: "A", + kind: STRUCT_DEF, container_name: None, description: Some( "struct A", @@ -1616,11 +1616,11 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } 1, ), full_range: 15..29, - name: "B", - kind: STRUCT_DEF, focus_range: Some( 22..23, ), + name: "B", + kind: STRUCT_DEF, container_name: None, description: Some( "struct B", @@ -1635,11 +1635,11 @@ fn main() { let s<|>t = (A(1), B(2), M::C(3) ); } 1, ), full_range: 42..60, - name: "C", - kind: STRUCT_DEF, focus_range: Some( 53..54, ), + name: "C", + kind: STRUCT_DEF, container_name: None, description: Some( "pub struct C", @@ -1674,11 +1674,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1714,11 +1714,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 0..15, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1733,11 +1733,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 16..25, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 23..24, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -1773,11 +1773,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1792,11 +1792,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 13..25, - name: "Bar", - kind: TRAIT_DEF, focus_range: Some( 19..22, ), + name: "Bar", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Bar", @@ -1835,11 +1835,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 0..15, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1854,11 +1854,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 16..31, - name: "Bar", - kind: TRAIT_DEF, focus_range: Some( 22..25, ), + name: "Bar", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Bar", @@ -1873,11 +1873,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 32..44, - name: "S1", - kind: STRUCT_DEF, focus_range: Some( 39..41, ), + name: "S1", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S1", @@ -1892,11 +1892,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 45..57, - name: "S2", - kind: STRUCT_DEF, focus_range: Some( 52..54, ), + name: "S2", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S2", @@ -1929,11 +1929,11 @@ fn foo(ar<|>g: &impl Foo) {} 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1969,11 +1969,11 @@ fn foo(ar<|>g: &impl Foo + Bar) {} 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -1988,11 +1988,11 @@ fn foo(ar<|>g: &impl Foo + Bar) {} 1, ), full_range: 13..28, - name: "Bar", - kind: TRAIT_DEF, focus_range: Some( 19..22, ), + name: "Bar", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Bar", @@ -2007,11 +2007,11 @@ fn foo(ar<|>g: &impl Foo + Bar) {} 1, ), full_range: 29..39, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 36..37, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -2045,11 +2045,11 @@ fn foo(ar<|>g: &impl Foo) {} 1, ), full_range: 0..15, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -2064,11 +2064,11 @@ fn foo(ar<|>g: &impl Foo) {} 1, ), full_range: 16..27, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 23..24, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -2107,11 +2107,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 42..55, - name: "B", - kind: STRUCT_DEF, focus_range: Some( 49..50, ), + name: "B", + kind: STRUCT_DEF, container_name: None, description: Some( "struct B", @@ -2126,11 +2126,11 @@ fn main() { let s<|>t = foo(); } 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -2163,11 +2163,11 @@ fn foo(ar<|>g: &dyn Foo) {} 1, ), full_range: 0..12, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -2201,11 +2201,11 @@ fn foo(ar<|>g: &dyn Foo) {} 1, ), full_range: 0..15, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", @@ -2220,11 +2220,11 @@ fn foo(ar<|>g: &dyn Foo) {} 1, ), full_range: 16..27, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 23..24, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -2261,11 +2261,11 @@ fn foo(a<|>rg: &impl ImplTrait>>>) {} 1, ), full_range: 0..21, - name: "ImplTrait", - kind: TRAIT_DEF, focus_range: Some( 6..15, ), + name: "ImplTrait", + kind: TRAIT_DEF, container_name: None, description: Some( "trait ImplTrait", @@ -2280,11 +2280,11 @@ fn foo(a<|>rg: &impl ImplTrait>>>) {} 1, ), full_range: 43..57, - name: "B", - kind: STRUCT_DEF, focus_range: Some( 50..51, ), + name: "B", + kind: STRUCT_DEF, container_name: None, description: Some( "struct B", @@ -2299,11 +2299,11 @@ fn foo(a<|>rg: &impl ImplTrait>>>) {} 1, ), full_range: 22..42, - name: "DynTrait", - kind: TRAIT_DEF, focus_range: Some( 28..36, ), + name: "DynTrait", + kind: TRAIT_DEF, container_name: None, description: Some( "trait DynTrait", @@ -2318,11 +2318,11 @@ fn foo(a<|>rg: &impl ImplTrait>>>) {} 1, ), full_range: 58..69, - name: "S", - kind: STRUCT_DEF, focus_range: Some( 65..66, ), + name: "S", + kind: STRUCT_DEF, container_name: None, description: Some( "struct S", @@ -2366,11 +2366,11 @@ fn main() { let s<|>t = test().get(); } 1, ), full_range: 0..62, - name: "Foo", - kind: TRAIT_DEF, focus_range: Some( 6..9, ), + name: "Foo", + kind: TRAIT_DEF, container_name: None, description: Some( "trait Foo", diff --git a/crates/ra_ide/src/lib.rs b/crates/ra_ide/src/lib.rs index d3b20f371b..353f430ff1 100644 --- a/crates/ra_ide/src/lib.rs +++ b/crates/ra_ide/src/lib.rs @@ -545,8 +545,8 @@ mod tests { let s = symbols.pop().unwrap(); - assert_eq!(s.name(), "FooInner"); - assert!(s.container_name().is_none()); + assert_eq!(s.name, "FooInner"); + assert!(s.container_name.is_none()); } #[test] @@ -561,8 +561,8 @@ fn foo() { let s = symbols.pop().unwrap(); - assert_eq!(s.name(), "FooInner"); - assert_eq!(s.container_name(), Some(&SmolStr::new("foo"))); + assert_eq!(s.name, "FooInner"); + assert_eq!(s.container_name, Some(SmolStr::new("foo"))); let code = r#" mod foo { @@ -574,8 +574,8 @@ mod foo { let s = symbols.pop().unwrap(); - assert_eq!(s.name(), "FooInner"); - assert_eq!(s.container_name(), Some(&SmolStr::new("foo"))); + assert_eq!(s.name, "FooInner"); + assert_eq!(s.container_name, Some(SmolStr::new("foo"))); } #[test] @@ -588,8 +588,8 @@ struct Foo; let symbols = get_symbols_matching(code, "Foo"); - let fn_match = symbols.iter().find(|s| s.name() == "foo").map(|s| s.kind()); - let struct_match = symbols.iter().find(|s| s.name() == "Foo").map(|s| s.kind()); + let fn_match = symbols.iter().find(|s| s.name == "foo").map(|s| s.kind); + let struct_match = symbols.iter().find(|s| s.name == "Foo").map(|s| s.kind); assert_eq!(fn_match, Some(FN_DEF)); assert_eq!(struct_match, Some(STRUCT_DEF)); diff --git a/crates/ra_ide/src/references.rs b/crates/ra_ide/src/references.rs index c2b0d5efea..fe1c074d12 100644 --- a/crates/ra_ide/src/references.rs +++ b/crates/ra_ide/src/references.rs @@ -74,8 +74,8 @@ impl IntoIterator for ReferenceSearchResult { let mut v = Vec::with_capacity(self.len()); v.push(Reference { file_range: FileRange { - file_id: self.declaration.nav.file_id(), - range: self.declaration.nav.range(), + file_id: self.declaration.nav.file_id, + range: self.declaration.nav.focus_or_full_range(), }, kind: self.declaration.kind, access: self.declaration.access, @@ -112,7 +112,7 @@ pub(crate) fn find_all_refs( .filter(|r| search_kind == ReferenceKind::Other || search_kind == r.kind) .collect(); - let decl_range = def.try_to_nav(sema.db)?.range(); + let decl_range = def.try_to_nav(sema.db)?.focus_or_full_range(); let declaration = Declaration { nav: def.try_to_nav(sema.db)?, diff --git a/crates/ra_ide/src/runnables.rs b/crates/ra_ide/src/runnables.rs index ed15d6494f..0994beec56 100644 --- a/crates/ra_ide/src/runnables.rs +++ b/crates/ra_ide/src/runnables.rs @@ -299,11 +299,11 @@ fn bench() {} 1, ), full_range: 1..13, - name: "main", - kind: FN_DEF, focus_range: Some( 4..8, ), + name: "main", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -317,11 +317,11 @@ fn bench() {} 1, ), full_range: 15..39, - name: "test_foo", - kind: FN_DEF, focus_range: Some( 26..34, ), + name: "test_foo", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -342,11 +342,11 @@ fn bench() {} 1, ), full_range: 41..75, - name: "test_foo", - kind: FN_DEF, focus_range: Some( 62..70, ), + name: "test_foo", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -367,11 +367,11 @@ fn bench() {} 1, ), full_range: 77..99, - name: "bench", - kind: FN_DEF, focus_range: Some( 89..94, ), + name: "bench", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -410,11 +410,11 @@ fn foo() {} 1, ), full_range: 1..13, - name: "main", - kind: FN_DEF, focus_range: Some( 4..8, ), + name: "main", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -428,9 +428,9 @@ fn foo() {} 1, ), full_range: 15..57, + focus_range: None, name: "foo", kind: FN_DEF, - focus_range: None, container_name: None, description: None, docs: None, @@ -472,11 +472,11 @@ impl Data { 1, ), full_range: 1..13, - name: "main", - kind: FN_DEF, focus_range: Some( 4..8, ), + name: "main", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -490,9 +490,9 @@ impl Data { 1, ), full_range: 44..98, + focus_range: None, name: "foo", kind: FN_DEF, - focus_range: None, container_name: None, description: None, docs: None, @@ -529,11 +529,11 @@ mod test_mod { 1, ), full_range: 1..51, - name: "test_mod", - kind: MODULE, focus_range: Some( 5..13, ), + name: "test_mod", + kind: MODULE, container_name: None, description: None, docs: None, @@ -549,11 +549,11 @@ mod test_mod { 1, ), full_range: 20..49, - name: "test_foo1", - kind: FN_DEF, focus_range: Some( 35..44, ), + name: "test_foo1", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -595,11 +595,11 @@ mod foo { 1, ), full_range: 15..77, - name: "test_mod", - kind: MODULE, focus_range: Some( 19..27, ), + name: "test_mod", + kind: MODULE, container_name: None, description: None, docs: None, @@ -615,11 +615,11 @@ mod foo { 1, ), full_range: 38..71, - name: "test_foo1", - kind: FN_DEF, focus_range: Some( 57..66, ), + name: "test_foo1", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -663,11 +663,11 @@ mod foo { 1, ), full_range: 33..107, - name: "test_mod", - kind: MODULE, focus_range: Some( 37..45, ), + name: "test_mod", + kind: MODULE, container_name: None, description: None, docs: None, @@ -683,11 +683,11 @@ mod foo { 1, ), full_range: 60..97, - name: "test_foo1", - kind: FN_DEF, focus_range: Some( 83..92, ), + name: "test_foo1", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -726,11 +726,11 @@ fn test_foo1() {} 1, ), full_range: 1..50, - name: "test_foo1", - kind: FN_DEF, focus_range: Some( 36..45, ), + name: "test_foo1", + kind: FN_DEF, container_name: None, description: None, docs: None, @@ -774,11 +774,11 @@ fn test_foo1() {} 1, ), full_range: 1..72, - name: "test_foo1", - kind: FN_DEF, focus_range: Some( 58..67, ), + name: "test_foo1", + kind: FN_DEF, container_name: None, description: None, docs: None, diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 18d660f427..326977b626 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -341,10 +341,10 @@ pub(crate) fn handle_workspace_symbol( fn exec_query(snap: &GlobalStateSnapshot, query: Query) -> Result> { let mut res = Vec::new(); for nav in snap.analysis.symbol_search(query)? { - let container_name = nav.container_name().map(|v| v.to_string()); + let container_name = nav.container_name.as_ref().map(|v| v.to_string()); let info = SymbolInformation { - name: nav.name().to_string(), - kind: to_proto::symbol_kind(nav.kind()), + name: nav.name.to_string(), + kind: to_proto::symbol_kind(nav.kind), location: to_proto::location_from_nav(snap, nav)?, container_name, deprecated: None, @@ -434,7 +434,7 @@ pub(crate) fn handle_runnables( let mut res = Vec::new(); for runnable in snap.analysis.runnables(file_id)? { if let Some(offset) = offset { - if !runnable.nav.full_range().contains_inclusive(offset) { + if !runnable.nav.full_range.contains_inclusive(offset) { continue; } } @@ -874,7 +874,7 @@ pub(crate) fn handle_code_lens( } let action = runnable.action(); - let range = to_proto::range(&line_index, runnable.nav.range()); + let range = to_proto::range(&line_index, runnable.nav.focus_or_full_range()); let r = to_proto::runnable(&snap, file_id, runnable)?; if snap.config.lens.run { let lens = CodeLens { @@ -1063,7 +1063,7 @@ pub(crate) fn handle_call_hierarchy_prepare( let RangeInfo { range: _, info: navs } = nav_info; let res = navs .into_iter() - .filter(|it| it.kind() == SyntaxKind::FN_DEF) + .filter(|it| it.kind == SyntaxKind::FN_DEF) .map(|it| to_proto::call_hierarchy_item(&snap, it)) .collect::>>()?; @@ -1089,7 +1089,7 @@ pub(crate) fn handle_call_hierarchy_incoming( let mut res = vec![]; for call_item in call_items.into_iter() { - let file_id = call_item.target.file_id(); + let file_id = call_item.target.file_id; let line_index = snap.analysis.file_line_index(file_id)?; let item = to_proto::call_hierarchy_item(&snap, call_item.target)?; res.push(CallHierarchyIncomingCall { @@ -1124,7 +1124,7 @@ pub(crate) fn handle_call_hierarchy_outgoing( let mut res = vec![]; for call_item in call_items.into_iter() { - let file_id = call_item.target.file_id(); + let file_id = call_item.target.file_id; let line_index = snap.analysis.file_line_index(file_id)?; let item = to_proto::call_hierarchy_item(&snap, call_item.target)?; res.push(CallHierarchyOutgoingCall { @@ -1220,13 +1220,13 @@ fn goto_location_command(snap: &GlobalStateSnapshot, nav: &NavigationTarget) -> let link = to_proto::location_link(snap, None, nav.clone()).ok()?; to_value(link).ok()? } else { - let range = FileRange { file_id: nav.file_id(), range: nav.range() }; + let range = FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }; let location = to_proto::location(snap, range).ok()?; to_value(location).ok()? }; Some(Command { - title: nav.name().to_string(), + title: nav.name.to_string(), command: "rust-analyzer.gotoLocation".into(), arguments: Some(vec![value]), }) diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 7fcb43a4f7..783012c1a2 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -497,9 +497,9 @@ pub(crate) fn location_from_nav( snap: &GlobalStateSnapshot, nav: NavigationTarget, ) -> Result { - let url = url(snap, nav.file_id()); - let line_index = snap.analysis.file_line_index(nav.file_id())?; - let range = range(&line_index, nav.full_range()); + let url = url(snap, nav.file_id); + let line_index = snap.analysis.file_line_index(nav.file_id)?; + let range = range(&line_index, nav.full_range); let loc = lsp_types::Location::new(url, range); Ok(loc) } @@ -531,12 +531,12 @@ fn location_info( snap: &GlobalStateSnapshot, target: NavigationTarget, ) -> Result<(lsp_types::Url, lsp_types::Range, lsp_types::Range)> { - let line_index = snap.analysis.file_line_index(target.file_id())?; + let line_index = snap.analysis.file_line_index(target.file_id)?; - let target_uri = url(snap, target.file_id()); - let target_range = range(&line_index, target.full_range()); + let target_uri = url(snap, target.file_id); + let target_range = range(&line_index, target.full_range); let target_selection_range = - target.focus_range().map(|it| range(&line_index, it)).unwrap_or(target_range); + target.focus_range.map(|it| range(&line_index, it)).unwrap_or(target_range); Ok((target_uri, target_range, target_selection_range)) } @@ -555,13 +555,7 @@ pub(crate) fn goto_definition_response( let locations = targets .into_iter() .map(|nav| { - location( - snap, - FileRange { - file_id: nav.file_id(), - range: nav.focus_range().unwrap_or(nav.range()), - }, - ) + location(snap, FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }) }) .collect::>>()?; Ok(locations.into()) @@ -666,9 +660,9 @@ pub(crate) fn call_hierarchy_item( snap: &GlobalStateSnapshot, target: NavigationTarget, ) -> Result { - let name = target.name().to_string(); - let detail = target.description().map(|it| it.to_string()); - let kind = symbol_kind(target.kind()); + let name = target.name.to_string(); + let detail = target.description.clone(); + let kind = symbol_kind(target.kind); let (uri, range, selection_range) = location_info(snap, target)?; Ok(lsp_types::CallHierarchyItem { name, kind, tags: None, detail, uri, range, selection_range }) }