diff --git a/tests/query/highlights/bash/calls.sh b/tests/query/highlights/bash/calls.sh
new file mode 100644
index 00000000..277d3020
--- /dev/null
+++ b/tests/query/highlights/bash/calls.sh
@@ -0,0 +1,2 @@
+invokeit foo
+# ^ @function
diff --git a/tests/query/highlights/bicep/members.bicep b/tests/query/highlights/bicep/members.bicep
new file mode 100644
index 00000000..dfc5a3c3
--- /dev/null
+++ b/tests/query/highlights/bicep/members.bicep
@@ -0,0 +1,4 @@
+var y = obj.field
+// ^ @variable.other.member
+var z = az.resourceId('t')
+// ^ @function.method
diff --git a/tests/query/highlights/c-sharp/calls.cs b/tests/query/highlights/c-sharp/calls.cs
new file mode 100644
index 00000000..f80a1f4a
--- /dev/null
+++ b/tests/query/highlights/c-sharp/calls.cs
@@ -0,0 +1,6 @@
+class C {
+ void M() {
+ Invokeit();
+// ^ @function
+ }
+}
diff --git a/tests/query/highlights/c-sharp/constructs.cs b/tests/query/highlights/c-sharp/constructs.cs
new file mode 100644
index 00000000..d46bb659
--- /dev/null
+++ b/tests/query/highlights/c-sharp/constructs.cs
@@ -0,0 +1,10 @@
+class Box {
+// ^ @type
+ void M() {
+// ^ @function
+ Helper(1);
+// ^ @function
+ obj.Do();
+// ^ @function
+ }
+}
diff --git a/tests/query/highlights/c-sharp/edge.cs b/tests/query/highlights/c-sharp/edge.cs
new file mode 100644
index 00000000..dbe37c56
--- /dev/null
+++ b/tests/query/highlights/c-sharp/edge.cs
@@ -0,0 +1,6 @@
+class C {
+ void m() {
+ var x = $"{obj.Compute()}";
+// ^ @function
+ }
+}
diff --git a/tests/query/highlights/c-sharp/members.cs b/tests/query/highlights/c-sharp/members.cs
new file mode 100644
index 00000000..b986e0cd
--- /dev/null
+++ b/tests/query/highlights/c-sharp/members.cs
@@ -0,0 +1,4 @@
+class C { void G(O o){ o.meth(); int y = o.fld; freefn(); } }
+// ^ @function
+// ^ @variable.other.member
+// ^ @function
diff --git a/tests/query/highlights/c/constructs.c b/tests/query/highlights/c/constructs.c
new file mode 100644
index 00000000..f10662c6
--- /dev/null
+++ b/tests/query/highlights/c/constructs.c
@@ -0,0 +1,9 @@
+struct Point { int x; };
+// ^ @type
+// ^ @variable.other.member
+int add(int a) {
+// ^ @function
+// ^ @variable.parameter
+ return helper(a);
+// ^ @function
+}
diff --git a/tests/query/highlights/c/enums.c b/tests/query/highlights/c/enums.c
new file mode 100644
index 00000000..5be47e18
--- /dev/null
+++ b/tests/query/highlights/c/enums.c
@@ -0,0 +1,5 @@
+enum E { RED, GREEN };
+// ^ @constant
+// ^ @constant
+int f(void) { return RED; }
+// ^ @constant
diff --git a/tests/query/highlights/c3/calls.c3 b/tests/query/highlights/c3/calls.c3
new file mode 100644
index 00000000..5db49e34
--- /dev/null
+++ b/tests/query/highlights/c3/calls.c3
@@ -0,0 +1,6 @@
+fn void main() {
+ helper(1);
+// ^ @function
+ obj.doThing();
+// ^ @function
+}
diff --git a/tests/query/highlights/cairo/calls.cairo b/tests/query/highlights/cairo/calls.cairo
new file mode 100644
index 00000000..e299e7a7
--- /dev/null
+++ b/tests/query/highlights/cairo/calls.cairo
@@ -0,0 +1,2 @@
+fn f() { foo(); }
+// ^ @function
diff --git a/tests/query/highlights/clojure/calls.clj b/tests/query/highlights/clojure/calls.clj
new file mode 100644
index 00000000..2562e0a6
--- /dev/null
+++ b/tests/query/highlights/clojure/calls.clj
@@ -0,0 +1,6 @@
+(reduce + 0 items)
+;^ @function.builtin
+; ^ @constant.numeric
+(my-helper x)
+;^ @function
+; ^ @variable
diff --git a/tests/query/highlights/clojure/forms.clj b/tests/query/highlights/clojure/forms.clj
new file mode 100644
index 00000000..8a852c6a
--- /dev/null
+++ b/tests/query/highlights/clojure/forms.clj
@@ -0,0 +1,10 @@
+(defn process [items]
+;^ @function.macro
+; ^ @function
+; ^ @variable
+ (let [n 1] n))
+; ^ @function.macro
+(def x :status)
+;^ @function.macro
+; ^ @function
+; ^ @string.special.symbol
diff --git a/tests/query/highlights/cpp/calls.cpp b/tests/query/highlights/cpp/calls.cpp
new file mode 100644
index 00000000..a0d7e8c3
--- /dev/null
+++ b/tests/query/highlights/cpp/calls.cpp
@@ -0,0 +1,4 @@
+int main() {
+ invokeit();
+// ^ @function
+}
diff --git a/tests/query/highlights/cpp/constructs.cpp b/tests/query/highlights/cpp/constructs.cpp
new file mode 100644
index 00000000..90d1f20f
--- /dev/null
+++ b/tests/query/highlights/cpp/constructs.cpp
@@ -0,0 +1,11 @@
+class Widget {
+// ^ @type
+ int field;
+// ^ @variable.other.member
+ bool method(int count) {
+// ^ @function
+// ^ @variable.parameter
+ return helper(count);
+// ^ @function
+ }
+};
diff --git a/tests/query/highlights/cpp/qualified.cpp b/tests/query/highlights/cpp/qualified.cpp
new file mode 100644
index 00000000..0756681b
--- /dev/null
+++ b/tests/query/highlights/cpp/qualified.cpp
@@ -0,0 +1,10 @@
+void g(int x) {
+ auto a = Color::Red;
+// ^ @type.enum.variant
+ auto b = Limits::MAX;
+// ^ @type.enum.variant
+ std::cout << x;
+// ^ @variable
+}
+enum class Status { ON };
+// ^ @type.enum.variant
diff --git a/tests/query/highlights/crystal/calls.cr b/tests/query/highlights/crystal/calls.cr
new file mode 100644
index 00000000..95efdf6c
--- /dev/null
+++ b/tests/query/highlights/crystal/calls.cr
@@ -0,0 +1,6 @@
+def f
+ obj.first.second
+# ^ @function.method
+ helper(1)
+# ^ @function.method
+end
diff --git a/tests/query/highlights/cue/calls.cue b/tests/query/highlights/cue/calls.cue
new file mode 100644
index 00000000..d35d1935
--- /dev/null
+++ b/tests/query/highlights/cue/calls.cue
@@ -0,0 +1,2 @@
+x: foo(1)
+// ^ @function
diff --git a/tests/query/highlights/cython/members.pyx b/tests/query/highlights/cython/members.pyx
new file mode 100644
index 00000000..a336f38d
--- /dev/null
+++ b/tests/query/highlights/cython/members.pyx
@@ -0,0 +1,5 @@
+def f(o):
+ o.do_thing()
+// ^ @function.method
+ y = o.attr
+// ^ @variable.other.member
diff --git a/tests/query/highlights/d/calls.d b/tests/query/highlights/d/calls.d
new file mode 100644
index 00000000..8dbc1641
--- /dev/null
+++ b/tests/query/highlights/d/calls.d
@@ -0,0 +1,3 @@
+void f() { foo(); }
+// ^ @function
+// ^ @function
diff --git a/tests/query/highlights/d/members.d b/tests/query/highlights/d/members.d
new file mode 100644
index 00000000..bd0e4362
--- /dev/null
+++ b/tests/query/highlights/d/members.d
@@ -0,0 +1,6 @@
+void f(Obj o) {
+ auto x = o.field;
+// ^ @variable.other.member
+ o.method(1);
+// ^ @function
+}
diff --git a/tests/query/highlights/dart/calls.dart b/tests/query/highlights/dart/calls.dart
new file mode 100644
index 00000000..3fd9e7af
--- /dev/null
+++ b/tests/query/highlights/dart/calls.dart
@@ -0,0 +1,6 @@
+class C {
+ void m() {
+ invokeit();
+// ^ @function.method
+ }
+}
diff --git a/tests/query/highlights/elixir/calls.ex b/tests/query/highlights/elixir/calls.ex
new file mode 100644
index 00000000..033840f8
--- /dev/null
+++ b/tests/query/highlights/elixir/calls.ex
@@ -0,0 +1,10 @@
+def f(x) do
+ helper(x)
+# ^ @function
+ x |> Mod.doThing()
+# ^ @function
+ "#{String.upcase(x)}"
+# ^ @function
+ is_binary(x)
+# ^ @function
+end
diff --git a/tests/query/highlights/elixir/constructs.ex b/tests/query/highlights/elixir/constructs.ex
new file mode 100644
index 00000000..8555bf53
--- /dev/null
+++ b/tests/query/highlights/elixir/constructs.ex
@@ -0,0 +1,10 @@
+defmodule App do
+# ^ @namespace
+ def greet(name) do
+# ^ @function
+ s = :ok
+# ^ @string.special.symbol
+ re = ~r/foo/
+# ^ @string.regexp
+ end
+end
diff --git a/tests/query/highlights/elixir/structs.ex b/tests/query/highlights/elixir/structs.ex
new file mode 100644
index 00000000..ef4a431d
--- /dev/null
+++ b/tests/query/highlights/elixir/structs.ex
@@ -0,0 +1,8 @@
+@timeout :infinity
+#^ @variable.other.member
+def area(%Shape{size: w}) do
+# ^ @namespace
+# ^ @variable
+ w * 2
+# ^ @variable
+end
diff --git a/tests/query/highlights/elm/constructors.elm b/tests/query/highlights/elm/constructors.elm
new file mode 100644
index 00000000..34697cc0
--- /dev/null
+++ b/tests/query/highlights/elm/constructors.elm
@@ -0,0 +1,11 @@
+type Color = Red | Blue
+-- ^ @type
+-- ^ @constructor
+-- ^ @constructor
+f x = case x of
+ Just y -> y
+--^ @constructor
+ Nothing -> 0
+--^ @constructor
+a = Just 1
+-- ^ @constructor
diff --git a/tests/query/highlights/erlang/calls.erl b/tests/query/highlights/erlang/calls.erl
new file mode 100644
index 00000000..681e68ad
--- /dev/null
+++ b/tests/query/highlights/erlang/calls.erl
@@ -0,0 +1,5 @@
+f() ->
+ mod:func(X),
+% ^ @function
+ helper(Y).
+% ^ @function
diff --git a/tests/query/highlights/erlang/constructs.erl b/tests/query/highlights/erlang/constructs.erl
new file mode 100644
index 00000000..d53da069
--- /dev/null
+++ b/tests/query/highlights/erlang/constructs.erl
@@ -0,0 +1,10 @@
+-record(user, {name, age}).
+% ^ @type
+% ^ @variable.other.member
+handle(Msg) ->
+%^ @function
+% ^ @variable.parameter
+ lists:map(F, Msg).
+% ^ @namespace
+% ^ @function
+% ^ @variable.parameter
diff --git a/tests/query/highlights/freebasic/calls.bas b/tests/query/highlights/freebasic/calls.bas
new file mode 100644
index 00000000..415d2b9a
--- /dev/null
+++ b/tests/query/highlights/freebasic/calls.bas
@@ -0,0 +1,4 @@
+sub f()
+ foo()
+' ^ @function
+end sub
diff --git a/tests/query/highlights/fsharp/calls.fs b/tests/query/highlights/fsharp/calls.fs
new file mode 100644
index 00000000..ae4172b9
--- /dev/null
+++ b/tests/query/highlights/fsharp/calls.fs
@@ -0,0 +1,4 @@
+let helper x = x
+let _ = Mod.doThing 1
+// ^ @namespace
+// ^ @function
diff --git a/tests/query/highlights/go/calls.go b/tests/query/highlights/go/calls.go
new file mode 100644
index 00000000..c7e3f4b4
--- /dev/null
+++ b/tests/query/highlights/go/calls.go
@@ -0,0 +1,6 @@
+package main
+
+func main() {
+ invokeit()
+// ^ @function
+}
diff --git a/tests/query/highlights/go/constructs.go b/tests/query/highlights/go/constructs.go
new file mode 100644
index 00000000..732dfd32
--- /dev/null
+++ b/tests/query/highlights/go/constructs.go
@@ -0,0 +1,12 @@
+package main
+// ^ @namespace
+type Point struct { X int }
+// ^ @type.definition
+// ^ @variable.other.member
+// ^ @type.builtin
+func (p Point) Dist(count int) bool {
+// ^ @function.method
+// ^ @variable.parameter
+ return helper(count)
+// ^ @function
+}
diff --git a/tests/query/highlights/go/generics.go b/tests/query/highlights/go/generics.go
new file mode 100644
index 00000000..af3df172
--- /dev/null
+++ b/tests/query/highlights/go/generics.go
@@ -0,0 +1,9 @@
+package main
+func Sum[T Number](xs []T) T {
+// ^ @type.parameter
+// ^ @type
+ var f = obj.Method
+// ^ @variable.other.member
+ return obj.field
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/gren/members.gren b/tests/query/highlights/gren/members.gren
new file mode 100644
index 00000000..51772775
--- /dev/null
+++ b/tests/query/highlights/gren/members.gren
@@ -0,0 +1,6 @@
+module Main exposing (..)
+g x = foo x
+-- ^ @variable.parameter
+h o = o.field
+-- ^ @variable.parameter
+-- ^ @variable.other.member
diff --git a/tests/query/highlights/groovy/calls.groovy b/tests/query/highlights/groovy/calls.groovy
new file mode 100644
index 00000000..fff81ba7
--- /dev/null
+++ b/tests/query/highlights/groovy/calls.groovy
@@ -0,0 +1,6 @@
+def f() {
+ obj.doThing()
+// ^ @function
+ helper()
+//^ @function
+}
diff --git a/tests/query/highlights/groovy/members.groovy b/tests/query/highlights/groovy/members.groovy
new file mode 100644
index 00000000..7ac8b465
--- /dev/null
+++ b/tests/query/highlights/groovy/members.groovy
@@ -0,0 +1,5 @@
+def g(o) { o.meth(); def y = o.fld; def z = o.CONST; freefn() }
+// ^ @function
+// ^ @variable.other.member
+// ^ @constant
+// ^ @function
diff --git a/tests/query/highlights/haskell/calls.hs b/tests/query/highlights/haskell/calls.hs
new file mode 100644
index 00000000..1fb28c51
--- /dev/null
+++ b/tests/query/highlights/haskell/calls.hs
@@ -0,0 +1,2 @@
+main = invokeit x
+-- ^ @function
diff --git a/tests/query/highlights/haxe/members.hx b/tests/query/highlights/haxe/members.hx
new file mode 100644
index 00000000..a12e6d1d
--- /dev/null
+++ b/tests/query/highlights/haxe/members.hx
@@ -0,0 +1,4 @@
+class C { function g(o) { o.meth(); var y = o.fld; freefn(); } }
+// ^ @function
+// ^ @variable.other.member
+// ^ @function
diff --git a/tests/query/highlights/hcl/members.hcl b/tests/query/highlights/hcl/members.hcl
new file mode 100644
index 00000000..f2424142
--- /dev/null
+++ b/tests/query/highlights/hcl/members.hcl
@@ -0,0 +1,4 @@
+a = obj.field
+# ^ @variable.other.member
+c = foo(2)
+# ^ @function.method
diff --git a/tests/query/highlights/java/constructs.java b/tests/query/highlights/java/constructs.java
new file mode 100644
index 00000000..5097a08c
--- /dev/null
+++ b/tests/query/highlights/java/constructs.java
@@ -0,0 +1,12 @@
+class Box {
+// ^ @type
+ boolean method(int count) {
+// ^ @type.builtin
+// ^ @function.method
+ String s = "a\tb";
+// ^ @type
+// ^ @constant.character.escape
+ return helper(count);
+// ^ @function.method
+ }
+}
diff --git a/tests/query/highlights/java/members.java b/tests/query/highlights/java/members.java
new file mode 100644
index 00000000..de7b0cac
--- /dev/null
+++ b/tests/query/highlights/java/members.java
@@ -0,0 +1,4 @@
+class C { void g(O o) { o.meth(); int y = o.fld; int z = Color.RED; } }
+// ^ @function.method
+// ^ @variable.other.member
+// ^ @constant
diff --git a/tests/query/highlights/java/methods.java b/tests/query/highlights/java/methods.java
new file mode 100644
index 00000000..b3e81958
--- /dev/null
+++ b/tests/query/highlights/java/methods.java
@@ -0,0 +1,9 @@
+class C {
+ int m() {
+ invokeit();
+// ^ @function.method
+ obj.doThing();
+// ^ @function.method
+ return 0;
+ }
+}
diff --git a/tests/query/highlights/javascript/constructs.js b/tests/query/highlights/javascript/constructs.js
new file mode 100644
index 00000000..facd64e0
--- /dev/null
+++ b/tests/query/highlights/javascript/constructs.js
@@ -0,0 +1,8 @@
+class Box {
+// ^ @constructor
+ method(count) {
+//^ @function.method
+ return helper(count);
+// ^ @function
+ }
+}
diff --git a/tests/query/highlights/jsx/components.jsx b/tests/query/highlights/jsx/components.jsx
new file mode 100644
index 00000000..2eadaa9a
--- /dev/null
+++ b/tests/query/highlights/jsx/components.jsx
@@ -0,0 +1,7 @@
+function App(props) {
+ const x = obj.field;
+// ^ @variable.other.member
+ return ;
+// ^ @constructor
+// ^ @attribute
+}
diff --git a/tests/query/highlights/jsx/elements.jsx b/tests/query/highlights/jsx/elements.jsx
new file mode 100644
index 00000000..107f16f0
--- /dev/null
+++ b/tests/query/highlights/jsx/elements.jsx
@@ -0,0 +1,12 @@
+function App() {
+// ^ @constructor
+ const name = greet("x");
+// ^ @variable
+// ^ @function
+ return
;
+// ^ @tag
+// ^ @attribute
+// ^ @constructor
+// ^ @attribute
+// ^ @variable
+}
diff --git a/tests/query/highlights/julia/calls.jl b/tests/query/highlights/julia/calls.jl
new file mode 100644
index 00000000..23d86141
--- /dev/null
+++ b/tests/query/highlights/julia/calls.jl
@@ -0,0 +1,8 @@
+function f(x)
+ obj.doThing(x)
+# ^ @function
+ helper(x)
+# ^ @function
+ y = obj.field
+# ^ @variable.other.member
+end
diff --git a/tests/query/highlights/kotlin/calls.kt b/tests/query/highlights/kotlin/calls.kt
new file mode 100644
index 00000000..ac6663ce
--- /dev/null
+++ b/tests/query/highlights/kotlin/calls.kt
@@ -0,0 +1,6 @@
+fun g() {
+ invokeit()
+// ^ @function
+ obj.doThing()
+// ^ @function
+}
diff --git a/tests/query/highlights/kotlin/constructs.kt b/tests/query/highlights/kotlin/constructs.kt
new file mode 100644
index 00000000..da3d06d5
--- /dev/null
+++ b/tests/query/highlights/kotlin/constructs.kt
@@ -0,0 +1,7 @@
+fun method(count: Int): Boolean {
+// ^ @function
+// ^ @variable.parameter
+// ^ @type.builtin
+ return helper(count)
+// ^ @function
+}
diff --git a/tests/query/highlights/kotlin/edge.kt b/tests/query/highlights/kotlin/edge.kt
new file mode 100644
index 00000000..edbe25bc
--- /dev/null
+++ b/tests/query/highlights/kotlin/edge.kt
@@ -0,0 +1,4 @@
+fun f() {
+ val x = "${obj.compute()}"
+// ^ @function
+}
diff --git a/tests/query/highlights/koto/params.koto b/tests/query/highlights/koto/params.koto
new file mode 100644
index 00000000..4302315e
--- /dev/null
+++ b/tests/query/highlights/koto/params.koto
@@ -0,0 +1,4 @@
+f = |a, b|
+ a + b
+# ^ @variable.parameter
+# ^ @variable.parameter
diff --git a/tests/query/highlights/lua/calls.lua b/tests/query/highlights/lua/calls.lua
new file mode 100644
index 00000000..f099104f
--- /dev/null
+++ b/tests/query/highlights/lua/calls.lua
@@ -0,0 +1,4 @@
+invokeit()
+-- ^ @function
+obj:doThing()
+-- ^ @function.method
diff --git a/tests/query/highlights/luau/calls.luau b/tests/query/highlights/luau/calls.luau
new file mode 100644
index 00000000..663aa1e5
--- /dev/null
+++ b/tests/query/highlights/luau/calls.luau
@@ -0,0 +1,6 @@
+local x = obj.field
+-- ^ @variable.other.member
+obj:doThing()
+-- ^ @function.method
+obj.other()
+-- ^ @function
diff --git a/tests/query/highlights/meson/members.meson b/tests/query/highlights/meson/members.meson
new file mode 100644
index 00000000..e17af895
--- /dev/null
+++ b/tests/query/highlights/meson/members.meson
@@ -0,0 +1,4 @@
+x = obj.do_thing()
+# ^ @function
+y = obj.field
+# ^ @variable.other.member
diff --git a/tests/query/highlights/mojo/calls.mojo b/tests/query/highlights/mojo/calls.mojo
new file mode 100644
index 00000000..71b76044
--- /dev/null
+++ b/tests/query/highlights/mojo/calls.mojo
@@ -0,0 +1,5 @@
+fn main():
+ helper(1)
+# ^ @function
+ obj.doThing()
+# ^ @function.method
diff --git a/tests/query/highlights/move/members.move b/tests/query/highlights/move/members.move
new file mode 100644
index 00000000..00a536d7
--- /dev/null
+++ b/tests/query/highlights/move/members.move
@@ -0,0 +1,8 @@
+module a::m {
+ fun f(o: S) {
+ let x = o.val;
+// ^ @variable.other.member
+ let y = vector::length(&o);
+// ^ @function
+ }
+}
diff --git a/tests/query/highlights/nickel/members.ncl b/tests/query/highlights/nickel/members.ncl
new file mode 100644
index 00000000..031b0a6c
--- /dev/null
+++ b/tests/query/highlights/nickel/members.ncl
@@ -0,0 +1,2 @@
+let r = o.field in r
+# ^ @variable.other.member
diff --git a/tests/query/highlights/nim/calls.nim b/tests/query/highlights/nim/calls.nim
new file mode 100644
index 00000000..0ae188e1
--- /dev/null
+++ b/tests/query/highlights/nim/calls.nim
@@ -0,0 +1,5 @@
+proc f() =
+ obj.doThing()
+# ^ @function
+ helper(1)
+# ^ @function
diff --git a/tests/query/highlights/nim/members.nim b/tests/query/highlights/nim/members.nim
new file mode 100644
index 00000000..88adbf65
--- /dev/null
+++ b/tests/query/highlights/nim/members.nim
@@ -0,0 +1,5 @@
+proc f(o: Obj) =
+ let v = o.field
+ # ^ @variable.other.member
+ echo o.meth(1)
+ # ^ @function
diff --git a/tests/query/highlights/nix/calls.nix b/tests/query/highlights/nix/calls.nix
new file mode 100644
index 00000000..242d28d8
--- /dev/null
+++ b/tests/query/highlights/nix/calls.nix
@@ -0,0 +1,7 @@
+{
+ x = map double items;
+// ^ @function.builtin
+ y = builtins.length items;
+// ^ @constant.builtin
+// ^ @function.builtin
+}
diff --git a/tests/query/highlights/nix/constructs.nix b/tests/query/highlights/nix/constructs.nix
new file mode 100644
index 00000000..cebef4ac
--- /dev/null
+++ b/tests/query/highlights/nix/constructs.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }@args:
+# ^ @variable.parameter.builtin
+let
+ msg = "${builtins.toString 1}";
+# ^ @function.builtin
+ hasit = args ? foo;
+# ^ @variable.other.member
+in
+pkgs.mkDerivation {
+# ^ @function
+ meta.license = pkgs.lib.mit;
+# ^ @variable.other.member
+}
diff --git a/tests/query/highlights/nu/calls.nu b/tests/query/highlights/nu/calls.nu
new file mode 100644
index 00000000..bcba7bca
--- /dev/null
+++ b/tests/query/highlights/nu/calls.nu
@@ -0,0 +1,4 @@
+def main [] {
+ print "hi"
+# ^ @function.builtin
+}
diff --git a/tests/query/highlights/ocaml/calls.ml b/tests/query/highlights/ocaml/calls.ml
new file mode 100644
index 00000000..47059628
--- /dev/null
+++ b/tests/query/highlights/ocaml/calls.ml
@@ -0,0 +1,5 @@
+let _ = helper x
+(* ^ @function *)
+let _ = Mod.doThing 1
+(* ^ @namespace *)
+(* ^ @function *)
diff --git a/tests/query/highlights/ocaml/constructs.ml b/tests/query/highlights/ocaml/constructs.ml
new file mode 100644
index 00000000..3ddaa420
--- /dev/null
+++ b/tests/query/highlights/ocaml/constructs.ml
@@ -0,0 +1,10 @@
+type shape = Circle of float
+(* ^ @constructor *)
+let area s = match s with
+(* ^ @function *)
+ | Rectangle r -> r
+(* ^ @constructor *)
+let p = { name = 1 }
+(* ^ @variable.other.member *)
+module M = struct end
+(* ^ @namespace *)
diff --git a/tests/query/highlights/perl/calls.pl b/tests/query/highlights/perl/calls.pl
new file mode 100644
index 00000000..921133e6
--- /dev/null
+++ b/tests/query/highlights/perl/calls.pl
@@ -0,0 +1,6 @@
+sub f {
+ $obj->doThing();
+# ^ @function.method
+ helper();
+# ^ @function
+}
diff --git a/tests/query/highlights/php/calls.php b/tests/query/highlights/php/calls.php
new file mode 100644
index 00000000..bf74d9a6
--- /dev/null
+++ b/tests/query/highlights/php/calls.php
@@ -0,0 +1,5 @@
+doThing();
+// ^ @function.method
diff --git a/tests/query/highlights/php/constructs.php b/tests/query/highlights/php/constructs.php
new file mode 100644
index 00000000..d9625dc6
--- /dev/null
+++ b/tests/query/highlights/php/constructs.php
@@ -0,0 +1,9 @@
+doThing();
+// ^ @function.method
+ }
+}
diff --git a/tests/query/highlights/php/edge.php b/tests/query/highlights/php/edge.php
new file mode 100644
index 00000000..8937b8c0
--- /dev/null
+++ b/tests/query/highlights/php/edge.php
@@ -0,0 +1,3 @@
+compute()}";
+// ^ @function.method
diff --git a/tests/query/highlights/pkl/members.pkl b/tests/query/highlights/pkl/members.pkl
new file mode 100644
index 00000000..e9a4d1ca
--- /dev/null
+++ b/tests/query/highlights/pkl/members.pkl
@@ -0,0 +1,4 @@
+x = o.field
+// ^ @variable.other.member
+y = o.run(2)
+// ^ @function.method
diff --git a/tests/query/highlights/python/calls.py b/tests/query/highlights/python/calls.py
new file mode 100644
index 00000000..e64578d4
--- /dev/null
+++ b/tests/query/highlights/python/calls.py
@@ -0,0 +1,3 @@
+def helper():
+ invokeit()
+# ^ @function
diff --git a/tests/query/highlights/python/constructs.py b/tests/query/highlights/python/constructs.py
new file mode 100644
index 00000000..223e2298
--- /dev/null
+++ b/tests/query/highlights/python/constructs.py
@@ -0,0 +1,11 @@
+import os
+# ^ @namespace
+class Widget:
+# ^ @type
+ def method(self, count: int) -> bool:
+# ^ @function
+# ^ @variable.builtin
+# ^ @variable.parameter
+# ^ @type.builtin
+ return self.helper(count)
+# ^ @function.method
diff --git a/tests/query/highlights/python/edge.py b/tests/query/highlights/python/edge.py
new file mode 100644
index 00000000..9020394e
--- /dev/null
+++ b/tests/query/highlights/python/edge.py
@@ -0,0 +1,8 @@
+def h():
+ m = obj.method
+# ^ @variable.other.member
+ s = f"{obj.compute()}"
+# ^ @function.method
+ obj.first().second()
+# ^ @function.method
+# ^ @function.method
diff --git a/tests/query/highlights/r/calls.r b/tests/query/highlights/r/calls.r
new file mode 100644
index 00000000..4020bc31
--- /dev/null
+++ b/tests/query/highlights/r/calls.r
@@ -0,0 +1,6 @@
+f <- function() {
+ helper(1)
+# ^ @function
+ pkg::func(2)
+# ^ @function
+}
diff --git a/tests/query/highlights/r/members.r b/tests/query/highlights/r/members.r
new file mode 100644
index 00000000..7e71600e
--- /dev/null
+++ b/tests/query/highlights/r/members.r
@@ -0,0 +1,3 @@
+f <- function(o) { foo(1); o$fld }
+# ^ @function
+# ^ @variable.other.member
diff --git a/tests/query/highlights/rescript/calls.res b/tests/query/highlights/rescript/calls.res
new file mode 100644
index 00000000..c1a2648d
--- /dev/null
+++ b/tests/query/highlights/rescript/calls.res
@@ -0,0 +1,5 @@
+let g = foo(2)
+// ^ @function
+let h = obj.field
+// ^ @variable
+// ^ @variable.other.member
diff --git a/tests/query/highlights/ripple/calls.ripple b/tests/query/highlights/ripple/calls.ripple
new file mode 100644
index 00000000..98f7be4f
--- /dev/null
+++ b/tests/query/highlights/ripple/calls.ripple
@@ -0,0 +1,9 @@
+component App() {
+// ^ @function
+ let x = obj.field;
+// ^ @variable.other.member
+ obj.method(1);
+// ^ @function.method
+ foo(2);
+//^ @function
+}
diff --git a/tests/query/highlights/ruby/calls.rb b/tests/query/highlights/ruby/calls.rb
new file mode 100644
index 00000000..b78da268
--- /dev/null
+++ b/tests/query/highlights/ruby/calls.rb
@@ -0,0 +1,4 @@
+invokeit(1)
+^ @function.method
+x.doThing(2)
+ ^ @function.method
diff --git a/tests/query/highlights/ruby/constructs.rb b/tests/query/highlights/ruby/constructs.rb
new file mode 100644
index 00000000..adac78de
--- /dev/null
+++ b/tests/query/highlights/ruby/constructs.rb
@@ -0,0 +1,9 @@
+class Box
+# ^ @constructor
+ def method(count)
+# ^ @function.method
+# ^ @variable.parameter
+ helper(count)
+# ^ @function.method
+ end
+end
diff --git a/tests/query/highlights/ruby/edge.rb b/tests/query/highlights/ruby/edge.rb
new file mode 100644
index 00000000..b5cd7e90
--- /dev/null
+++ b/tests/query/highlights/ruby/edge.rb
@@ -0,0 +1,2 @@
+x = "#{obj.compute} ok"
+# ^ @function.method
diff --git a/tests/query/highlights/rust/calls.rs b/tests/query/highlights/rust/calls.rs
new file mode 100644
index 00000000..c6cf6781
--- /dev/null
+++ b/tests/query/highlights/rust/calls.rs
@@ -0,0 +1,6 @@
+fn main() {
+ invokeit();
+// ^ @function
+ let s = String::new();
+// ^ @type
+}
diff --git a/tests/query/highlights/rust/chains.rs b/tests/query/highlights/rust/chains.rs
new file mode 100644
index 00000000..196fe141
--- /dev/null
+++ b/tests/query/highlights/rust/chains.rs
@@ -0,0 +1,7 @@
+fn m() {
+ let r = a.b.c().d.e();
+// ^ @variable.other.member
+// ^ @function.method
+// ^ @variable.other.member
+// ^ @function.method
+}
diff --git a/tests/query/highlights/rust/constructs.rs b/tests/query/highlights/rust/constructs.rs
new file mode 100644
index 00000000..287a3263
--- /dev/null
+++ b/tests/query/highlights/rust/constructs.rs
@@ -0,0 +1,13 @@
+use std::fmt;
+// ^ @namespace
+enum Color { Red }
+// ^ @type.enum.variant
+fn f(self) {
+// ^ @variable.builtin
+ println!("ok");
+// ^ @function.macro
+ self.helper();
+// ^ @function.method
+ let p = Point {};
+// ^ @constructor
+}
diff --git a/tests/query/highlights/rust/edge.rs b/tests/query/highlights/rust/edge.rs
new file mode 100644
index 00000000..7491c9fc
--- /dev/null
+++ b/tests/query/highlights/rust/edge.rs
@@ -0,0 +1,10 @@
+fn m() {
+ obj.first().second();
+// ^ @function.method
+// ^ @function.method
+ let n = outer(inner(x));
+// ^ @function
+// ^ @function
+ let f = build().field;
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/rust/match_patterns.rs b/tests/query/highlights/rust/match_patterns.rs
new file mode 100644
index 00000000..01329b60
--- /dev/null
+++ b/tests/query/highlights/rust/match_patterns.rs
@@ -0,0 +1,15 @@
+fn m(x: Shape) {
+ match x {
+ crate::Shape::Circle(r) => r,
+// ^ @type
+// ^ @type.enum.variant
+ geom::Style::Bold { weight } => weight,
+// ^ @type
+// ^ @type.enum.variant
+// ^ @variable.other.member
+ Flag::MAX => 0,
+// ^ @type
+// ^ @constant
+ _ => 1,
+ };
+}
diff --git a/tests/query/highlights/rust/parameters.rs b/tests/query/highlights/rust/parameters.rs
new file mode 100644
index 00000000..e50ac65b
--- /dev/null
+++ b/tests/query/highlights/rust/parameters.rs
@@ -0,0 +1,5 @@
+fn helper(count: i32) -> i32 {
+// ^ @variable.parameter
+// ^ @type.builtin
+ count
+}
diff --git a/tests/query/highlights/scala/edge.scala b/tests/query/highlights/scala/edge.scala
new file mode 100644
index 00000000..f69972e9
--- /dev/null
+++ b/tests/query/highlights/scala/edge.scala
@@ -0,0 +1,4 @@
+object O {
+ val x = s"${obj.compute()}"
+// ^ @function.method
+}
diff --git a/tests/query/highlights/scala/methods.scala b/tests/query/highlights/scala/methods.scala
new file mode 100644
index 00000000..8ac77a30
--- /dev/null
+++ b/tests/query/highlights/scala/methods.scala
@@ -0,0 +1,10 @@
+object O {
+ def m() = {
+ invokeit()
+// ^ @function
+ obj.doThing()
+// ^ @function.method
+ val x = obj.field
+// ^ @variable.other.member
+ }
+}
diff --git a/tests/query/highlights/scheme/calls.scm b/tests/query/highlights/scheme/calls.scm
new file mode 100644
index 00000000..16889433
--- /dev/null
+++ b/tests/query/highlights/scheme/calls.scm
@@ -0,0 +1,5 @@
+(fold-left + 0 items)
+;^ @function
+; ^ @operator
+(cons x y)
+;^ @function.builtin
diff --git a/tests/query/highlights/scheme/forms.scm b/tests/query/highlights/scheme/forms.scm
new file mode 100644
index 00000000..5cf4194e
--- /dev/null
+++ b/tests/query/highlights/scheme/forms.scm
@@ -0,0 +1,7 @@
+(define (process items)
+;^ @keyword
+; ^ @function
+ (cons items items))
+; ^ @variable.parameter
+(lambda (x) x)
+;^ @keyword
diff --git a/tests/query/highlights/solidity/calls.sol b/tests/query/highlights/solidity/calls.sol
new file mode 100644
index 00000000..48c21e00
--- /dev/null
+++ b/tests/query/highlights/solidity/calls.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() public {
+ obj.doThing();
+// ^ @function.method
+ helper(1);
+// ^ @function
+ uint x = obj.field;
+// ^ @variable.other.member
+ }
+}
diff --git a/tests/query/highlights/sourcepawn/calls.sp b/tests/query/highlights/sourcepawn/calls.sp
new file mode 100644
index 00000000..a0758262
--- /dev/null
+++ b/tests/query/highlights/sourcepawn/calls.sp
@@ -0,0 +1,2 @@
+void f() { foo(); }
+// ^ @function
diff --git a/tests/query/highlights/sql/calls.sql b/tests/query/highlights/sql/calls.sql
new file mode 100644
index 00000000..6fa119ca
--- /dev/null
+++ b/tests/query/highlights/sql/calls.sql
@@ -0,0 +1,3 @@
+SELECT count(*) FROM t.users;
+-- ^ @function.method
+-- ^ @variable.other.member
diff --git a/tests/query/highlights/sway/calls.sw b/tests/query/highlights/sway/calls.sw
new file mode 100644
index 00000000..2288d462
--- /dev/null
+++ b/tests/query/highlights/sway/calls.sw
@@ -0,0 +1,8 @@
+fn main() {
+ obj.doThing();
+// ^ @function
+ let x = obj.field;
+// ^ @variable.other.member
+ helper(1);
+// ^ @function
+}
diff --git a/tests/query/highlights/swift/methods.swift b/tests/query/highlights/swift/methods.swift
new file mode 100644
index 00000000..9449a685
--- /dev/null
+++ b/tests/query/highlights/swift/methods.swift
@@ -0,0 +1,8 @@
+func f() {
+ invokeit()
+// ^ @function
+ obj.doThing()
+// ^ @function
+ _ = obj.field
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/tsx/components.tsx b/tests/query/highlights/tsx/components.tsx
new file mode 100644
index 00000000..bbff647d
--- /dev/null
+++ b/tests/query/highlights/tsx/components.tsx
@@ -0,0 +1,8 @@
+function App(props: Props) {
+// ^ @type
+ const x = obj.field;
+// ^ @variable.other.member
+ return ;
+// ^ @constructor
+// ^ @attribute
+}
diff --git a/tests/query/highlights/tsx/elements.tsx b/tests/query/highlights/tsx/elements.tsx
new file mode 100644
index 00000000..e64299de
--- /dev/null
+++ b/tests/query/highlights/tsx/elements.tsx
@@ -0,0 +1,11 @@
+function add(a: number): number {
+// ^ @function
+// ^ @variable.parameter
+// ^ @type.builtin
+ return a + 1;
+}
+const el = hi;
+// ^ @constructor
+// ^ @attribute
+// ^ @function
+// ^ @constructor
diff --git a/tests/query/highlights/typescript/calls.ts b/tests/query/highlights/typescript/calls.ts
new file mode 100644
index 00000000..2e450c71
--- /dev/null
+++ b/tests/query/highlights/typescript/calls.ts
@@ -0,0 +1,6 @@
+function helper(count: number): void {
+// ^ @variable.parameter
+// ^ @type.builtin
+ invokeit(count);
+//^ @function
+}
diff --git a/tests/query/highlights/typescript/constructs.ts b/tests/query/highlights/typescript/constructs.ts
new file mode 100644
index 00000000..eba2a3b6
--- /dev/null
+++ b/tests/query/highlights/typescript/constructs.ts
@@ -0,0 +1,12 @@
+interface Shape { size: number; }
+// ^ @type
+// ^ @variable.other.member
+// ^ @type.builtin
+class Box {
+// ^ @type
+ method(count: number): void {
+//^ @function.method
+ obj.doThing();
+// ^ @function.method
+ }
+}
diff --git a/tests/query/highlights/typescript/edge.ts b/tests/query/highlights/typescript/edge.ts
new file mode 100644
index 00000000..6e370c82
--- /dev/null
+++ b/tests/query/highlights/typescript/edge.ts
@@ -0,0 +1,7 @@
+const m = obj.method;
+// ^ @variable.other.member
+const s = `${obj.compute()}`;
+// ^ @function.method
+obj.first().second();
+// ^ @function.method
+// ^ @function.method
diff --git a/tests/query/highlights/v/members.v b/tests/query/highlights/v/members.v
new file mode 100644
index 00000000..690327a7
--- /dev/null
+++ b/tests/query/highlights/v/members.v
@@ -0,0 +1,6 @@
+fn f(o Obj) {
+ o.do_thing()
+// ^ @function.method
+ y := o.field
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/vala/members.vala b/tests/query/highlights/vala/members.vala
new file mode 100644
index 00000000..095af4cf
--- /dev/null
+++ b/tests/query/highlights/vala/members.vala
@@ -0,0 +1,4 @@
+void g(Obj o) { o.meth(); var a = o.fld; var b = Foo.BAR; }
+// ^ @function
+// ^ @variable.other.member
+// ^ @constant
diff --git a/tests/query/highlights/vim/members.vim b/tests/query/highlights/vim/members.vim
new file mode 100644
index 00000000..10d430ca
--- /dev/null
+++ b/tests/query/highlights/vim/members.vim
@@ -0,0 +1,6 @@
+function! F(o)
+ call G(a:o)
+" ^ @function
+ let x = a:o.prop
+" ^ @variable.other.member
+endfunction
diff --git a/tests/query/highlights/wesl/calls.wesl b/tests/query/highlights/wesl/calls.wesl
new file mode 100644
index 00000000..72625818
--- /dev/null
+++ b/tests/query/highlights/wesl/calls.wesl
@@ -0,0 +1,7 @@
+fn run() {
+// ^ @function
+ let y = bar(2);
+// ^ @function
+ let z = obj.field;
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/wgsl/members.wgsl b/tests/query/highlights/wgsl/members.wgsl
new file mode 100644
index 00000000..cdd616a0
--- /dev/null
+++ b/tests/query/highlights/wgsl/members.wgsl
@@ -0,0 +1,8 @@
+fn f() {
+ let y = bar(2);
+// ^ @function
+ let z = obj.field;
+// ^ @variable.other.member
+ let w = abs(z);
+// ^ @function.builtin
+}
diff --git a/tests/query/highlights/zig/calls.zig b/tests/query/highlights/zig/calls.zig
new file mode 100644
index 00000000..96b5fbff
--- /dev/null
+++ b/tests/query/highlights/zig/calls.zig
@@ -0,0 +1,10 @@
+const std = @import("std");
+// ^ @keyword.control.import
+pub fn main() void {
+ obj.doThing();
+// ^ @function.method
+ helper(x);
+// ^ @function
+ const y = obj.field;
+// ^ @variable.other.member
+}
diff --git a/tests/query/highlights/zig/locals.zig b/tests/query/highlights/zig/locals.zig
new file mode 100644
index 00000000..694e8bd0
--- /dev/null
+++ b/tests/query/highlights/zig/locals.zig
@@ -0,0 +1,11 @@
+fn sum(xs: []u32) u32 {
+// ^ @variable.parameter
+ var total: u32 = 0;
+// ^ @variable
+ for (xs) |item| {
+// ^ @variable.parameter
+// ^ @variable.parameter
+ total += item;
+// ^ @variable.parameter
+ }
+}