aboutsummaryrefslogtreecommitdiffstats
path: root/queries/purescript
diff options
context:
space:
mode:
authorpostsolar <120750161+postsolar@users.noreply.github.com>2023-11-08 18:07:02 +0200
committerGitHub <noreply@github.com>2023-11-08 18:07:02 +0200
commitbf18ff20ae4d7b667b5e7ede0244c6596427d69e (patch)
treea3fc33da986596dabbf5740f43cb456b0183f113 /queries/purescript
parentUpdate README (diff)
downloadnvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar.gz
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar.bz2
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar.lz
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar.xz
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.tar.zst
nvim-treesitter-bf18ff20ae4d7b667b5e7ede0244c6596427d69e.zip
feat(purescript): add parser and queries (#5626)
Diffstat (limited to 'queries/purescript')
-rw-r--r--queries/purescript/highlights.scm152
-rw-r--r--queries/purescript/injections.scm2
-rw-r--r--queries/purescript/locals.scm4
3 files changed, 158 insertions, 0 deletions
diff --git a/queries/purescript/highlights.scm b/queries/purescript/highlights.scm
new file mode 100644
index 000000000..3e3ec3cb8
--- /dev/null
+++ b/queries/purescript/highlights.scm
@@ -0,0 +1,152 @@
+; ----------------------------------------------------------------------------
+; Literals and comments
+
+[
+ (integer)
+ (exp_negation)
+] @number
+ (exp_literal (number)) @float
+ (char) @character
+ [
+ (string)
+ (triple_quote_string)
+ ] @string
+
+ (comment) @comment @spell
+
+; ----------------------------------------------------------------------------
+; Punctuation
+
+ [
+ "("
+ ")"
+ "{"
+ "}"
+ "["
+ "]"
+ ] @punctuation.bracket
+
+ [
+ (comma)
+ ";"
+ (qualified_module) ; grabs the `.` (dot), ex: import System.IO
+ "."
+ ] @punctuation.delimiter
+
+
+; ----------------------------------------------------------------------------
+; Keywords, operators, includes
+
+ [
+ "if"
+ "then"
+ "else"
+ "case"
+ "of"
+ ] @conditional
+
+ [
+ "import"
+ "module"
+ ] @include
+
+ [
+ (operator)
+ (constructor_operator)
+ (type_operator)
+ (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"
+ "hiding"
+ "do"
+ "ado"
+ "forall"
+ "∀"
+ "infix"
+ "infixl"
+ "infixr"
+ ] @keyword
+
+ (class_instance "else" @keyword)
+
+ (type_role_declaration
+ "role" @keyword
+ role: (type_role) @type.qualifier)
+
+ (hole) @character.special
+
+ ; `_` wildcards in if-then-else and case-of expressions,
+ ; as well as record updates and operator sections
+ (wildcard) @parameter
+
+; ----------------------------------------------------------------------------
+; Functions and variables
+
+ (variable) @variable
+ (exp_apply . (exp_name (variable) @function))
+ (exp_apply . (exp_name (qualified_variable (variable) @function)))
+
+ (row_field (field_name) @field)
+ (record_field (field_name) @field)
+ (record_accessor (variable) @field)
+ (exp_record_access (variable) @field)
+
+ (signature name: (variable) @type)
+ (kind_declaration (class_name) @type)
+ (function name: (variable) @function)
+ (foreign_import (variable) @function)
+ (class_instance (instance_name) @function)
+ (derive_declaration (instance_name) @function)
+
+ ; true or false
+ ((variable) @boolean
+ (#any-of? @boolean "true" "false"))
+
+ ; The former one works for `tree-sitter highlight` but not in Helix/Kakoune.
+ ; The latter two work in Helix (but not Kakoune) and are a good compromise between not highlighting anything at all
+ ; as an operator and leaving it to the child nodes, and highlighting everything as an operator.
+ (exp_ticked (_) @operator)
+ (exp_ticked (exp_name (variable) @operator))
+ (exp_ticked (exp_name (qualified_variable (variable) @operator)))
+
+; ----------------------------------------------------------------------------
+; Types
+
+ (type) @type
+
+ (constructor) @constructor
+
diff --git a/queries/purescript/injections.scm b/queries/purescript/injections.scm
new file mode 100644
index 000000000..321c90add
--- /dev/null
+++ b/queries/purescript/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/queries/purescript/locals.scm b/queries/purescript/locals.scm
new file mode 100644
index 000000000..d8219bf43
--- /dev/null
+++ b/queries/purescript/locals.scm
@@ -0,0 +1,4 @@
+(signature name: (variable)) @definition.type
+(function name: (variable)) @definition.function
+(pat_name (variable)) @definition
+(exp_name (variable)) @reference