aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-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
4 files changed, 137 insertions, 3 deletions
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)