From f364b3c3239261e98da4c28c53463b751addfee7 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 20 Jun 2025 14:32:04 +0200 Subject: [PATCH] Fix param autocompletion false positive (#6475) --- crates/typst-ide/src/complete.rs | 15 ++++++++++----- crates/typst-ide/src/tests.rs | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/crates/typst-ide/src/complete.rs b/crates/typst-ide/src/complete.rs index c98320679..47727743f 100644 --- a/crates/typst-ide/src/complete.rs +++ b/crates/typst-ide/src/complete.rs @@ -701,7 +701,10 @@ fn complete_params(ctx: &mut CompletionContext) -> bool { let mut deciding = ctx.leaf.clone(); while !matches!( deciding.kind(), - SyntaxKind::LeftParen | SyntaxKind::Comma | SyntaxKind::Colon + SyntaxKind::LeftParen + | SyntaxKind::RightParen + | SyntaxKind::Comma + | SyntaxKind::Colon ) { let Some(prev) = deciding.prev_leaf() else { break }; deciding = prev; @@ -1734,6 +1737,8 @@ mod tests { test("#numbering(\"foo\", 1, )", -2) .must_include(["integer"]) .must_exclude(["string"]); + // After argument list no completions. + test("#numbering()", -1).must_exclude(["string"]); } /// Test that autocompletion for values of known type picks up nested @@ -1829,17 +1834,17 @@ mod tests { #[test] fn test_autocomplete_fonts() { - test("#text(font:)", -1) + test("#text(font:)", -2) .must_include(["\"Libertinus Serif\"", "\"New Computer Modern Math\""]); - test("#show link: set text(font: )", -1) + test("#show link: set text(font: )", -2) .must_include(["\"Libertinus Serif\"", "\"New Computer Modern Math\""]); - test("#show math.equation: set text(font: )", -1) + test("#show math.equation: set text(font: )", -2) .must_include(["\"New Computer Modern Math\""]) .must_exclude(["\"Libertinus Serif\""]); - test("#show math.equation: it => { set text(font: )\nit }", -6) + test("#show math.equation: it => { set text(font: )\nit }", -7) .must_include(["\"New Computer Modern Math\""]) .must_exclude(["\"Libertinus Serif\""]); } diff --git a/crates/typst-ide/src/tests.rs b/crates/typst-ide/src/tests.rs index 1176e4601..5edc05f17 100644 --- a/crates/typst-ide/src/tests.rs +++ b/crates/typst-ide/src/tests.rs @@ -202,7 +202,8 @@ impl WorldLike for &str { } } -/// Specifies a position in a file for a test. +/// Specifies a position in a file for a test. Negative numbers index from the +/// back. `-1` is at the very back. pub trait FilePos { fn resolve(self, world: &TestWorld) -> (Source, usize); }