Basic tests of textDocument/documentSymbols.

-- symbol.go --
package main

//@symbol(want)

import "io"

var _ = 1

var x = 42

var nested struct {
	nestedField struct {
		f int
	}
}

const y = 43

type Number int

type Alias = string

type NumberAlias = Number

type (
	Boolean   bool
	BoolAlias = bool
)

type Foo struct {
	Quux
	W         io.Writer
	Bar       int
	baz       string
	funcField func(int) int
}

type Quux struct {
	X, Y float64
}

type EmptyStruct struct{}

func (f Foo) Baz() string {
	return f.baz
}

func _() {}

func (q *Quux) Do() {}

func main() {
}

type Stringer interface {
	String() string
}

type ABer interface {
	B()
	A() string
}

type WithEmbeddeds interface {
	Do()
	ABer
	io.Writer
}

type EmptyInterface interface{}

func Dunk() int { return 0 }

func dunk() {}

-- @want --
(*Quux).Do "func()"
(Foo).Baz "func() string" +2 lines
ABer "interface{...}" +3 lines
ABer.A "func() string"
ABer.B "func()"
Alias "string"
BoolAlias "bool"
Boolean "bool"
Dunk "func() int"
EmptyInterface "interface{}"
EmptyStruct "struct{}"
Foo "struct{...}" +6 lines
Foo.Bar "int"
Foo.Quux "Quux"
Foo.W "io.Writer"
Foo.baz "string"
Foo.funcField "func(int) int"
Number "int"
NumberAlias "Number"
Quux "struct{...}" +2 lines
Quux.X "float64"
Quux.Y "float64"
Stringer "interface{...}" +2 lines
Stringer.String "func() string"
WithEmbeddeds "interface{...}" +4 lines
WithEmbeddeds.ABer "ABer"
WithEmbeddeds.Do "func()"
WithEmbeddeds.Writer "io.Writer"
dunk "func()"
main "func()" +1 lines
nested "struct{...}" +4 lines
nested.nestedField "struct{...}" +2 lines
nested.nestedField.f "int"
x ""
y ""
