diff options
author | Alexander Brevig | 2023-10-26 23:27:42 +0000 |
---|---|---|
committer | GitHub | 2023-10-26 23:27:42 +0000 |
commit | 290666011971c79e36b5172eea66b315dc52e2c9 (patch) | |
tree | 328e9b8562a8dd916214545a9b89ba1f55cb8670 | |
parent | ef1f4f31b6e0d8338a9f5b8932de9b07ac7bb0a0 (diff) |
Add typst language and lsp (#7474)
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
-rw-r--r-- | book/src/generated/lang-support.md | 1 | ||||
-rw-r--r-- | languages.toml | 22 | ||||
-rw-r--r-- | runtime/queries/typst/highlights.scm | 77 | ||||
-rw-r--r-- | runtime/queries/typst/injections.scm | 6 |
4 files changed, 106 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 6fdc6f11..58bc3d05 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -163,6 +163,7 @@ | tsx | ✓ | ✓ | ✓ | `typescript-language-server` | | twig | ✓ | | | | | typescript | ✓ | ✓ | ✓ | `typescript-language-server` | +| typst | ✓ | | | `typst-lsp` | | ungrammar | ✓ | | | | | unison | ✓ | | | | | uxntal | ✓ | | | | diff --git a/languages.toml b/languages.toml index 77c629e4..a6c9d556 100644 --- a/languages.toml +++ b/languages.toml @@ -88,6 +88,7 @@ wgsl_analyzer = { command = "wgsl_analyzer" } yaml-language-server = { command = "yaml-language-server", args = ["--stdio"] } zls = { command = "zls" } blueprint-compiler = { command = "blueprint-compiler", args = ["lsp"] } +typst-lsp = { command = "typst-lsp" } [language-server.ansible-language-server] command = "ansible-language-server" @@ -2913,6 +2914,27 @@ indent = { tab-width = 2, unit = " " } grammar = "html" [[language]] +name = "typst" +scope = "source.typst" +injection-regex = "typst" +file-types = ["typst", "typ"] +roots = [] +comment-token = "//" +language-servers = ["typst-lsp"] +indent = { tab-width = 2, unit = " " } + +[language.auto-pairs] +'(' = ')' +'{' = '}' +'[' = ']' +'$' = '$' +'"' = '"' + +[[grammar]] +name = "typst" +source = { git = "https://github.com/uben0/tree-sitter-typst", rev = "e35aa22395fdde82bbc4b5700c324ce346dfc9e5" } + +[[language]] name = "nunjucks" scope = "text.html.nunjucks" injection-regex = "nunjucks" diff --git a/runtime/queries/typst/highlights.scm b/runtime/queries/typst/highlights.scm new file mode 100644 index 00000000..b422e05b --- /dev/null +++ b/runtime/queries/typst/highlights.scm @@ -0,0 +1,77 @@ +(call + item: (ident) @function) +(call + item: (field field: (ident) @function.method)) +(tagged field: (ident) @tag) +(field field: (ident) @tag) +(comment) @comment + +; CONTROL +(let "let" @keyword.storage.type) +(branch ["if" "else"] @keyword.control.conditional) +(while "while" @keyword.control.repeat) +(for ["for" "in"] @keyword.control.repeat) +(import "import" @keyword.control.import) +(as "as" @keyword.operator) +(include "include" @keyword.control.import) +(show "show" @keyword.control) +(set "set" @keyword.control) +(return "return" @keyword.control) +(flow ["break" "continue"] @keyword.control) + +; OPERATOR +(in ["in" "not"] @keyword.operator) +(and "and" @keyword.operator) +(or "or" @keyword.operator) +(not "not" @keyword.operator) +(sign ["+" "-"] @operator) +(add "+" @operator) +(sub "-" @operator) +(mul "*" @operator) +(div "/" @operator) +(cmp ["==" "<=" ">=" "!=" "<" ">"] @operator) +(fraction "/" @operator) +(fac "!" @operator) +(attach ["^" "_"] @operator) +(wildcard) @operator + +; VALUE +(raw_blck "```" @operator) @markup.raw.block +(raw_span "`" @operator) @markup.raw.block +(raw_blck lang: (ident) @tag) +(label) @tag +(ref) @tag +(number) @constant.numeric +(string) @string +(content ["[" "]"] @operator) +(bool) @constant.builtin.boolean +(builtin) @constant.builtin +(none) @constant.builtin +(auto) @constant.builtin +(ident) @variable +(call + item: (builtin) @function.builtin) + +; MARKUP +(item "-" @markup.list) +(term ["/" ":"] @markup.list) +(heading ["=" "==" "===" "====" "====="] @markup.heading.marker) @markup.heading +(url) @tag +(emph) @markup.italic +(strong) @markup.bold +(symbol) @constant.character +(shorthand) @constant.builtin +(quote) @markup.quote +(align) @operator +(letter) @constant.character +(linebreak) @constant.builtin + +(math "$" @operator) +"#" @operator +"end" @operator + +(escape) @constant.character.escape +["(" ")" "{" "}"] @punctuation.bracket +["," ";" ".." ":" "sep"] @punctuation.delimiter +"assign" @punctuation +(field "." @punctuation) diff --git a/runtime/queries/typst/injections.scm b/runtime/queries/typst/injections.scm new file mode 100644 index 00000000..8039b4ca --- /dev/null +++ b/runtime/queries/typst/injections.scm @@ -0,0 +1,6 @@ +(raw_blck + (blob) @injection.shebang @injection.content) + +(raw_blck + lang: (ident) @injection.language + (blob) @injection.content)
\ No newline at end of file |