diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 22689c9c6405..64e3042ba5c5 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -155,6 +155,7 @@ | twig | ✓ | | | | | typescript | ✓ | ✓ | ✓ | `typescript-language-server` | | ungrammar | ✓ | | | | +| unison | ✓ | | | | | uxntal | ✓ | | | | | v | ✓ | ✓ | ✓ | `v-analyzer` | | vala | ✓ | | | `vala-language-server` | diff --git a/languages.toml b/languages.toml index 967bbea72220..5eca6f9273c6 100644 --- a/languages.toml +++ b/languages.toml @@ -2713,3 +2713,26 @@ injection-regex = "wren" file-types = ["wren"] roots = [] indent = { tab-width = 2, unit = " "} + +[[language]] +name = "unison" +scope = "source.unison" +injection-regex = "unison" +file-types = ["u"] +shebangs = [] +roots = [] +auto-format = false +comment-token = "--" +indent = { tab-width = 4, unit = " " } + +[language.auto-pairs] +'(' = ')' +'{' = '}' +'[' = ']' +'"' = '"' +'`' = '`' + +[[grammar]] +name = "unison" +source = { git = "https://github.com/kylegoetz/tree-sitter-unison", rev = "98c4e8bc5c9f5989814a720457cf36963cf4043d" } + diff --git a/runtime/queries/unison/highlights.scm b/runtime/queries/unison/highlights.scm new file mode 100644 index 000000000000..8ec2b6ff2b1e --- /dev/null +++ b/runtime/queries/unison/highlights.scm @@ -0,0 +1,72 @@ +;; Primitives +(comment) @comment +(nat) @constant.numeric +(unit) @constant.builtin +(literal_char) @constant.character +(literal_text) @string +(literal_boolean) @constant.builtin.boolean + +;; Keywords +[ + (kw_forall) + (unique_kw) + (type_kw) + (kw_equals) + (do) +] @keyword + +(kw_let) @keyword.function +(type_kw) @keyword.storage.type +(unique) @keyword.storage.modifier +("use") @keyword.control.import + + +[ + (type_constructor) +] @constructor + +[ + (operator) + (pipe) + (arrow_symbol) + (">") + (or) + (bang) +] @operator + +[ + "if" + "else" + "then" + (match) + (with) + (cases) +] @keyword.control.conditional + +(blank_pattern) @variable.builtin + +;; Types +(record_field name: (wordy_id) @variable.other.member type: (wordy_id) @type) +[ + (type_name) + (type_signature) + (effect) +] @type + +(term_definition) @variable + +;; Punctuation +[ + (type_signature_colon) + ":" +] @punctuation.delimiter + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + diff --git a/runtime/queries/unison/injections.scm b/runtime/queries/unison/injections.scm new file mode 100644 index 000000000000..4f0cc44c9df0 --- /dev/null +++ b/runtime/queries/unison/injections.scm @@ -0,0 +1 @@ +((doc_block) @injection.content (#set! injection.language "markdown"))