diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 9c085b0a..6805a062 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -107,6 +107,7 @@ | gts | ✓ | ✓ | ✓ | ✓ | | `typescript-language-server`, `vscode-eslint-language-server`, `ember-language-server` | | hare | ✓ | | | | | | | haskell | ✓ | ✓ | | | | `haskell-language-server-wrapper` | +| haskell-literate | ✓ | | | | | `haskell-language-server-wrapper` | | haskell-persistent | ✓ | | | | | | | hcl | ✓ | ✓ | ✓ | | | `terraform-ls` | | hdl | ✓ | | | | | `hdls` | diff --git a/languages.toml b/languages.toml index 963fb3b7..9486892a 100644 --- a/languages.toml +++ b/languages.toml @@ -1599,6 +1599,22 @@ indent = { tab-width = 2, unit = " " } name = "haskell-persistent" source = { git = "https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent", rev = "58a6ccfd56d9f1de8fb9f77e6c42151f8f0d0f3d" } +[[language]] +name = "haskell-literate" +scope = "source.haskell-literate" +injection-regex = "lhs" +file-types = ["lhs"] +roots = ["Setup.hs", "stack.yaml", "cabal.project", "hie.yaml"] +shebangs = ["runhaskell", "stack"] +comment-token = "--" +block-comment-tokens = { start = "{-", end = "-}" } +language-servers = [ "haskell-language-server" ] +indent = { tab-width = 2, unit = " " } + +[[grammar]] +name = "haskell-literate" +source = { git = "https://github.com/LaurentRDC/tree-sitter-haskell-literate", rev = "8ad7bd1b1595f4cc1a4ccc775d4a3c460f43a596" } + [[language]] name = "purescript" scope = "source.purescript" diff --git a/runtime/queries/haskell-literate/highlights.scm b/runtime/queries/haskell-literate/highlights.scm new file mode 100644 index 00000000..bfeb4e96 --- /dev/null +++ b/runtime/queries/haskell-literate/highlights.scm @@ -0,0 +1,16 @@ +; Bird track marker +(bird_line ">" @punctuation.special) + +; LaTeX delimiters +(latex_begin) @keyword.directive +(latex_end) @keyword.directive + +; Highlight LaTeX comments like comments +(latex_comment) @comment + +; Markdown delimiters +(markdown_begin) @keyword.directive +(markdown_end) @keyword.directive + +; Normal prose is not highlighted. Haskell code will be +; highlighted by the injected Haskell grammar diff --git a/runtime/queries/haskell-literate/injections.scm b/runtime/queries/haskell-literate/injections.scm new file mode 100644 index 00000000..fe9d96a6 --- /dev/null +++ b/runtime/queries/haskell-literate/injections.scm @@ -0,0 +1,14 @@ +; Inject Haskell parser into bird-style code lines +((bird_line + (haskell_code) @injection.content) + (#set! injection.language "haskell")) + +; Inject Haskell parser into LaTeX code blocks +((latex_code_line + (haskell_code) @injection.content) + (#set! injection.language "haskell")) + +; Inject Haskell parser into Markdown code blocks +((markdown_code_line + (haskell_code) @injection.content) + (#set! injection.language "haskell"))