aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------helix-syntax/languages/tree-sitter-haskell0
-rw-r--r--helix-syntax/src/lib.rs2
-rw-r--r--languages.toml9
-rw-r--r--runtime/queries/haskell/highlights.scm43
-rw-r--r--runtime/queries/haskell/locals.scm4
5 files changed, 57 insertions, 1 deletions
diff --git a/helix-syntax/languages/tree-sitter-haskell b/helix-syntax/languages/tree-sitter-haskell
new file mode 160000
+Subproject 004f2709c460d95fbfd1061f8efc98f36e33c03
diff --git a/helix-syntax/src/lib.rs b/helix-syntax/src/lib.rs
index bb0b2ec6..b923de95 100644
--- a/helix-syntax/src/lib.rs
+++ b/helix-syntax/src/lib.rs
@@ -74,7 +74,7 @@ mk_langs!(
(Css, tree_sitter_css),
(Elixir, tree_sitter_elixir),
(Go, tree_sitter_go),
- // (Haskell, tree_sitter_haskell),
+ (Haskell, tree_sitter_haskell),
(Html, tree_sitter_html),
(Java, tree_sitter_java),
(Javascript, tree_sitter_javascript),
diff --git a/languages.toml b/languages.toml
index 143a7c27..e13184c9 100644
--- a/languages.toml
+++ b/languages.toml
@@ -144,3 +144,12 @@ file-types = ["php"]
roots = []
indent = { tab-width = 2, unit = " " }
+
+[[language]]
+name = "haskell"
+scope = "source.haskell"
+injection-regex = "haskell"
+file-types = ["hs"]
+roots = []
+
+indent = { tab-width = 2, unit = " " }
diff --git a/runtime/queries/haskell/highlights.scm b/runtime/queries/haskell/highlights.scm
new file mode 100644
index 00000000..ecaa2d2c
--- /dev/null
+++ b/runtime/queries/haskell/highlights.scm
@@ -0,0 +1,43 @@
+(variable) @variable
+(operator) @operator
+(exp_name (constructor) @constructor)
+(constructor_operator) @operator
+(module) @module_name
+(type) @type
+(type) @class
+(constructor) @constructor
+(pragma) @pragma
+(comment) @comment
+(signature name: (variable) @fun_type_name)
+(function name: (variable) @fun_name)
+(constraint class: (class_name (type)) @class)
+(class (class_head class: (class_name (type)) @class))
+(instance (instance_head class: (class_name (type)) @class))
+(integer) @literal
+(exp_literal (float)) @literal
+(char) @literal
+(con_unit) @literal
+(con_list) @literal
+(tycon_arrow) @operator
+(where) @keyword
+"module" @keyword
+"let" @keyword
+"in" @keyword
+"class" @keyword
+"instance" @keyword
+"data" @keyword
+"newtype" @keyword
+"family" @keyword
+"type" @keyword
+"import" @keyword
+"qualified" @keyword
+"as" @keyword
+"deriving" @keyword
+"via" @keyword
+"stock" @keyword
+"anyclass" @keyword
+"do" @keyword
+"mdo" @keyword
+"rec" @keyword
+"(" @paren
+")" @paren
diff --git a/runtime/queries/haskell/locals.scm b/runtime/queries/haskell/locals.scm
new file mode 100644
index 00000000..ad67fe43
--- /dev/null
+++ b/runtime/queries/haskell/locals.scm
@@ -0,0 +1,4 @@
+(signature name: (variable)) @local.definition
+(function name: (variable)) @local.definition
+(pat_name (variable)) @local.definition
+(exp_name (variable)) @local.reference