-- inlayHint --
package inlayHint //@inlayHint("package")

import "fmt"

func hello(name string) string {
	return "Hello " + name
}

func helloWorld() string {
	return hello(<name: >"World")
}

type foo struct{}

func (*foo) bar(baz string, qux int) int {
	if baz != "" {
		return qux + 1
	}
	return qux
}

func kase(foo int, bar bool, baz ...string) {
	fmt.Println(<a...: >foo, bar, baz)
}

func kipp(foo string, bar, baz string) {
	fmt.Println(<a...: >foo, bar, baz)
}

func plex(foo, bar string, baz string) {
	fmt.Println(<a...: >foo, bar, baz)
}

func tars(foo string, bar, baz string) {
	fmt.Println(<a...: >foo, bar, baz)
}

func foobar() {
	var x foo
	x.bar(<baz: >"", <qux: >1)
	kase(<foo: >0, <bar: >true, <baz...: >"c", "d", "e")
	kipp(<foo: >"a", <bar: >"b", <baz: >"c")
	plex(<foo: >"a", <bar: >"b", <baz: >"c")
	tars(<foo: >"a", <bar: >"b", <baz: >"c")
	foo< string>, bar< string>, baz< string> := "a", "b", "c"
	kipp(foo, bar, baz)
	plex(<foo: >"a", bar, baz)
	tars(<foo: >foo+foo, <bar: >(bar), <baz: >"c")

}

