feat: Add Ohm language support (#9991)

* feat: Add `Ohm` language support

Hope this commit makes it into release :)

* Update runtime/queries/ohm/highlights.scm

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* chore: final newline

---------

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
This commit is contained in:
Novus Nota 2024-03-24 23:30:59 +01:00 committed by GitHub
parent 47995bfb0c
commit 2d9e336f64
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 229 additions and 0 deletions

View file

@ -128,6 +128,7 @@
| ocaml | ✓ | | ✓ | `ocamllsp` |
| ocaml-interface | ✓ | | | `ocamllsp` |
| odin | ✓ | | ✓ | `ols` |
| ohm | ✓ | ✓ | ✓ | |
| opencl | ✓ | ✓ | ✓ | `clangd` |
| openscad | ✓ | | | `openscad-lsp` |
| org | ✓ | | | |

View file

@ -3408,3 +3408,25 @@ formatter = { command = "prettier", args = ['--parser', 'glimmer'] }
[[grammar]]
name = "glimmer"
source = { git = "https://github.com/ember-tooling/tree-sitter-glimmer", rev = "5dc6d1040e8ff8978ff3680e818d85447bbc10aa" }
[[language]]
name = "ohm"
scope = "source.ohm"
injection-regex = "ohm"
file-types = ["ohm"]
comment-token = "//"
block-comment-tokens = [
{ start = "/*", end = "*/" },
{ start = "/**", end = "*/" },
]
indent = { tab-width = 2, unit = " " }
[language.auto-pairs]
'"' = '"'
'{' = '}'
'(' = ')'
'<' = '>'
[[grammar]]
name = "ohm"
source = { git = "https://github.com/novusnota/tree-sitter-ohm", rev = "80f14f0e477ddacc1e137d5ed8e830329e3fb7a3" }

View file

@ -0,0 +1,122 @@
; See: https://docs.helix-editor.com/master/themes.html#syntax-highlighting
; attribute
; ---------
(case_name) @attribute
; comment.line
; ------------
[
(singleline_comment)
(rule_descr)
] @comment.line
; comment.block
; -------------
(multiline_comment) @comment.block
; function.method
; ---------------
(rule
name: (identifier) @function.method)
; function.builtin
; ----------------
; Lexical
((identifier) @function.builtin
(#any-of? @function.builtin
"any"
"alnum"
"end"
"digit" "hexDigit"
"letter"
"space"
"lower" "upper" "caseInsensitive"
"listOf" "nonemptyListOf" "emptyListOf"
"applySyntactic")
(#is-not? local))
; Syntactic
((identifier) @function.builtin
(#any-of? @function.builtin "ListOf" "NonemptyListOf" "EmptyListOf")
(#is-not? local))
; function.method (continuing)
; ---------------
(term
base: (identifier) @function.method)
; string.special
; --------------
(escape_char) @constant.character.escape
; string
; ------
[
(terminal_string)
(one_char_terminal)
] @string
; type
; ----
(super_grammar
name: (identifier) @type)
(grammar
name: (identifier) @type)
; operator
; --------
[
; "=" ":=" "+="
(define) (override) (extend)
; "&" "~"
(lookahead) (negative_lookahead)
; "#"
(lexification)
; "*" "+" "?"
(zero_or_more) (one_or_more) (zero_or_one)
; "..."
(super_splice)
"<:" ".." "|"
] @operator
; punctuation.bracket
; -------------------
[
"<"
">"
"{"
"}"
] @punctuation.bracket
(alt
"(" @punctuation.bracket
")" @punctuation.bracket)
; punctuation.delimiter
; ---------------------
"," @punctuation.delimiter
; variable.parameter
; ------------------
(formals
(identifier) @variable.parameter)

View file

@ -0,0 +1,37 @@
; See: https://docs.helix-editor.com/guides/indent.html
; indent
; ------
[
; <..., ...>
(formals)
(params)
; (...| ...)
(alt)
] @indent
; outdent
; -------
[
"}"
")"
">"
] @outdent
; align
; -----
; | ... | ...
(rule_body
. (top_level_term) @anchor
(#set! "scope" "tail")) @align
; N/A or unused:
; --------------
; indent.always
; outdent.always
; extend
; extend.prevent-once

View file

@ -0,0 +1,7 @@
; See: https://docs.helix-editor.com/guides/injection.html
((singleline_comment) @injection.content
(#set! injection.language "comment"))
((multiline_comment) @injection.content
(#set! injection.language "comment"))

View file

@ -0,0 +1,40 @@
; See: https://docs.helix-editor.com/guides/textobject.html
; function.inside & around
; ------------------------
(rule
body: (_) @function.inside) @function.around
; class.inside & around
; ---------------------
(grammar
body: (_) @class.inside) @class.around
; parameter.inside & around
; -------------------------
(formals
((_) @parameter.inside . ","? @parameter.around) @parameter.around)
(rule_body
((_) @parameter.inside . "|"? @parameter.around) @parameter.around)
(params
((_) @parameter.inside . ","? @parameter.around) @parameter.around)
(alt
((_) @parameter.inside . "|"? @parameter.around) @parameter.around)
; comment.inside
; --------------
(multiline_comment)+ @comment.inside
(singleline_comment)+ @comment.inside
; comment.around
; --------------
(multiline_comment)+ @comment.around
(singleline_comment)+ @comment.around