runnables.scm

 1; Functions names start with `Test`
 2(
 3  [
 4    (function_declaration name: (_) @run
 5      (#match? @run "^Test.*"))
 6    (method_declaration
 7      receiver: (parameter_list
 8        (parameter_declaration
 9          name: (identifier) @_receiver_name
10          type: [
11            (pointer_type (type_identifier) @_receiver_type)
12            (type_identifier) @_receiver_type
13          ]
14        )
15      )
16      name: (field_identifier) @run @_method_name
17      (#match? @_method_name "^Test.*"))
18  ] @_
19  (#set! tag go-test)
20)
21
22; `go:generate` comments
23(
24    ((comment) @_comment @run
25    (#match? @_comment "^//go:generate"))
26    (#set! tag go-generate)
27)
28
29; `t.Run`
30(
31  (
32    (call_expression
33      function: (
34        selector_expression
35        field: _ @run @_name
36        (#eq? @_name "Run")
37      )
38      arguments: (
39        argument_list
40        .
41        (interpreted_string_literal) @_subtest_name
42        .
43        (func_literal
44          parameters: (
45            parameter_list
46            (parameter_declaration
47              name: (identifier) @_param_name
48              type: (pointer_type
49                (qualified_type
50                  package: (package_identifier) @_pkg
51                  name: (type_identifier) @_type
52                  (#eq? @_pkg "testing")
53                  (#eq? @_type "T")
54                )
55              )
56            )
57          )
58        ) @_second_argument
59      )
60    )
61  ) @_
62  (#set! tag go-subtest)
63)
64
65; Functions names start with `Benchmark`
66(
67  (
68    (function_declaration name: (_) @run @_name
69      (#match? @_name "^Benchmark.+"))
70  ) @_
71  (#set! tag go-benchmark)
72)
73
74; Functions names start with `Fuzz`
75(
76  (
77    (function_declaration name: (_) @run @_name
78      (#match? @_name "^Fuzz"))
79  ) @_
80  (#set! tag go-fuzz)
81)
82
83; go run
84(
85  (
86    (function_declaration name: (_) @run
87      (#eq? @run "main"))
88  ) @_
89  (#set! tag go-main)
90)