diff options
Diffstat (limited to 'support/texlab/crates/definition/src')
-rw-r--r-- | support/texlab/crates/definition/src/include.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/support/texlab/crates/definition/src/include.rs b/support/texlab/crates/definition/src/include.rs index bc9311ba01..c9a5a69899 100644 --- a/support/texlab/crates/definition/src/include.rs +++ b/support/texlab/crates/definition/src/include.rs @@ -1,3 +1,4 @@ +use base_db::deps; use rowan::TextRange; use crate::DefinitionContext; @@ -7,18 +8,22 @@ use super::DefinitionResult; pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> { let feature = &context.params.feature; let start = feature.document; - let parents = feature.workspace.parents(start); + let parents = deps::parents(feature.workspace, start); let results = parents .into_iter() .chain(std::iter::once(start)) - .flat_map(|parent| base_db::graph::Graph::new(feature.workspace, parent).edges) - .filter(|edge| edge.source == start) + .flat_map(|parent| &feature.workspace.graphs()[&parent.uri].edges) + .filter(|edge| edge.source == start.uri) .flat_map(|edge| { - let origin_selection_range = edge.weight?.link.path.range; + let deps::EdgeData::DirectLink(data) = &edge.data else { + return None; + }; + + let origin_selection_range = data.link.path.range; if origin_selection_range.contains_inclusive(context.params.offset) { Some(DefinitionResult { origin_selection_range, - target: edge.target, + target: feature.workspace.lookup(&edge.target).unwrap(), target_range: TextRange::default(), target_selection_range: TextRange::default(), }) |