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)