Unnamed repository; edit this file 'description' to name the repository.
Add language support for Quint (#11898)
Co-authored-by: Michael Davis <[email protected]>
Niklas Gruhn 2024-11-21
parent 32ff0fc · commit b8313da
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/quint/highlights.scm94
3 files changed, 109 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 20f861a5..28f25ba3 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -169,6 +169,7 @@
| purescript | ✓ | ✓ | | `purescript-language-server` |
| python | ✓ | ✓ | ✓ | `ruff`, `jedi-language-server`, `pylsp` |
| qml | ✓ | | ✓ | `qmlls` |
+| quint | ✓ | | | `quint-language-server` |
| r | ✓ | | | `R` |
| racket | ✓ | | ✓ | `racket` |
| regex | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index 84171af3..ea6e6893 100644
--- a/languages.toml
+++ b/languages.toml
@@ -84,6 +84,7 @@ pyright = { command = "pyright-langserver", args = ["--stdio"], config = {} }
basedpyright = { command = "basedpyright-langserver", args = ["--stdio"], config = {} }
pylyzer = { command = "pylyzer", args = ["--server"] }
qmlls = { command = "qmlls" }
+quint-language-server = { command = "quint-language-server", args = ["--stdio"] }
r = { command = "R", args = ["--no-echo", "-e", "languageserver::run()"] }
racket = { command = "racket", args = ["-l", "racket-langserver"] }
regols = { command = "regols" }
@@ -3894,6 +3895,19 @@ name = "cylc"
source = { git = "https://github.com/elliotfontaine/tree-sitter-cylc", rev = "30dd40d9bf23912e4aefa93eeb4c7090bda3d0f6" }
[[language]]
+name = "quint"
+scope = "source.quint"
+file-types = ["qnt"]
+language-servers = ["quint-language-server"]
+comment-token = "//"
+block-comment-tokens = { start = "/*", end = "*/" }
+indent = { tab-width = 2, unit = " " }
+
+[[grammar]]
+name = "quint"
+source = { git = "https://github.com/gruhn/tree-sitter-quint", rev = "eebbd01edfeff6404778c92efe5554e42e506a18" }
+
+[[language]]
name = "spade"
scope = "source.spade"
roots = ["swim.toml"]
diff --git a/runtime/queries/quint/highlights.scm b/runtime/queries/quint/highlights.scm
new file mode 100644
index 00000000..edb56fba
--- /dev/null
+++ b/runtime/queries/quint/highlights.scm
@@ -0,0 +1,94 @@
+[
+ "module"
+ "type"
+ "assume"
+ "const"
+ "var"
+ "val"
+ "nondet"
+ "def"
+ "pure"
+ "action"
+ "temporal"
+ "run"
+] @keyword
+
+(match_expr "match" @keyword.control.conditional)
+
+(if_else_condition
+ "if" @keyword.control.conditional
+ "else" @keyword.control.conditional)
+
+(import "import" @keyword.control.import)
+(import "as" @keyword.control.import)
+(import "from" @keyword.control.import)
+(export "export" @keyword.control.import)
+(export "as" @keyword.control.import)
+
+[
+ "true"
+ "false"
+ "Int"
+ "Nat"
+ "Bool"
+] @constant.builtin
+
+[
+ ";"
+ "."
+ ","
+] @punctuation.delimiter
+
+[
+ "-"
+ "+"
+ "*"
+ "/"
+ "%"
+ "<"
+ "<="
+ "="
+ "=="
+ "!="
+ "=>"
+ ">"
+ ">="
+ "^"
+ "->"
+] @operator
+
+(infix_and "and" @operator)
+(infix_or "or" @operator)
+(infix_iff "iff" @operator)
+(infix_implies "implies" @operator)
+
+(braced_and "and" @keyword)
+(braced_or "or" @keyword)
+(braced_all "all" @keyword)
+(braced_any "any" @keyword)
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{"
+ "}"
+] @punctuation.bracket
+
+(polymorphic_type
+ (type) @type.parameter)
+
+(variant_constructor) @type.enum.variant
+
+(type) @type
+(int_literal) @constant.numeric.integer
+(comment) @comment
+(string) @string
+
+(operator_application
+ operator: (qualified_identifier) @function)
+
+(operator_definition
+ name: (qualified_identifier) @function
+ arguments: (typed_argument_list))