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((call_expression
 4  function: [
 5    (identifier) @_name
 6    (member_expression
 7      object: [
 8        (identifier) @_name
 9        (member_expression
10          object: (identifier) @_name)
11      ])
12  ]
13  (#any-of? @_name "it" "test" "describe" "context" "suite")
14  arguments: (arguments
15    .
16    [
17      (string
18        (string_fragment) @run)
19      (identifier) @run
20    ])) @_js-test
21  (#set! tag js-test))
22
23; Add support for parameterized tests
24((call_expression
25  function: (call_expression
26    function: (member_expression
27      object: [
28        (identifier) @_name
29        (member_expression
30          object: (identifier) @_name)
31      ]
32      property: (property_identifier) @_property)
33    (#any-of? @_name "it" "test" "describe" "context" "suite")
34    (#any-of? @_property "each"))
35  arguments: (arguments
36    .
37    [
38      (string
39        (string_fragment) @run)
40      (identifier) @run
41    ])) @_js-test
42  (#set! tag js-test))
43
44; Add support for Deno.test with string names
45((call_expression
46  function: (member_expression
47    object: (identifier) @_namespace
48    property: (property_identifier) @_method)
49  (#eq? @_namespace "Deno")
50  (#eq? @_method "test")
51  arguments: (arguments
52    .
53    [
54      (string
55        (string_fragment) @run @DENO_TEST_NAME)
56      (identifier) @run @DENO_TEST_NAME
57    ])) @_js-test
58  (#set! tag js-test))
59
60; Add support for Deno.test with named function expressions
61((call_expression
62  function: (member_expression
63    object: (identifier) @_namespace
64    property: (property_identifier) @_method)
65  (#eq? @_namespace "Deno")
66  (#eq? @_method "test")
67  arguments: (arguments
68    .
69    (function_expression
70      name: (identifier) @run @DENO_TEST_NAME))) @_js-test
71  (#set! tag js-test))