From cb3924278372f8e065487b0785489ee6ad3cf660 Mon Sep 17 00:00:00 2001 From: NomisIV <47303199+NomisIV@users.noreply.github.com> Date: Sun, 17 Sep 2023 18:50:58 +0200 Subject: [PATCH] Use Maskhjarnas tree-sitter-purescript (#8306) --- book/src/generated/lang-support.md | 2 +- languages.toml | 5 +- runtime/queries/purescript/highlights.scm | 119 ++++++++++++++++++++- runtime/queries/purescript/injections.scm | 3 +- runtime/queries/purescript/locals.scm | 5 +- runtime/queries/purescript/textobjects.scm | 13 +++ 6 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 runtime/queries/purescript/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 9d036b73c..f65f268d0 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -122,7 +122,7 @@ | prolog | | | | `swipl` | | protobuf | ✓ | | ✓ | `bufls`, `pb` | | prql | ✓ | | | | -| purescript | ✓ | | | `purescript-language-server` | +| purescript | ✓ | ✓ | | `purescript-language-server` | | python | ✓ | ✓ | ✓ | `pylsp` | | qml | ✓ | | ✓ | `qmlls` | | r | ✓ | | | `R` | diff --git a/languages.toml b/languages.toml index 387aee6af..b0fc6344d 100644 --- a/languages.toml +++ b/languages.toml @@ -1003,7 +1003,10 @@ language-servers = [ "purescript-language-server" ] indent = { tab-width = 2, unit = " " } auto-format = true formatter = { command = "purs-tidy", args = ["format"] } -grammar = "haskell" + +[[grammar]] +name = "purescript" +source = { git = "https://github.com/maskhjarna/tree-sitter-purescript", rev = "5f5a030826849b7be17596d372967f60051b42bd" } [[language]] name = "zig" diff --git a/runtime/queries/purescript/highlights.scm b/runtime/queries/purescript/highlights.scm index ef073eb25..bbfdf16e7 100644 --- a/runtime/queries/purescript/highlights.scm +++ b/runtime/queries/purescript/highlights.scm @@ -1 +1,118 @@ -; inherits: haskell +; ---------------------------------------------------------------------------- +; Literals and comments + + (integer) @constant.numeric.integer + (exp_negation) @constant.numeric.integer + (exp_literal (float)) @constant.numeric.float + (char) @constant.character + (string) @string + + (con_unit) @constant.builtin ; unit, as in () + + (comment) @comment + + +; ---------------------------------------------------------------------------- +; Punctuation + + [ + "(" + ")" + "{" + "}" + "[" + "]" + ] @punctuation.bracket + + [ + (comma) + ";" + ] @punctuation.delimiter + + +; ---------------------------------------------------------------------------- +; Keywords, operators, includes + + [ + "if" + "then" + "else" + "case" + "of" + ] @keyword.control.conditional + + [ + "import" + "module" + ] @keyword.control.import + + [ + (operator) + (constructor_operator) + (type_operator) + (tycon_arrow) + (qualified_module) ; grabs the `.` (dot), ex: import System.IO + (all_names) + "=" + "|" + "::" + "=>" + "->" + "<-" + "\\" + "`" + "@" + ] @operator + + (qualified_module (module) @constructor) + (module) @namespace + (qualified_type (module) @namespace) + (qualified_variable (module) @namespace) + (import (module) @namespace) + + [ + (where) + "let" + "in" + "class" + "instance" + "derive" + "foreign" + "data" + "newtype" + "type" + "as" + "do" + "ado" + "forall" + "∀" + "infix" + "infixl" + "infixr" + ] @keyword + + +; ---------------------------------------------------------------------------- +; Functions and variables + + (signature name: (variable) @type) + (function name: (variable) @function) + + ; true or false +((variable) @constant.builtin.boolean + (#match? @constant.builtin.boolean "^(true|false)$")) + + (variable) @variable + + (exp_infix (variable) @operator) ; consider infix functions as operators + + ("@" @namespace) ; "as" pattern operator, e.g. x@Constructor + + +; ---------------------------------------------------------------------------- +; Types + + (type) @type + + (constructor) @constructor + diff --git a/runtime/queries/purescript/injections.scm b/runtime/queries/purescript/injections.scm index ef073eb25..321c90add 100644 --- a/runtime/queries/purescript/injections.scm +++ b/runtime/queries/purescript/injections.scm @@ -1 +1,2 @@ -; inherits: haskell +((comment) @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/purescript/locals.scm b/runtime/queries/purescript/locals.scm index ef073eb25..ad67fe43f 100644 --- a/runtime/queries/purescript/locals.scm +++ b/runtime/queries/purescript/locals.scm @@ -1 +1,4 @@ -; inherits: haskell +(signature name: (variable)) @local.definition +(function name: (variable)) @local.definition +(pat_name (variable)) @local.definition +(exp_name (variable)) @local.reference diff --git a/runtime/queries/purescript/textobjects.scm b/runtime/queries/purescript/textobjects.scm new file mode 100644 index 000000000..5f8eaff73 --- /dev/null +++ b/runtime/queries/purescript/textobjects.scm @@ -0,0 +1,13 @@ +(comment) @comment.inside + +[ + (data) + (type) + (newtype) +] @class.around + +((signature)? (function rhs:(_) @function.inside)) @function.around +(exp_lambda) @function.around + +(data (type_variable) @parameter.inside) +(patterns (_) @parameter.inside)