fix(lsp): resolve links from anywhere in the link, including the title
goto-definition (and references/hover) reported "No locations found" when the cursor was on the *description* of a piped link — `[[target|Title]]` or `[desc](url)` — and only worked over the target/location part. find_in_inlines descended into the link's description and returned its inner Text node, so the nav handlers saw a Text (not a WikiLink/ ExternalLink) and bailed. A link is an atomic unit for navigation: stop descending into descriptions so a hit anywhere in the link returns the link node itself. Adds a navigation regression test for cursor-on-title. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -201,6 +201,18 @@ fn find_inline_at_returns_wikilink_under_cursor() {
|
||||
assert!(matches!(node, InlineNode::WikiLink(_)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn find_inline_at_returns_wikilink_when_cursor_on_description() {
|
||||
// Regression: pressing <CR> on the *title* part of a piped link used to
|
||||
// descend into the description's Text node, so goto-definition saw a Text
|
||||
// (not a WikiLink) and reported "No locations found".
|
||||
let src = "see [[Other|My Title]] now\n";
|
||||
let doc = parse(src);
|
||||
// Byte col 16 is inside "Title" (the description), past the '|' at 11.
|
||||
let node = find_inline_at(&doc, 0, 16).expect("wikilink at cursor");
|
||||
assert!(matches!(node, InlineNode::WikiLink(_)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn find_inline_at_returns_none_for_plain_text() {
|
||||
let src = "just text\n";
|
||||
|
||||
Reference in New Issue
Block a user