summaryrefslogtreecommitdiff
path: root/vendor/queries/elixir/textobjects.scm
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/queries/elixir/textobjects.scm')
-rw-r--r--vendor/queries/elixir/textobjects.scm40
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/queries/elixir/textobjects.scm b/vendor/queries/elixir/textobjects.scm
new file mode 100644
index 00000000..ebe18d08
--- /dev/null
+++ b/vendor/queries/elixir/textobjects.scm
@@ -0,0 +1,40 @@
+; Vendored from helix (https://github.com/helix-editor/helix) at 278b24389:
+; runtime/queries/elixir/textobjects.scm.
+; Licensed under the Mozilla Public License 2.0 (vendor/queries/helix.LICENSE,
+; https://mozilla.org/MPL/2.0/).
+
+; Function heads and guards have no body at all, so `keywords` and `do_block` nodes are both optional
+((call
+ target: (identifier) @_keyword
+ (arguments
+ [
+ (call
+ (arguments (_)? @parameter.inside))
+ ; function has a guard
+ (binary_operator
+ left:
+ (call
+ (arguments (_)? @parameter.inside)))
+ ]
+ ; body is "do: body" instead of a do-block
+ (keywords
+ (pair
+ value: (_) @function.inside))?)?
+ (do_block (_)* @function.inside)?)
+ (#match? @_keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) @function.around
+
+(anonymous_function
+ (stab_clause right: (body) @function.inside)) @function.around
+
+((call
+ target: (identifier) @_keyword
+ (do_block (_)* @class.inside))
+ (#match? @_keyword "^(defmodule|defprotocol|defimpl)$")) @class.around
+
+((call
+ target: (identifier) @_keyword
+ (arguments ((string) . (_)?))
+ (do_block (_)* @test.inside)?)
+ (#match? @_keyword "^(test|describe)$")) @test.around
+
+(comment)+ @comment.around @comment.inside