Skip to content

Commit

Permalink
add tags.scm queries (#18)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
the-mikedavis committed Jan 8, 2022
1 parent 94d6471 commit 1516959
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions queries/tags.scm
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 1516959

Please sign in to comment.