| 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"), |
| } |