aboutsummaryrefslogtreecommitdiff
path: root/runtime/queries/ohm
diff options
context:
space:
mode:
authorNovus Nota2024-03-24 22:30:59 +0000
committerGitHub2024-03-24 22:30:59 +0000
commit2d9e336f640cccdd347e35289c3e4c0371777a3f (patch)
tree4c0459834ad0796de350b169aa9e6d1da4996e27 /runtime/queries/ohm
parent47995bfb0cf3b0bc232a87340c7a01ff26d45bbc (diff)
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>
Diffstat (limited to 'runtime/queries/ohm')
-rw-r--r--runtime/queries/ohm/highlights.scm122
-rw-r--r--runtime/queries/ohm/indents.scm37
-rw-r--r--runtime/queries/ohm/injections.scm7
-rw-r--r--runtime/queries/ohm/textobjects.scm40
4 files changed, 206 insertions, 0 deletions
diff --git a/runtime/queries/ohm/highlights.scm b/runtime/queries/ohm/highlights.scm
new file mode 100644
index 00000000..68477aac
--- /dev/null
+++ b/runtime/queries/ohm/highlights.scm
@@ -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)
diff --git a/runtime/queries/ohm/indents.scm b/runtime/queries/ohm/indents.scm
new file mode 100644
index 00000000..f56119ae
--- /dev/null
+++ b/runtime/queries/ohm/indents.scm
@@ -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
diff --git a/runtime/queries/ohm/injections.scm b/runtime/queries/ohm/injections.scm
new file mode 100644
index 00000000..dc50a765
--- /dev/null
+++ b/runtime/queries/ohm/injections.scm
@@ -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"))
diff --git a/runtime/queries/ohm/textobjects.scm b/runtime/queries/ohm/textobjects.scm
new file mode 100644
index 00000000..855ad8de
--- /dev/null
+++ b/runtime/queries/ohm/textobjects.scm
@@ -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