; 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