use LocalPtr in navigation target

This commit is contained in:
Aleksey Kladov 2019-01-02 23:35:51 +03:00
parent 267a89bca2
commit 03ea6bcbff
4 changed files with 13 additions and 7 deletions

View file

@ -121,6 +121,7 @@ impl db::RootDatabase {
name: decl_name.text(),
range: decl_name.syntax().range(),
kind: MODULE,
ptr: None,
}])
}
/// Returns `Vec` for the same reason as `parent_module`
@ -158,6 +159,7 @@ impl db::RootDatabase {
name: entry.name().to_string().into(),
range: entry.ptr().range(),
kind: NAME,
ptr: None,
});
return Ok(Some(rr));
};
@ -185,6 +187,7 @@ impl db::RootDatabase {
name,
range: TextRange::offset_len(0.into(), 0.into()),
kind: MODULE,
ptr: None,
};
rr.resolves_to.push(symbol);
return Ok(Some(rr));

View file

@ -41,7 +41,7 @@ pub use ra_editor::{
pub use hir::FnSignatureInfo;
pub use ra_db::{
Canceled, Cancelable, FilePosition, FileRange,
Canceled, Cancelable, FilePosition, FileRange, LocalSyntaxPtr,
CrateGraph, CrateId, SourceRootId, FileId, SyntaxDatabase, FilesDatabase
};
@ -225,6 +225,8 @@ pub struct NavigationTarget {
name: SmolStr,
kind: SyntaxKind,
range: TextRange,
// Should be DefId ideally
ptr: Option<LocalSyntaxPtr>,
}
impl NavigationTarget {
@ -234,6 +236,7 @@ impl NavigationTarget {
kind: symbol.ptr.kind(),
file_id,
range: symbol.ptr.range(),
ptr: Some(symbol.ptr.clone()),
}
}
pub fn name(&self) -> &SmolStr {

View file

@ -25,7 +25,7 @@ fn approximate_resolve_works_in_items() {
assert_eq_dbg(
r#"ReferenceResolution {
reference_range: [23; 26),
resolves_to: [NavigationTarget { file_id: FileId(1), symbol: FileSymbol { name: "Foo", node_range: [0; 11), kind: STRUCT_DEF } }]
resolves_to: [NavigationTarget { file_id: FileId(1), name: "Foo", kind: STRUCT_DEF, range: [0; 11), ptr: Some(LocalSyntaxPtr { range: [0; 11), kind: STRUCT_DEF }) }]
}"#,
&symbols,
);
@ -46,7 +46,7 @@ fn test_resolve_module() {
assert_eq_dbg(
r#"ReferenceResolution {
reference_range: [4; 7),
resolves_to: [NavigationTarget { file_id: FileId(2), symbol: FileSymbol { name: "foo", node_range: [0; 0), kind: MODULE } }]
resolves_to: [NavigationTarget { file_id: FileId(2), name: "foo", kind: MODULE, range: [0; 0), ptr: None }]
}"#,
&symbols,
);
@ -64,7 +64,7 @@ fn test_resolve_module() {
assert_eq_dbg(
r#"ReferenceResolution {
reference_range: [4; 7),
resolves_to: [NavigationTarget { file_id: FileId(2), symbol: FileSymbol { name: "foo", node_range: [0; 0), kind: MODULE } }]
resolves_to: [NavigationTarget { file_id: FileId(2), name: "foo", kind: MODULE, range: [0; 0), ptr: None }]
}"#,
&symbols,
);
@ -107,7 +107,7 @@ fn test_resolve_parent_module() {
);
let symbols = analysis.parent_module(pos).unwrap();
assert_eq_dbg(
r#"[NavigationTarget { file_id: FileId(1), symbol: FileSymbol { name: "foo", node_range: [4; 7), kind: MODULE } }]"#,
r#"[NavigationTarget { file_id: FileId(1), name: "foo", kind: MODULE, range: [4; 7), ptr: None }]"#,
&symbols,
);
}
@ -126,7 +126,7 @@ fn test_resolve_parent_module_for_inline() {
);
let symbols = analysis.parent_module(pos).unwrap();
assert_eq_dbg(
r#"[NavigationTarget { file_id: FileId(1), symbol: FileSymbol { name: "bar", node_range: [18; 21), kind: MODULE } }]"#,
r#"[NavigationTarget { file_id: FileId(1), name: "bar", kind: MODULE, range: [18; 21), ptr: None }]"#,
&symbols,
);
}

View file

@ -190,7 +190,7 @@ pub fn handle_workspace_symbol(
let mut res = Vec::new();
for nav in world.analysis().symbol_search(query)? {
let info = SymbolInformation {
name: nav.name().into(),
name: nav.name().to_string(),
kind: nav.kind().conv(),
location: nav.try_conv_with(world)?,
container_name: None,