From b5ebc57882c23c45180f3322c91bc820e5fed4f1 Mon Sep 17 00:00:00 2001 From: Antoine Saez Dumas Date: Sun, 8 Mar 2026 11:07:13 +0100 Subject: [PATCH 1/3] feat(typst): add textobjects --- BUILTIN_TEXTOBJECTS.md | 2 + queries/typst/textobjects.scm | 114 ++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 queries/typst/textobjects.scm diff --git a/BUILTIN_TEXTOBJECTS.md b/BUILTIN_TEXTOBJECTS.md index 10777ca5..f075d4e5 100644 --- a/BUILTIN_TEXTOBJECTS.md +++ b/BUILTIN_TEXTOBJECTS.md @@ -175,6 +175,8 @@ typescript🟩 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ 🟩 +typst🟩 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 ⬜ ⬜ ⬜ 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ ⬜ + v🟩 🟩 ⬜ 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 ⬜ 🟩 vim🟩 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 ⬜ 🟩 ⬜ ⬜ ⬜ 🟩 🟩 🟩 ⬜ ⬜ 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 🟩 ⬜ 🟩 diff --git a/queries/typst/textobjects.scm b/queries/typst/textobjects.scm new file mode 100644 index 00000000..74259696 --- /dev/null +++ b/queries/typst/textobjects.scm @@ -0,0 +1,114 @@ +; anonymous functions (it => ...) +(lambda + value: (block + . + "{" + _+ @function.inner + "}")) @function.outer + +(lambda + value: (_ + . + "{"? + _+ @function.inner + "}"?)) @function.outer + +; named functions (#let fn(x) = { ... }) +(let + pattern: (call) + value: (block + . + "{" + _+ @function.inner + "}")) @function.outer + +(let + pattern: (call) + value: (_ + . + "{"? + _+ @function.inner + "}"?)) @function.outer + +; conditionals +(while + condition: (_) @conditional.inner) + +(branch + condition: (_) @conditional.inner) @conditional.outer + +; loops +(for + (block) @loop.inner) @loop.outer + +(while + (block) @loop.inner) @loop.outer + +; calls & parameters +(call + (group + "," @parameter.outer + . + (_) @parameter.inner @parameter.outer) @call.inner) @call.outer + +(call + (group + . + (_) @parameter.inner @parameter.outer + . + ","? @parameter.outer) @call.inner) @call.outer + +; let it => { ... } +(lambda + pattern: (ident) @parameter.inner @parameter.outer) + +; let (x, y) => { ... } +(lambda + pattern: (group + "," @parameter.outer + . + (_) @parameter.inner @parameter.outer)) + +(lambda + pattern: (group + . + (_) @parameter.inner @parameter.outer + . + ","? @parameter.outer)) + +; blocks +(_ + (block + . + "{" + _+ @block.inner + "}")) @block.outer + +; regexes +((call + item: (ident) @_regex + (group + (_) @regex.inner)) @regex.outer + (#eq? @_regex "regex")) + +; assignments +(assign) @assignment.inner @assignment.outer + +(let + . + "let" + _+ @assignment.inner) @assignment.outer + +(_ + pattern: (_) @assignment.lhs + value: (_) @assignment.rhs) + +; others +(comment) @comment.outer + +(return) @return.outer + +(return + (_) @return.inner) + +(number) @number.inner From 663fad87dd788c739371eeaf9fc900f8e272c4bf Mon Sep 17 00:00:00 2001 From: Antoine Saez Dumas Date: Sun, 8 Mar 2026 18:28:48 +0100 Subject: [PATCH 2/3] fix(typst): don't capture braces in @loop.inner --- queries/typst/textobjects.scm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/queries/typst/textobjects.scm b/queries/typst/textobjects.scm index 74259696..1a70db38 100644 --- a/queries/typst/textobjects.scm +++ b/queries/typst/textobjects.scm @@ -39,10 +39,18 @@ ; loops (for - (block) @loop.inner) @loop.outer + (block + . + "{" + _+ @loop.inner + "}")) @loop.outer (while - (block) @loop.inner) @loop.outer + (block + . + "{" + _+ @loop.inner + "}")) @loop.outer ; calls & parameters (call From 9b7882f96d34d0f95fdf958119f9dca53341ec0d Mon Sep 17 00:00:00 2001 From: Antoine Saez Dumas Date: Mon, 9 Mar 2026 18:19:38 +0100 Subject: [PATCH 3/3] fix(typst): don't capture braces in @function.inner --- queries/typst/textobjects.scm | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/queries/typst/textobjects.scm b/queries/typst/textobjects.scm index 1a70db38..539ff8bb 100644 --- a/queries/typst/textobjects.scm +++ b/queries/typst/textobjects.scm @@ -7,11 +7,8 @@ "}")) @function.outer (lambda - value: (_ - . - "{"? - _+ @function.inner - "}"?)) @function.outer + value: (_) @function.inner + (#match? @function.inner "^[^{].*[^}]$")) @function.outer ; named functions (#let fn(x) = { ... }) (let @@ -24,11 +21,8 @@ (let pattern: (call) - value: (_ - . - "{"? - _+ @function.inner - "}"?)) @function.outer + value: (_) @function.inner + (#match? @function.inner "^[^{].*[^}]$")) @function.outer ; conditionals (while