Unnamed repository; edit this file 'description' to name the repository.
Update Unison grammar and queries (#12039)
zetashift 2024-11-21
parent 06d5b88 · commit 56bb366
-rw-r--r--book/src/generated/lang-support.md2
-rw-r--r--languages.toml2
-rw-r--r--runtime/queries/unison/highlights.scm81
-rw-r--r--runtime/queries/unison/indents.scm5
-rw-r--r--runtime/queries/unison/textobjects.scm15
5 files changed, 74 insertions, 31 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 9308bec8..2a01ec37 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -216,7 +216,7 @@
| typespec | ✓ | ✓ | ✓ | `tsp-server` |
| typst | ✓ | | | `tinymist`, `typst-lsp` |
| ungrammar | ✓ | | | |
-| unison | ✓ | | ✓ | |
+| unison | ✓ | ✓ | ✓ | |
| uxntal | ✓ | | | |
| v | ✓ | ✓ | ✓ | `v-analyzer` |
| vala | ✓ | ✓ | | `vala-language-server` |
diff --git a/languages.toml b/languages.toml
index 27047aea..025ccfa0 100644
--- a/languages.toml
+++ b/languages.toml
@@ -3333,7 +3333,7 @@ indent = { tab-width = 4, unit = " " }
[[grammar]]
name = "unison"
-source = { git = "https://github.com/kylegoetz/tree-sitter-unison", rev = "1f505e2447fa876a87aee47ff3d70b9e141c744f" }
+source = { git = "https://github.com/kylegoetz/tree-sitter-unison", rev = "3c97db76d3cdbd002dfba493620c2d5df2fd6fa9" }
[[language]]
name = "todotxt"
diff --git a/runtime/queries/unison/highlights.scm b/runtime/queries/unison/highlights.scm
index 71177929..4c8f0c23 100644
--- a/runtime/queries/unison/highlights.scm
+++ b/runtime/queries/unison/highlights.scm
@@ -9,32 +9,25 @@
;; Keywords
[
(kw_forall)
- (type_kw)
(kw_equals)
(do)
+ (kw_let)
(ability)
(where)
] @keyword
(kw_let) @keyword.function
-(type_kw) @keyword.storage.type
-(unique) @keyword.storage.modifier
+(type_kw) @keyword.storage.modifier
(structural) @keyword.storage.modifier
("use") @keyword.control.import
-
-
-[
- (type_constructor)
-] @constructor
+(unique) @keyword.storage.modifier
[
(operator)
(pipe)
(arrow_symbol)
- (">")
(or)
(and)
- (bang)
] @operator
[
@@ -48,24 +41,62 @@
(blank_pattern) @variable.builtin
+(pattern) @variable
+
+(use_clause) @keyword.import
+
;; Types
-(record_field name: (wordy_id) @variable.other.member type: (_) @type)
-(type_constructor (type_name (wordy_id) @constructor))
-(ability_declaration type_name: (wordy_id) @type type_arg: (wordy_id) @variable.parameter)
-(effect (wordy_id) @special) ;; NOTE: an effect is just like a type, but in signature we special case it
+(record_field
+ (field_name) @variable.other.member
+ type: (regular_identifier) @type)
+
+(type_name) @type
+
+(type_declaration
+ (regular_identifier) @type.enum.variant)
+
+(ability_name
+ (path)? @namespace
+ (regular_identifier) @type)
-;; Namespaces
-(path) @namespace
-(namespace) @namespace
+(ability_declaration
+ (ability_name) @type
+ (type_argument) @variable.parameter)
-;; Terms
-(type_signature term_name: (path)? @variable term_name: (wordy_id) @variable)
-(type_signature (wordy_id) @type)
-(type_signature (term_type(delayed(wordy_id))) @type)
+(type_constructor) @constructor
-(term_definition param: (wordy_id) @variable.parameter)
+(constructor
+ (constructor_name) @constructor)
-(function_application function_name: (path)? function_name: (wordy_id) @function)
+(constructor
+ type: (regular_identifier) @type)
+
+(effect
+ (regular_identifier) @special) ; NOTE: an effect is a special type
+
+; Namespaces
+(path) @module
+
+(namespace) @module
+
+; Terms
+(type_signature
+ term_name: (path) @module
+ term_name: (regular_identifier) @variable)
+
+(type_signature
+ term_name: (regular_identifier) @variable)
+
+(term_type) @type
+
+(term_definition
+ name: (path) @namespace)
+
+(term_definition
+ name: (regular_identifier) @variable)
+
+(term_definition
+ param: (regular_identifier) @variable.parameter)
;; Punctuation
[
@@ -82,4 +113,6 @@
"]"
] @punctuation.bracket
-(test_watch_expression (wordy_id) @keyword.directive)
+(watch_expression) @keyword.directive
+
+(test_watch_expression) @keyword.directive
diff --git a/runtime/queries/unison/indents.scm b/runtime/queries/unison/indents.scm
index 6cb15517..9ebe26ce 100644
--- a/runtime/queries/unison/indents.scm
+++ b/runtime/queries/unison/indents.scm
@@ -1,11 +1,6 @@
[
(term_definition)
- (type_declaration)
(pattern)
- (tuple_or_parenthesized)
- (literal_list)
- (tuple_pattern)
- (function_application)
(exp_if)
(constructor)
(delay_block)
diff --git a/runtime/queries/unison/textobjects.scm b/runtime/queries/unison/textobjects.scm
new file mode 100644
index 00000000..02a90836
--- /dev/null
+++ b/runtime/queries/unison/textobjects.scm
@@ -0,0 +1,15 @@
+(term_declaration) @function.around
+
+(type_declaration) @class.inside
+(record) @class.inside
+
+(comment) @comment.inside
+(comment)+ @comment.around
+
+(doc_block) @comment.around
+
+(literal_list) @entry.around
+
+(parenthesized_or_tuple_pattern) @entry.around
+
+(pattern) @entry.around