runnables.scm

 1; Add support for (node:test, bun:test, Jest and Deno.test) runnable
 2; Function expression that has `it`, `test` or `describe` as the function name
 3(
 4    (call_expression
 5        function: [
 6            (identifier) @_name
 7            (member_expression
 8                object: [
 9                    (identifier) @_name
10                    (member_expression object: (identifier) @_name)
11                ]
12            )
13        ]
14        (#any-of? @_name "it" "test" "describe" "context" "suite")
15        arguments: (
16            arguments . [
17                (string (string_fragment) @run)
18                (identifier) @run
19            ]
20        )
21    ) @_js-test
22
23    (#set! tag js-test)
24)
25
26; Add support for parameterized tests
27(
28    (call_expression
29        function: (call_expression
30            function: (member_expression
31                object: [(identifier) @_name (member_expression object: (identifier) @_name)]
32                property: (property_identifier) @_property
33            )
34            (#any-of? @_name "it" "test" "describe" "context" "suite")
35            (#any-of? @_property "each")
36        )
37        arguments: (
38            arguments . [
39                (string (string_fragment) @run)
40                (identifier) @run
41            ]
42        )
43    ) @_js-test
44
45    (#set! tag js-test)
46)
47
48; Add support for Deno.test with string names
49(
50    (call_expression
51        function: (member_expression
52            object: (identifier) @_namespace
53            property: (property_identifier) @_method
54        )
55        (#eq? @_namespace "Deno")
56        (#eq? @_method "test")
57        arguments: (
58            arguments . [
59                (string (string_fragment) @run @DENO_TEST_NAME)
60                (identifier) @run @DENO_TEST_NAME
61            ]
62        )
63    ) @_js-test
64
65    (#set! tag js-test)
66)
67
68; Add support for Deno.test with named function expressions
69(
70    (call_expression
71        function: (member_expression
72            object: (identifier) @_namespace
73            property: (property_identifier) @_method
74        )
75        (#eq? @_namespace "Deno")
76        (#eq? @_method "test")
77        arguments: (
78            arguments . (function_expression
79                name: (identifier) @run @DENO_TEST_NAME
80            )
81        )
82    ) @_js-test
83
84    (#set! tag js-test)
85)