From e7e1db38cd966ea1e382c321dd589378393ff186 Mon Sep 17 00:00:00 2001 From: Daniel Kempkens Date: Fri, 14 May 2021 21:23:58 +0200 Subject: Initial Elixir support --- queries/elixir/highlights.scm | 190 ++++++++++++++++++++++++++++++++++++++++++ queries/elixir/indents.scm | 28 +++++++ queries/elixir/injections.scm | 1 + queries/elixir/locals.scm | 95 +++++++++++++++++++++ 4 files changed, 314 insertions(+) create mode 100644 queries/elixir/highlights.scm create mode 100644 queries/elixir/indents.scm create mode 100644 queries/elixir/injections.scm create mode 100644 queries/elixir/locals.scm (limited to 'queries/elixir') diff --git a/queries/elixir/highlights.scm b/queries/elixir/highlights.scm new file mode 100644 index 000000000..7fcd34ac8 --- /dev/null +++ b/queries/elixir/highlights.scm @@ -0,0 +1,190 @@ +(identifier) @variable + +(interpolation + "#{" @punctuation.special + "}" @punctuation.special) @none + +[ + "after" + "do" + "end" +] @keyword + +[ + "and" + "in" + "not" + "not in" + "or" +] @keyword.operator + +(call (function_identifier) @method) + +(call (function_identifier) @keyword + (#any-of? @keyword + "quote" + "receive" + "self" + "super" + "unquote" + "unquote_splicing" + "with" + "assert" + "assert_in_delta" + "assert_raise" + "assert_receive" + "assert_received" + "catch_error" + "catch_exit" + "catch_throw" + "flunk" + "refute" + "refute_in_delta" + "refute_receive" + "refute_received")) + +"fn" @keyword.function + +(call (function_identifier) @keyword.function + (#lua-match? @keyword.function "^def%a*$")) + +(call (function_identifier) @keyword.function + (#any-of? @keyword.function "describe" "doctest" "on_exit" "setup" "setup_all" "test")) + +"else" @conditional + +(call (function_identifier) @conditional + (#any-of? @conditional "case" "cond" "if" "unless")) + +(call (function_identifier) @repeat + (#eq? @repeat "for")) + +(call (function_identifier) @include + (#any-of? @include "alias" "import" "require" "use")) + +[ + "catch" + "rescue" +] @exception + +(call (function_identifier) @exception + (#any-of? @exception "raise" "try")) + +[ + (heredoc_content) + (sigil_content) + (string_content) + (string_end) + (string_start) +] @string + +[ + (heredoc_end) + (heredoc_start) + (sigil_end) + (sigil_start) +] @string.special + +(sigil + (sigil_start) @_sigil-type + [(sigil_content) (escape_sequence)] @string.regex + (sigil_end) + (#lua-match? @_sigil-type "^~r")) + +(module) @type + +[(atom) (keyword)] @symbol + +(escape_sequence) @string.escape +(integer) @number +(float) @float + +[(true) (false)] @boolean + +(nil) @constant.builtin + +(comment) @comment + +"->" @operator + +(unary_op + operator: _ @operator) + +(binary_op + operator: _ @operator) + +(unary_op + operator: "@" @attribute + [(call + function: (function_identifier) @attribute) + (identifier) @attribute]) + +(unary_op + operator: "@" + (call (function_identifier) @attribute + (heredoc + [(heredoc_start) + (heredoc_content) + (heredoc_end)] @string)) + (#any-of? @attribute "doc" "moduledoc")) + +(unary_op + operator: "@" + (call (function_identifier) @attribute + (binary_op + left: (identifier) @method)) + (#eq? @attribute "spec")) + +[ + "," + "." +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + "{" + "}" + "<<" + ">>" +] @punctuation.bracket + +(dot_call + remote: [(atom) (module)] @type + function: (function_identifier) @method) + +(call (function_identifier) @keyword.function + [(call + (function_identifier) @function) + (call + function: (function_identifier) @function + (arguments + [(identifier) @parameter + (binary_op + left: (identifier) @parameter)])) + (identifier) @function + (binary_op + left: + [(call + function: (function_identifier) @function + (arguments + [(identifier) @parameter + (binary_op + left: (identifier) @parameter)])) + (identifier) @function] + operator: "when") + (binary_op + left: (identifier) + operator: _ @function + right: (identifier))] + (#lua-match? @keyword.function "^def%a*$")) + +((identifier) @comment + (#lua-match? @comment "^_[%a%d_]*$")) + +((identifier) @constant.builtin + (#lua-match? @constant.builtin "^__[%a%d_]+__$")) + +(ERROR) @error diff --git a/queries/elixir/indents.scm b/queries/elixir/indents.scm new file mode 100644 index 000000000..ef0db3907 --- /dev/null +++ b/queries/elixir/indents.scm @@ -0,0 +1,28 @@ +[ + (arguments) + (call) + (do_block) + (list) + (map) + (stab_expression) +] @indent + +(stab_expression + right: (_) @indent) + +[ + "(" + ")" + "{" + "}" + "[" + "]" + (after_block) + (catch_block) + (else_block) + (rescue_block) + "do" + "end" +] @branch + +(comment) @ignore diff --git a/queries/elixir/injections.scm b/queries/elixir/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/queries/elixir/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/queries/elixir/locals.scm b/queries/elixir/locals.scm new file mode 100644 index 000000000..2857249f9 --- /dev/null +++ b/queries/elixir/locals.scm @@ -0,0 +1,95 @@ +[ + (after_block) + (catch_block) + (do_block) + (stab_expression) + (rescue_block) +] @scope + +(identifier) @reference + +(call + function: (function_identifier) @_call-name + (module) @definition.type + (#eq? @_call-name "defmodule")) + +(call + function: (function_identifier) @_call-name + (call + function: (function_identifier) @definition.function) + (#lua-match? @_call-name "^defp?$")) + +(call + function: (function_identifier) @_call-name + (call + function: (function_identifier) @definition.function + (arguments + [(identifier) @definition.parameter + (tuple + (identifier) @definition.parameter) + (list + (identifier) @definition.parameter) + (map + (keyword_list + (identifier) @definition.parameter)) + (struct + (keyword_list + (identifier) @definition.parameter)) + (binary_op + left: (identifier) @definition.parameter + operator: "\\\\")] + (#lua-match? @definition.parameter "^[^_]"))) + (#lua-match? @_call-name "^defp?$")) + +(call + function: (function_identifier) @_call-name + (binary_op + left: (call + function: (function_identifier) @definition.function + (arguments + [(identifier) @definition.parameter + (tuple + (identifier) @definition.parameter) + (list + (identifier) @definition.parameter) + (map + (keyword_list + (identifier) @definition.parameter)) + (struct + (keyword_list + (identifier) @definition.parameter))] + (#lua-match? @definition.parameter "^[^_]"))) + operator: "when") + (#lua-match? @_call-name "^defp?$")) + +(binary_op + left: + [(identifier) @definition.var + (tuple + (identifier) @definition.var) + (list + (identifier) @definition.var) + (map + (keyword_list + (identifier) @definition.var)) + (struct + (keyword_list + (identifier) @definition.var))] + operator: "=" + (#lua-match? @definition.var "^[^_]")) + +(stab_expression + left: + (bare_arguments + [(identifier) @definition.var + (tuple + (identifier) @definition.var) + (list + (identifier) @definition.var) + (map + (keyword_list + (identifier) @definition.var)) + (struct + (keyword_list + (identifier) @definition.var))]) + (#lua-match? @definition.var "^[^_]")) -- cgit v1.2.3-70-g09d2