From 15169596d17abb072fb117cb3c4a514350bdb37e Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Sat, 8 Jan 2022 06:54:00 -0600 Subject: [PATCH] add tags.scm queries (#18) * add tags.scm queries * mark defimpl modules as references to the interface * mark modules as module references instead of calls * define protocol modules as modules, remove interface references --- queries/tags.scm | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 queries/tags.scm diff --git a/queries/tags.scm b/queries/tags.scm new file mode 100644 index 0000000..3408b7f --- /dev/null +++ b/queries/tags.scm @@ -0,0 +1,54 @@ +; Definitions + +; * modules and protocols +(call + target: (identifier) @ignore + (arguments (alias) @name) + (#match? @ignore "^(defmodule|defprotocol)$")) @definition.module + +; * functions/macros +(call + target: (identifier) @ignore + (arguments + [ + ; zero-arity functions with no parentheses + (identifier) @name + ; regular function clause + (call target: (identifier) @name) + ; function clause with a guard clause + (binary_operator + left: (call target: (identifier) @name) + operator: "when") + ]) + (#match? @ignore "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @definition.function + +; References + +; ignore calls to kernel/special-forms keywords +(call + target: (identifier) @ignore + (#match? @ignore "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defmodule|defprotocol|defimpl|defstruct|defexception|defoverridable|alias|case|cond|else|for|if|import|quote|raise|receive|require|reraise|super|throw|try|unless|unquote|unquote_splicing|use|with)$")) + +; ignore module attributes +(unary_operator + operator: "@" + operand: (call + target: (identifier) @ignore)) + +; * function call +(call + target: [ + ; local + (identifier) @name + ; remote + (dot + right: (identifier) @name) + ]) @reference.call + +; * pipe into function call +(binary_operator + operator: "|>" + right: (identifier) @name) @reference.call + +; * modules +(alias) @name @reference.module