summaryrefslogtreecommitdiff
path: root/libgo/go/cmd/vet/testdata/composite.go
blob: 3fe3eac78cb38a7ccf32d2f76f57c964d1bee8e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file contains the test for untagged struct literals.

package testdata

import (
	"flag"
	"go/scanner"
	"image"
	"unicode"

	"path/to/unknownpkg"
)

var Okay1 = []string{
	"Name",
	"Usage",
	"DefValue",
}

var Okay2 = map[string]bool{
	"Name":     true,
	"Usage":    true,
	"DefValue": true,
}

var Okay3 = struct {
	X string
	Y string
	Z string
}{
	"Name",
	"Usage",
	"DefValue",
}

var Okay4 = []struct {
	A int
	B int
}{
	{1, 2},
	{3, 4},
}

type MyStruct struct {
	X string
	Y string
	Z string
}

var Okay5 = &MyStruct{
	"Name",
	"Usage",
	"DefValue",
}

var Okay6 = []MyStruct{
	{"foo", "bar", "baz"},
	{"aa", "bb", "cc"},
}

var Okay7 = []*MyStruct{
	{"foo", "bar", "baz"},
	{"aa", "bb", "cc"},
}

// Testing is awkward because we need to reference things from a separate package
// to trigger the warnings.

var goodStructLiteral = flag.Flag{
	Name:  "Name",
	Usage: "Usage",
}
var badStructLiteral = flag.Flag{ // ERROR "unkeyed fields"
	"Name",
	"Usage",
	nil, // Value
	"DefValue",
}

// SpecialCase is a named slice of CaseRange to test issue 9171.
var goodNamedSliceLiteral = unicode.SpecialCase{
	{Lo: 1, Hi: 2},
	unicode.CaseRange{Lo: 1, Hi: 2},
}
var badNamedSliceLiteral = unicode.SpecialCase{
	{1, 2},                  // ERROR "unkeyed fields"
	unicode.CaseRange{1, 2}, // ERROR "unkeyed fields"
}

// ErrorList is a named slice, so no warnings should be emitted.
var goodScannerErrorList = scanner.ErrorList{
	&scanner.Error{Msg: "foobar"},
}
var badScannerErrorList = scanner.ErrorList{
	&scanner.Error{"foobar"}, // ERROR "unkeyed fields"
}

// Check whitelisted structs: if vet is run with --compositewhitelist=false,
// this line triggers an error.
var whitelistedPoint = image.Point{1, 2}

// Do not check type from unknown package.
// See issue 15408.
var unknownPkgVar = unknownpkg.Foobar{"foo", "bar"}

// A named pointer slice of CaseRange to test issue 23539. In
// particular, we're interested in how some slice elements omit their
// type.
var goodNamedPointerSliceLiteral = []*unicode.CaseRange{
	{Lo: 1, Hi: 2},
	&unicode.CaseRange{Lo: 1, Hi: 2},
}
var badNamedPointerSliceLiteral = []*unicode.CaseRange{
	{1, 2},                   // ERROR "unkeyed fields"
	&unicode.CaseRange{1, 2}, // ERROR "unkeyed fields"
}