From 784d716f05777b4ecd5135ba3e6444b9b1af11db Mon Sep 17 00:00:00 2001 From: NomisIV Date: Thu, 17 Aug 2023 20:47:20 +0200 Subject: [PATCH 1/4] Use Maskhjarnas tree-sitter-purescript --- languages.toml | 5 +- runtime/queries/purescript/highlights.scm | 122 ++++++++++++++++++++- runtime/queries/purescript/injections.scm | 3 +- runtime/queries/purescript/locals.scm | 5 +- runtime/queries/purescript/textobjects.scm | 13 +++ 5 files changed, 144 insertions(+), 4 deletions(-) create mode 100644 runtime/queries/purescript/textobjects.scm diff --git a/languages.toml b/languages.toml index d3cb402569e5..9070027e31a4 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 = "a9af5ded2ccb3bd83b99724762cfde600fcf867c" } [[language]] name = "zig" diff --git a/runtime/queries/purescript/highlights.scm b/runtime/queries/purescript/highlights.scm index ef073eb25523..b2311ec9b576 100644 --- a/runtime/queries/purescript/highlights.scm +++ b/runtime/queries/purescript/highlights.scm @@ -1 +1,121 @@ -; 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 + + (pragma) @constant.macro + + [ + "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) + (wildcard) + "=" + "|" + "::" + "=>" + "->" + "<-" + "\\" + "`" + "@" + ] @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 ef073eb25523..321c90add371 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 ef073eb25523..ad67fe43f5a1 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 000000000000..91b34778722d --- /dev/null +++ b/runtime/queries/purescript/textobjects.scm @@ -0,0 +1,13 @@ +(comment) @comment.inside + +[ + (decl_adt) + (decl_type) + (newtype) +] @class.around + +((signature)? (function rhs:(_) @function.inside)) @function.around +(exp_lambda) @function.around + +(adt (type_variable) @parameter.inside) +(patterns (_) @parameter.inside) From 7abf87d7dc2015803f6b82f3d285b41a8b87ed88 Mon Sep 17 00:00:00 2001 From: NomisIV Date: Sat, 16 Sep 2023 19:04:23 +0200 Subject: [PATCH 2/4] Use latest version --- languages.toml | 2 +- runtime/queries/purescript/highlights.scm | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/languages.toml b/languages.toml index 9070027e31a4..0c374758e883 100644 --- a/languages.toml +++ b/languages.toml @@ -1006,7 +1006,7 @@ formatter = { command = "purs-tidy", args = ["format"] } [[grammar]] name = "purescript" -source = { git = "https://github.com/maskhjarna/tree-sitter-purescript", rev = "a9af5ded2ccb3bd83b99724762cfde600fcf867c" } +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 b2311ec9b576..bbfdf16e7532 100644 --- a/runtime/queries/purescript/highlights.scm +++ b/runtime/queries/purescript/highlights.scm @@ -33,8 +33,6 @@ ; ---------------------------------------------------------------------------- ; Keywords, operators, includes - (pragma) @constant.macro - [ "if" "then" @@ -55,7 +53,6 @@ (tycon_arrow) (qualified_module) ; grabs the `.` (dot), ex: import System.IO (all_names) - (wildcard) "=" "|" "::" From 2907976e82cf259c77efe683b93b6ac22a0de70c Mon Sep 17 00:00:00 2001 From: NomisIV Date: Sun, 17 Sep 2023 16:14:50 +0200 Subject: [PATCH 3/4] Run cargo xtask docgen --- book/src/generated/lang-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 1287c11ff8e3..6372e8b9db58 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -120,7 +120,7 @@ | prolog | | | | `swipl` | | protobuf | ✓ | | ✓ | `bufls`, `pb` | | prql | ✓ | | | | -| purescript | ✓ | | | `purescript-language-server` | +| purescript | ✓ | ✓ | | `purescript-language-server` | | python | ✓ | ✓ | ✓ | `pylsp` | | qml | ✓ | | ✓ | `qmlls` | | r | ✓ | | | `R` | From ecde2abd5f9de02f726bfa3c95c04e4825a15522 Mon Sep 17 00:00:00 2001 From: NomisIV Date: Sun, 17 Sep 2023 16:24:41 +0200 Subject: [PATCH 4/4] Update all queries --- runtime/queries/purescript/textobjects.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/queries/purescript/textobjects.scm b/runtime/queries/purescript/textobjects.scm index 91b34778722d..5f8eaff7377e 100644 --- a/runtime/queries/purescript/textobjects.scm +++ b/runtime/queries/purescript/textobjects.scm @@ -1,13 +1,13 @@ (comment) @comment.inside [ - (decl_adt) - (decl_type) + (data) + (type) (newtype) ] @class.around ((signature)? (function rhs:(_) @function.inside)) @function.around (exp_lambda) @function.around -(adt (type_variable) @parameter.inside) +(data (type_variable) @parameter.inside) (patterns (_) @parameter.inside)