This test tests the token modifier "shadowing", which requires adding it to the client capabilities

-- settings.json --
{
	"semanticTokens": true,
	"analyses": {"unusedfunc": false}
}
-- capabilities.json --
{
	"textDocument": {
		"semanticTokens": {
			"tokenModifiers": ["definition", "number", "pointer", "readonly", "shadowing", "signature", "struct"]
		}
	}
}
-- universe/universe.go --
package p

func make() { //@token("make", "function", "definition signature shadowing")
}

type rune = byte //@token("rune", "type", "definition number shadowing")

const true = false //@token("true", "variable", "definition readonly shadowing")

func _() {
	new := 3 //@token("new", "variable", "definition number shadowing")
	len := 4 //@token("len", "variable", "definition number shadowing")
	_, _ = new, len
}
-- top-level/f1.go --
package p

func _() {
	foo := 1 //@token("foo", "variable", "definition number shadowing")
	bar := 1 //@token("bar", "variable", "definition number shadowing")
	baz := 1 //@token("baz", "variable", "definition number shadowing")
	qux := 1 //@token("qux", "variable", "definition number shadowing")
	_, _, _, _ = foo, bar, baz, qux
}

func _() {
	other := 3 //@token("other", "variable", "definition number")
	_ = other
}

var foo = 1

func bar() {}

type baz int

const qux = 1

func _() {
	foo := 1 //@token("foo", "variable", "definition number shadowing")
	bar := 1 //@token("bar", "variable", "definition number shadowing")
	baz := 1 //@token("baz", "variable", "definition number shadowing")
	qux := 1 //@token("qux", "variable", "definition number shadowing")
	_, _, _, _ = foo, bar, baz, qux
}

func _() {
	other := 3 //@token("other", "variable", "definition number")
	_ = other
}
-- top-level/f2.go --
package p

func _() {
	foo := 1 //@token("foo", "variable", "definition number shadowing")
	bar := 1 //@token("bar", "variable", "definition number shadowing")
	baz := 1 //@token("baz", "variable", "definition number shadowing")
	qux := 1 //@token("qux", "variable", "definition number shadowing")
	_, _, _, _ = foo, bar, baz, qux
}

func _() {
	other := 3 //@token("other", "variable", "definition number")
	_ = other
}
-- nested/nested.go --
package p

func _() {
	{
		foo := 3 //@token("foo", "variable", "definition number")
		_ = foo
	}

	{
		if foo := 3; true { //@token("foo", "variable", "definition number")
			_ = foo
		}
	}

	{
		for foo := 3; true; { //@token("foo", "variable", "definition number")
			_ = foo
		}
	}

	foo := any(0)
	bar := 1
	_ = bar

	switch foo := foo.(type) { //@token("foo", "variable", "definition shadowing")
	case int:
		_ = foo
	}
	switch bar := foo.(type) { //@token("bar", "variable", "definition shadowing")
	case int:
		_ = bar
	}
	switch baz := foo.(type) { //@token("baz", "variable", "definition")
	case int:
		_ = baz
		{
			baz := 3 //@token("baz", "variable", "definition number shadowing")
			_ = baz
		}
	}

	{
		foo := 3 //@token("foo", "variable", "definition number shadowing")
		_ = foo
	}

	if foo := 3; true { //@token("foo", "variable", "definition number shadowing")
		_ = foo
	}

	for foo := 3; true; { //@token("foo", "variable", "definition number shadowing")
		_ = foo
	}
}
-- imports/imports.go --
package p

import "net/url"
import url2 "net/url"

func _() {
	url, err := url.Parse("https://go.dev") //@token("url", "variable", "definition pointer shadowing")
	_, _ = url, err

	url2, err := url2.Parse("https://go.dev") //@token("url2", "variable", "definition pointer shadowing")
	_, _ = url2, err
}
-- funcs/funcs.go --
package p

var foo = 1
var bar = 1
var baz = 1

type _ func(foo int) (bar int) //@token("foo", "parameter", "definition number"), token("bar", "variable", "definition number")

func f(foo int) (bar int) { //@token("foo", "parameter", "definition number shadowing"), token("bar", "variable", "definition number shadowing")
	_ = foo
	return 0
}

type s struct{}

func (baz s) f(foo int) (bar int) { //@token("baz", "parameter", "definition struct shadowing"), token("foo", "parameter", "definition number shadowing"), token("bar", "variable", "definition number shadowing")
	_ = foo
	return 0
}
-- generics/generics.go --
package p

type T int

type s[T any] struct{} //@token("T", "typeParameter", "definition shadowing"),

func (s[T]) f() { //@token("T", "typeParameter", "definition shadowing"),
}
