From 56bb366f7e417c700a1fd00c6f92910392219621 Mon Sep 17 00:00:00 2001 From: zetashift Date: Wed, 20 Nov 2024 23:18:18 +0100 Subject: [PATCH] Update Unison grammar and queries (#12039) --- book/src/generated/lang-support.md | 2 +- languages.toml | 2 +- runtime/queries/unison/highlights.scm | 81 ++++++++++++++++++-------- runtime/queries/unison/indents.scm | 5 -- runtime/queries/unison/textobjects.scm | 15 +++++ 5 files changed, 74 insertions(+), 31 deletions(-) create mode 100644 runtime/queries/unison/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 9308bec88..2a01ec376 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 27047aea3..025ccfa00 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 711779295..4c8f0c234 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 6cb15517c..9ebe26ced 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 000000000..02a908368 --- /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