diff options
Diffstat (limited to 'queries/haskell/highlights.scm')
| -rw-r--r-- | queries/haskell/highlights.scm | 689 |
1 files changed, 423 insertions, 266 deletions
diff --git a/queries/haskell/highlights.scm b/queries/haskell/highlights.scm index 92b36434d..1a3cfd485 100644 --- a/queries/haskell/highlights.scm +++ b/queries/haskell/highlights.scm @@ -1,34 +1,44 @@ -;; ---------------------------------------------------------------------------- -;; Parameters and variables - -;; NOTE: These are at the top, so that they have low priority, -;; and don't override destructured parameters - +; ---------------------------------------------------------------------------- +; Parameters and variables +; NOTE: These are at the top, so that they have low priority, +; and don't override destructured parameters (variable) @variable + (pat_wildcard) @variable (function - patterns: (patterns (_) @variable.parameter)) + patterns: + (patterns + (_) @variable.parameter)) -(exp_lambda (_)+ @variable.parameter "->") +(exp_lambda + (_)+ @variable.parameter + "->") -(function - infix: (infix - lhs: (_) @variable.parameter)) -(function - infix: (infix - rhs: (_) @variable.parameter)) +(function + infix: + (infix + lhs: (_) @variable.parameter)) -;; ---------------------------------------------------------------------------- -;; Literals and comments +(function + infix: + (infix + rhs: (_) @variable.parameter)) +; ---------------------------------------------------------------------------- +; Literals and comments (integer) @number + (exp_negation) @number -(exp_literal (float)) @number.float + +(exp_literal + (float)) @number.float + (char) @character + (string) @string -(con_unit) @string.special.symbol ; unit, as in () +(con_unit) @string.special.symbol ; unit, as in () (comment) @comment @@ -37,30 +47,28 @@ ; ((comment) @_first . (comment)+ @comment.documentation) ; once https://github.com/neovim/neovim/pull/24738 has been merged. ; -; ((comment) @comment.documentation +; ((comment) @comment.documentation ; (#lua-match? @comment.documentation "^-- |")) ; -; ((comment) @_first @comment.documentation -; (comment) @comment.documentation +; ((comment) @_first @comment.documentation +; (comment) @comment.documentation ; (#lua-match? @_first "^-- |")) ; -; ((comment) @comment.documentation +; ((comment) @comment.documentation ; (#lua-match? @comment.documentation "^-- %^")) ; -; ((comment) @_first @comment.documentation -; (comment) @comment.documentation +; ((comment) @_first @comment.documentation +; (comment) @comment.documentation ; (#lua-match? @_first "^-- %^")) ; -; ((comment) @comment.documentation +; ((comment) @comment.documentation ; (#lua-match? @comment.documentation "^{-")) ; -; ((comment) @_first @comment.documentation -; (comment) @comment.documentation +; ((comment) @_first @comment.documentation +; (comment) @comment.documentation ; (#lua-match? @_first "^{-")) - -;; ---------------------------------------------------------------------------- -;; Punctuation - +; ---------------------------------------------------------------------------- +; Punctuation [ "(" ")" @@ -75,10 +83,8 @@ ";" ] @punctuation.delimiter - -;; ---------------------------------------------------------------------------- -;; Keywords, operators, includes - +; ---------------------------------------------------------------------------- +; Keywords, operators, includes [ "forall" "∀" @@ -105,7 +111,7 @@ (constructor_operator) (type_operator) (tycon_arrow) - (qualified_module) ; grabs the `.` (dot), ex: import System.IO + (qualified_module) ; grabs the `.` (dot), ex: import System.IO (qualified_type) (qualified_variable) (all_names) @@ -123,14 +129,26 @@ "@" ] @operator - (module) @module -((qualified_module (module) @constructor) - . (module)) -(qualified_type (module) @module) -(qualified_variable (module) @module) -(import (module) @module) -(import (module) @constructor . (module)) + +((qualified_module + (module) @constructor) + . + (module)) + +(qualified_type + (module) @module) + +(qualified_variable + (module) @module) + +(import + (module) @module) + +(import + (module) @constructor + . + (module)) [ (where) @@ -157,310 +175,449 @@ "infixr" ] @keyword +; ---------------------------------------------------------------------------- +; Functions and variables +(signature + name: (variable) @function) -;; ---------------------------------------------------------------------------- -;; Functions and variables - -(signature name: (variable) @function) - -(function name: (variable) @function) +(function + name: (variable) @function) -(function +(function name: (variable) @variable - rhs: [ - (exp_literal) - (exp_apply - (exp_name - [(constructor) - (variable) - (qualified_variable) - ])) - (quasiquote) - ((exp_name) . (operator)) - ]) + rhs: + [ + (exp_literal) + (exp_apply + (exp_name + [ + (constructor) + (variable) + (qualified_variable) + ])) + (quasiquote) + ((exp_name) + . + (operator)) + ]) -(function +(function name: (variable) @variable - rhs: (exp_infix [ - (exp_literal) - (exp_apply - (exp_name - [(constructor) - (variable) - (qualified_variable) - ])) - (quasiquote) - ((exp_name) . (operator)) - ])) + rhs: + (exp_infix + [ + (exp_literal) + (exp_apply + (exp_name + [ + (constructor) + (variable) + (qualified_variable) + ])) + (quasiquote) + ((exp_name) + . + (operator)) + ])) + +; Consider signatures (and accompanying functions) +; with only one value on the rhs as variables +(signature + . + (variable) @variable + . + (_) .) + +((signature + . + (variable) @_name + . + (_) .) + . + (function + name: (variable) @variable) + (#eq? @_name @variable)) -;; Consider signatures (and accompanying functions) -;; with only one value on the rhs as variables -(signature . (variable) @variable . (_) . ) -((signature . (variable) @_name . (_) . ) - . (function name: (variable) @variable) - (#eq? @_name @variable)) -;; but consider a type that involves 'IO' a function -(signature name: (variable) @function - . (type_apply (type_name) @_type) - (#eq? @_type "IO")) -((signature name: (variable) @_name - . (type_apply (type_name) @_type) - (#eq? @_type "IO")) - . (function name: (variable) @function) - (#eq? @_name @function)) +; but consider a type that involves 'IO' a function +(signature + name: (variable) @function + . + (type_apply + (type_name) @_type) + (#eq? @_type "IO")) + +((signature + name: (variable) @_name + . + (type_apply + (type_name) @_type) + (#eq? @_type "IO")) + . + (function + name: (variable) @function) + (#eq? @_name @function)) -;; functions with parameters -;; + accompanying signatures +; functions with parameters +; + accompanying signatures (function name: (variable) @function patterns: (patterns)) + ((signature) @function - . (function + . + (function name: (variable) @function patterns: (patterns))) + (function name: (variable) @function rhs: (exp_lambda)) ; view patterns -(pat_view (exp_name [ - ((variable) @function.call) - (qualified_variable (variable) @function.call) -])) +(pat_view + (exp_name + [ + ((variable) @function.call) + (qualified_variable + (variable) @function.call) + ])) ; consider infix functions as operators -(exp_infix [ - (variable) @operator - (qualified_variable (variable) @operator) -]) +(exp_infix + [ + (variable) @operator + (qualified_variable + (variable) @operator) + ]) + ; partially applied infix functions (sections) also get highlighted as operators -(exp_section_right [ - ((variable) @operator) - (qualified_variable (variable) @operator) -]) -(exp_section_left [ - ((variable) @operator) - (qualified_variable (variable) @operator) -]) +(exp_section_right + [ + ((variable) @operator) + (qualified_variable + (variable) @operator) + ]) + +(exp_section_left + [ + ((variable) @operator) + (qualified_variable + (variable) @operator) + ]) ; function calls with an infix operator ; e.g. func <$> a <*> b -(exp_infix - (exp_name +(exp_infix + (exp_name [ ((variable) @function.call) - (qualified_variable ( - (module) @module - (variable) @function.call)) + (qualified_variable + ((module) @module + (variable) @function.call)) ]) - . (operator)) + . + (operator)) + ; infix operators applied to variables -((exp_name (variable) @variable) . (operator)) -((operator) . (exp_name [ - ((variable) @variable) - (qualified_variable (variable) @variable) -])) +((exp_name + (variable) @variable) + . + (operator)) + +((operator) + . + (exp_name + [ + ((variable) @variable) + (qualified_variable + (variable) @variable) + ])) + ; function calls with infix operators -((exp_name [ +((exp_name + [ ((variable) @function.call) - (qualified_variable (variable) @function.call) - ]) . (operator) @_op - (#any-of? @_op "$" "<$>" ">>=" "=<<")) + (qualified_variable + (variable) @function.call) + ]) + . + (operator) @_op + (#any-of? @_op "$" "<$>" ">>=" "=<<")) + ; right hand side of infix operator -((exp_infix - [(operator)(variable)] ; infix or `func` - . (exp_name [ +((exp_infix + [ + (operator) + (variable) + ] ; infix or `func` + . + (exp_name + [ ((variable) @function.call) - (qualified_variable (variable) @function.call) - ])) . (operator) @_op - (#any-of? @_op "$" "<$>" "=<<")) + (qualified_variable + (variable) @function.call) + ])) + . + (operator) @_op + (#any-of? @_op "$" "<$>" "=<<")) + ; function composition, arrows, monadic composition (lhs) -((exp_name [ - ((variable) @function) - (qualified_variable (variable) @function) - ]) . (operator) @_op - (#any-of? @_op "." ">>>" "***" ">=>" "<=<")) +((exp_name + [ + ((variable) @function) + (qualified_variable + (variable) @function) + ]) + . + (operator) @_op + (#any-of? @_op "." ">>>" "***" ">=>" "<=<")) + ; right hand side of infix operator -((exp_infix - [(operator)(variable)] ; infix or `func` - . (exp_name [ +((exp_infix + [ + (operator) + (variable) + ] ; infix or `func` + . + (exp_name + [ ((variable) @function) - (qualified_variable (variable) @function) - ])) . (operator) @_op - (#any-of? @_op "." ">>>" "***" ">=>" "<=<")) + (qualified_variable + (variable) @function) + ])) + . + (operator) @_op + (#any-of? @_op "." ">>>" "***" ">=>" "<=<")) + ; function composition, arrows, monadic composition (rhs) -((operator) @_op . (exp_name [ - ((variable) @function) - (qualified_variable (variable) @function) - ]) - (#any-of? @_op "." ">>>" "***" ">=>" "<=<" )) - +((operator) @_op + . + (exp_name + [ + ((variable) @function) + (qualified_variable + (variable) @function) + ]) + (#any-of? @_op "." ">>>" "***" ">=>" "<=<")) + ; function defined in terms of a function composition -(function +(function name: (variable) @function - rhs: (exp_infix (_) . (operator) @_op . (_) - (#any-of? @_op "." ">>>" "***" ">=>" "<=<"))) + rhs: + (exp_infix + (_) + . + (operator) @_op + . + (_) + (#any-of? @_op "." ">>>" "***" ">=>" "<=<"))) -(exp_apply (exp_name - [ - ((variable) @function.call) - (qualified_variable (variable) @function.call) - ])) +(exp_apply + (exp_name + [ + ((variable) @function.call) + (qualified_variable + (variable) @function.call) + ])) ; function compositions, in parentheses, applied ; lhs -(exp_apply - . (exp_parens (exp_infix - (exp_name [((variable) @function.call) (qualified_variable (variable) @function.call)]) - . (operator)))) +(exp_apply + . + (exp_parens + (exp_infix + (exp_name + [ + ((variable) @function.call) + (qualified_variable + (variable) @function.call) + ]) + . + (operator)))) + ; rhs -(exp_apply - . (exp_parens (exp_infix - (operator) - . (exp_name [((variable) @function.call) (qualified_variable (variable) @function.call)]))) - ) +(exp_apply + . + (exp_parens + (exp_infix + (operator) + . + (exp_name + [ + ((variable) @function.call) + (qualified_variable + (variable) @function.call) + ])))) -;; variables being passed to a function call -(exp_apply (_)+ - . (exp_name [ - ((variable) @variable) - (qualified_variable (variable) @variable) - ])) +; variables being passed to a function call +(exp_apply + (_)+ + . + (exp_name + [ + ((variable) @variable) + (qualified_variable + (variable) @variable) + ])) -;; Consider functions with only one value on the rhs -;; as variables, e.g. x = Rec {} or x = foo +; Consider functions with only one value on the rhs +; as variables, e.g. x = Rec {} or x = foo (function - . (variable) @variable - . [ - (exp_record) - (exp_name [(variable) (qualified_variable)]) - (exp_list) - (exp_tuple) - (exp_cond) - ] . ) + . + (variable) @variable + . + [ + (exp_record) + (exp_name + [ + (variable) + (qualified_variable) + ]) + (exp_list) + (exp_tuple) + (exp_cond) + ] .) -;; main is always a function -;; (this prevents `main = undefined` from being highlighted as a variable) -(function name: (variable) @function (#eq? @function "main")) +; main is always a function +; (this prevents `main = undefined` from being highlighted as a variable) +(function + name: (variable) @function + (#eq? @function "main")) -;; scoped function types (func :: a -> b) -(pat_typed - pattern: (pat_name (variable) @function) +; scoped function types (func :: a -> b) +(pat_typed + pattern: + (pat_name + (variable) @function) type: (fun)) -;; signatures that have a function type -;; + functions that follow them -((signature (variable) @function (fun))) -((signature (variable) @_type (fun)) . (function (variable) @function) (#eq? @function @_type)) -((signature (variable) @function (context (fun)))) -((signature (variable) @_type (context (fun))) . (function (variable) @function) (#eq? @function @_type)) -((signature (variable) @function (forall (context (fun)))) . (function (variable))) -((signature (variable) @_type (forall (context (fun)))) . (function (variable) @function) (#eq? @function @_type)) +; signatures that have a function type +; + functions that follow them +((signature + (variable) @function + (fun))) + +((signature + (variable) @_type + (fun)) + . + (function + (variable) @function) + (#eq? @function @_type)) + +((signature + (variable) @function + (context + (fun)))) + +((signature + (variable) @_type + (context + (fun))) + . + (function + (variable) @function) + (#eq? @function @_type)) + +((signature + (variable) @function + (forall + (context + (fun)))) + . + (function + (variable))) -;; ---------------------------------------------------------------------------- -;; Types +((signature + (variable) @_type + (forall + (context + (fun)))) + . + (function + (variable) @function) + (#eq? @function @_type)) +; ---------------------------------------------------------------------------- +; Types (type) @type + (type_star) @type + (type_variable) @type (constructor) @constructor ; True or False -((constructor) @boolean (#any-of? @boolean "True" "False")) +((constructor) @boolean + (#any-of? @boolean "True" "False")) + ; otherwise (= True) ((variable) @boolean (#eq? @boolean "otherwise")) -;; ---------------------------------------------------------------------------- -;; Quasi-quotes - +; ---------------------------------------------------------------------------- +; Quasi-quotes (quoter) @function.call -(quasiquote +(quasiquote [ - (quoter) @_name - (_ (variable) @_name) - ](#eq? @_name "qq") + (quoter) @_name + (_ + (variable) @_name) + ] + (#eq? @_name "qq") (quasiquote_body) @string) -(quasiquote - ((_ (variable) @_name)) (#eq? @_name "qq") +(quasiquote + ((_ + (variable) @_name)) + (#eq? @_name "qq") (quasiquote_body) @string) -;; namespaced quasi-quoter +; namespaced quasi-quoter (quasiquote (_ (module) @module - . (variable) @function.call - )) + . + (variable) @function.call)) ; Highlighting of quasiquote_body for other languages is handled by injections.scm - -;; ---------------------------------------------------------------------------- -;; Exceptions/error handling - +; ---------------------------------------------------------------------------- +; Exceptions/error handling ((variable) @keyword.exception - (#any-of? @keyword.exception - "error" - "undefined" - "try" - "tryJust" - "tryAny" - "catch" - "catches" - "catchJust" - "handle" - "handleJust" - "throw" - "throwIO" - "throwTo" - "throwError" - "ioError" - "mask" - "mask_" - "uninterruptibleMask" - "uninterruptibleMask_" - "bracket" - "bracket_" - "bracketOnErrorSource" - "finally" - "fail" - "onException" - "expectationFailure")) + (#any-of? @keyword.exception "error" "undefined" "try" "tryJust" "tryAny" "catch" "catches" "catchJust" "handle" "handleJust" "throw" "throwIO" "throwTo" "throwError" "ioError" "mask" "mask_" "uninterruptibleMask" "uninterruptibleMask_" "bracket" "bracket_" "bracketOnErrorSource" "finally" "fail" "onException" "expectationFailure")) -;; ---------------------------------------------------------------------------- -;; Debugging +; ---------------------------------------------------------------------------- +; Debugging ((variable) @keyword.debug - (#any-of? @keyword.debug - "trace" - "traceId" - "traceShow" - "traceShowId" - "traceWith" - "traceShowWith" - "traceStack" - "traceIO" - "traceM" - "traceShowM" - "traceEvent" - "traceEventWith" - "traceEventIO" - "flushEventLog" - "traceMarker" - "traceMarkerIO")) + (#any-of? @keyword.debug "trace" "traceId" "traceShow" "traceShowId" "traceWith" "traceShowWith" "traceStack" "traceIO" "traceM" "traceShowM" "traceEvent" "traceEventWith" "traceEventIO" "flushEventLog" "traceMarker" "traceMarkerIO")) + +; ---------------------------------------------------------------------------- +; Fields +(field + (variable) @variable.member) +(pat_field + (variable) @variable.member) -;; ---------------------------------------------------------------------------- -;; Fields -(field (variable) @variable.member) -(pat_field (variable) @variable.member) -(exp_projection field: (variable) @variable.member) -(import_item (type) . (import_con_names (variable) @variable.member)) -(exp_field field: [((variable) @variable.member) (qualified_variable (variable) @variable.member)]) +(exp_projection + field: (variable) @variable.member) +(import_item + (type) + . + (import_con_names + (variable) @variable.member)) -;; ---------------------------------------------------------------------------- -;; Spell checking +(exp_field + field: + [ + ((variable) @variable.member) + (qualified_variable + (variable) @variable.member) + ]) +; ---------------------------------------------------------------------------- +; Spell checking (comment) @spell |
