From 2d9e336f640cccdd347e35289c3e4c0371777a3f Mon Sep 17 00:00:00 2001 From: Novus Nota Date: Sun, 24 Mar 2024 23:30:59 +0100 Subject: 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 * chore: final newline --------- Co-authored-by: Michael Davis --- runtime/queries/ohm/highlights.scm | 122 ++++++++++++++++++++++++++++++++++++ runtime/queries/ohm/indents.scm | 37 +++++++++++ runtime/queries/ohm/injections.scm | 7 +++ runtime/queries/ohm/textobjects.scm | 40 ++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 runtime/queries/ohm/highlights.scm create mode 100644 runtime/queries/ohm/indents.scm create mode 100644 runtime/queries/ohm/injections.scm create mode 100644 runtime/queries/ohm/textobjects.scm (limited to 'runtime/queries') 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 -- cgit v1.2.3-70-g09d2