diff --git a/languages.toml b/languages.toml index 048c76bb4..cf2783de9 100644 --- a/languages.toml +++ b/languages.toml @@ -1094,7 +1094,7 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "haskell" -source = { git = "https://github.com/tree-sitter/tree-sitter-haskell", rev = "98fc7f59049aeb713ab9b72a8ff25dcaaef81087" } +source = { git = "https://github.com/tree-sitter/tree-sitter-haskell", rev = "d7ac98f49e3ed7e17541256fe3881a967d7ffdd3" } [[language]] name = "haskell-persistent" diff --git a/runtime/queries/haskell/highlights.scm b/runtime/queries/haskell/highlights.scm index 5009f3b51..18c57c930 100644 --- a/runtime/queries/haskell/highlights.scm +++ b/runtime/queries/haskell/highlights.scm @@ -33,6 +33,11 @@ ;; ---------------------------------------------------------------------------- ;; Keywords, operators, includes +[ + "forall" + "∀" +] @keyword.control.repeat + (pragma) @constant.macro [ @@ -68,10 +73,7 @@ "@" ] @operator -(qualified_module (module) @constructor) -(qualified_type (module) @namespace) -(qualified_variable (module) @namespace) -(import (module) @namespace) +(module) @namespace [ (where) @@ -92,8 +94,6 @@ "do" "mdo" "rec" - "forall" - "∀" "infix" "infixl" "infixr" @@ -104,22 +104,35 @@ ;; Functions and variables (signature name: (variable) @type) -(function name: (variable) @function) - -(variable) @variable -"_" @variable.builtin +(function + name: (variable) @function + patterns: (patterns)) +((signature (fun)) . (function (variable) @function)) +((signature (context (fun))) . (function (variable) @function)) +((signature (forall (context (fun)))) . (function (variable) @function)) (exp_infix (variable) @operator) ; consider infix functions as operators -("@" @namespace) ; "as" pattern operator, e.g. x@Constructor +(exp_infix (exp_name) @function) +(exp_apply . (exp_name (variable) @function)) +(exp_apply . (exp_name (qualified_variable (variable) @function))) +(variable) @variable +(pat_wildcard) @variable ;; ---------------------------------------------------------------------------- ;; Types (type) @type +(type_variable) @type (constructor) @constructor ; True or False ((constructor) @_bool (#match? @_bool "(True|False)")) @constant.builtin.boolean + +;; ---------------------------------------------------------------------------- +;; Quasi-quotes + +(quoter) @function +; Highlighting of quasiquote_body is handled by injections.scm