Skip to content

Commit

Permalink
fix: Go to definition in nested lists (#42)
Browse files Browse the repository at this point in the history
  • Loading branch information
gimalay authored Feb 9, 2025
1 parent e5b16d2 commit 6dfa7a4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 9 deletions.
27 changes: 27 additions & 0 deletions crates/iwes/tests/go_to_definition_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,33 @@ fn definition_in_list() {
);
}

#[test]
fn definition_in_nested_list() {
let fixture = Fixture::with(indoc! {"
# test
- list
- item
- [test](link)
"});

fixture.go_to_definition(
GotoDefinitionParams {
text_document_position_params: TextDocumentPositionParams {
text_document: TextDocumentIdentifier { uri: uri(1) },
position: Position::new(4, 8),
},
work_done_progress_params: Default::default(),
partial_result_params: Default::default(),
},
GotoDefinitionResponse::Scalar(Location::new(
Url::parse("file:///basepath/link.md").unwrap(),
Range::default(),
)),
);
}

#[test]
fn definition_with_md_extension() {
let fixture = Fixture::with_options(
Expand Down
13 changes: 4 additions & 9 deletions crates/liwe/src/model/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,10 @@ impl DocumentBlock {
}

fn block_at_positon(&self, position: Position) -> Option<DocumentBlock> {
if self.line_range().contains(&position.line) && self.child_blocks().is_empty() {
return Some(self.clone());
}
for child in self.child_blocks() {
if child.line_range().contains(&position.line) {
return child.block_at_positon(position);
}
}
None
self.child_blocks()
.iter()
.find_map(|child| child.block_at_positon(position))
.or(Some(self.clone()).filter(|block| block.line_range().contains(&position.line)))
}

pub fn child_inlines(&self) -> Vec<DocumentInline> {
Expand Down

0 comments on commit 6dfa7a4

Please sign in to comment.