summaryrefslogtreecommitdiff
path: root/crates/typst-ide/src/complete.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/typst-ide/src/complete.rs')
-rw-r--r--crates/typst-ide/src/complete.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/crates/typst-ide/src/complete.rs b/crates/typst-ide/src/complete.rs
index 4a36045a..a042b164 100644
--- a/crates/typst-ide/src/complete.rs
+++ b/crates/typst-ide/src/complete.rs
@@ -298,13 +298,20 @@ fn complete_math(ctx: &mut CompletionContext) -> bool {
return false;
}
- // Start of an interpolated identifier: "#|".
+ // Start of an interpolated identifier: "$#|$".
if ctx.leaf.kind() == SyntaxKind::Hash {
ctx.from = ctx.cursor;
code_completions(ctx, true);
return true;
}
+ // Behind existing interpolated identifier: "$#pa|$".
+ if ctx.leaf.kind() == SyntaxKind::Ident {
+ ctx.from = ctx.leaf.offset();
+ code_completions(ctx, true);
+ return true;
+ }
+
// Behind existing atom or identifier: "$a|$" or "$abc|$".
if matches!(
ctx.leaf.kind(),
@@ -1666,6 +1673,13 @@ mod tests {
test("#{() .a}", -2).must_include(["at", "any", "all"]);
}
+ /// Test that autocomplete in math uses the correct global scope.
+ #[test]
+ fn test_autocomplete_math_scope() {
+ test("$#col$", -2).must_include(["colbreak"]).must_exclude(["colon"]);
+ test("$col$", -2).must_include(["colon"]).must_exclude(["colbreak"]);
+ }
+
/// Test that the `before_window` doesn't slice into invalid byte
/// boundaries.
#[test]