This test checks the output of semanticTokens modifiers.
(including test for #70219.)

-- settings.json --
{
	"semanticTokens": true
}

-- flags --
-ignore_extra_diags

-- standard.go --
package modifiers

func _() {
	a, b := false, true //@ token("false", "variable", "readonly defaultLibrary"), token("true", "variable", "readonly defaultLibrary")
}

const (
	c = iota //@ token("iota", "variable", "readonly defaultLibrary number")
)

-- custom.go --
package modifiers

type Foo struct{}

func _() {
	var array [2]string //@ token("array", "variable", "definition array")
	array = [2]string{"", ""} //@ token("array", "variable", "array")

	var b bool //@ token("b", "variable", "definition bool")
	b = true //@ token("b", "variable", "bool")

	var c chan string //@ token("c", "variable", "definition chan shadowing")
	c = make(chan string) //@ token("c", "variable", "chan")

	type inter interface{} //@ token("inter", "type", "definition interface")

	var m map[string]string //@ token("m", "variable", "definition map")
	m = make(map[string]string) //@ token("m", "variable", "map")

	var number int //@ token("number", "variable", "definition number")
	number = 1 //@ token("number", "variable", "number")

	var ptr *Foo //@ token("ptr", "variable", "definition pointer")
	ptr = nil //@ token("ptr", "variable", "pointer")

	var sig func(string) //@ token("sig", "variable", "definition signature")
	sig = nil //@ token("sig", "variable", "signature")

	var slice []string //@ token("slice", "variable", "definition slice")
	slice = nil //@ token("slice", "variable", "slice")

	var str string //@ token("str", "variable", "definition string")
	str = "" //@ token("str", "variable", "string")

	var foo Foo //@ token("foo", "variable", "definition struct")
	foo = Foo{} //@ token("foo", "variable", "struct")
}

// Tests of various types.Var kinds (#77344).

type T struct {
	field int //@ token("field", "property", "definition number")
}

func (recv *T) method(param int) (result int) { //@ token("recv", "parameter", "definition pointer"), token("param", "parameter", "definition number"), token("result", "variable", "definition number")
     var local int //@ token("local", "variable", "definition number")
}

var global int //@ token("global", "variable", "definition static number")
