aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNomisIV2023-09-17 16:50:58 +0000
committerGitHub2023-09-17 16:50:58 +0000
commitcb3924278372f8e065487b0785489ee6ad3cf660 (patch)
tree3a291b8c7dff7b233a25573f970ee457880b7b4e
parentca9a7d506e735abec8903c5d8e721e765f76a6f9 (diff)
Use Maskhjarnas tree-sitter-purescript (#8306)
-rw-r--r--book/src/generated/lang-support.md2
-rw-r--r--languages.toml5
-rw-r--r--runtime/queries/purescript/highlights.scm119
-rw-r--r--runtime/queries/purescript/injections.scm3
-rw-r--r--runtime/queries/purescript/locals.scm5
-rw-r--r--runtime/queries/purescript/textobjects.scm13
6 files changed, 142 insertions, 5 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 9d036b73..f65f268d 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 387aee6a..b0fc6344 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 ef073eb2..bbfdf16e 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 ef073eb2..321c90ad 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 ef073eb2..ad67fe43 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 00000000..5f8eaff7
--- /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)