outline.scm

 1(call
 2  target: (identifier) @context
 3  (arguments (alias) @name)
 4  (#match? @context "^(defmodule|defprotocol)$")) @item
 5
 6(unary_operator
 7  operator: "@" @name
 8  operand: (call
 9  target: (identifier) @context
10    (arguments
11      [
12        (binary_operator
13          left: (identifier) @name)
14        (binary_operator
15          left: (call
16          target: (identifier) @name
17          (arguments
18            "(" @context.extra
19            _* @context.extra
20            ")" @context.extra)))
21      ]
22    )
23)
24(#match? @context "^(callback|type|typep)$")) @item
25
26(call
27  target: (identifier) @context
28  (arguments
29    [
30      (identifier) @name
31      (call
32          target: (identifier) @name
33          (arguments
34              "(" @context.extra
35              _* @context.extra
36              ")" @context.extra))
37      (binary_operator
38        left: (call
39            target: (identifier) @name
40            (arguments
41                "(" @context.extra
42                _* @context.extra
43                ")" @context.extra))
44        operator: "when")
45    ])
46  (#match? @context "^(def|defp|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp)$")) @item