1// Copyright 2012 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// This file contains the test for untagged struct literals. 6 7package a 8 9import ( 10 "flag" 11 "go/scanner" 12 "go/token" 13 "image" 14 "unicode" 15) 16 17var Okay1 = []string{ 18 "Name", 19 "Usage", 20 "DefValue", 21} 22 23var Okay2 = map[string]bool{ 24 "Name": true, 25 "Usage": true, 26 "DefValue": true, 27} 28 29var Okay3 = struct { 30 X string 31 Y string 32 Z string 33}{ 34 "Name", 35 "Usage", 36 "DefValue", 37} 38 39var Okay4 = []struct { 40 A int 41 B int 42}{ 43 {1, 2}, 44 {3, 4}, 45} 46 47type MyStruct struct { 48 X string 49 Y string 50 Z string 51} 52 53var Okay5 = &MyStruct{ 54 "Name", 55 "Usage", 56 "DefValue", 57} 58 59var Okay6 = []MyStruct{ 60 {"foo", "bar", "baz"}, 61 {"aa", "bb", "cc"}, 62} 63 64var Okay7 = []*MyStruct{ 65 {"foo", "bar", "baz"}, 66 {"aa", "bb", "cc"}, 67} 68 69// Testing is awkward because we need to reference things from a separate package 70// to trigger the warnings. 71 72var goodStructLiteral = flag.Flag{ 73 Name: "Name", 74 Usage: "Usage", 75} 76var badStructLiteral = flag.Flag{ // want "unkeyed fields" 77 "Name", 78 "Usage", 79 nil, // Value 80 "DefValue", 81} 82 83var delta [3]rune 84 85// SpecialCase is a named slice of CaseRange to test issue 9171. 86var goodNamedSliceLiteral = unicode.SpecialCase{ 87 {Lo: 1, Hi: 2, Delta: delta}, 88 unicode.CaseRange{Lo: 1, Hi: 2, Delta: delta}, 89} 90var badNamedSliceLiteral = unicode.SpecialCase{ 91 {1, 2, delta}, // want "unkeyed fields" 92 unicode.CaseRange{1, 2, delta}, // want "unkeyed fields" 93} 94 95// ErrorList is a named slice, so no warnings should be emitted. 96var goodScannerErrorList = scanner.ErrorList{ 97 &scanner.Error{Msg: "foobar"}, 98} 99var badScannerErrorList = scanner.ErrorList{ 100 &scanner.Error{token.Position{}, "foobar"}, // want "unkeyed fields" 101} 102 103// Check whitelisted structs: if vet is run with --compositewhitelist=false, 104// this line triggers an error. 105var whitelistedPoint = image.Point{1, 2} 106 107// Do not check type from unknown package. 108// See issue 15408. 109var unknownPkgVar = unicode.NoSuchType{"foo", "bar"} 110 111// A named pointer slice of CaseRange to test issue 23539. In 112// particular, we're interested in how some slice elements omit their 113// type. 114var goodNamedPointerSliceLiteral = []*unicode.CaseRange{ 115 {Lo: 1, Hi: 2}, 116 &unicode.CaseRange{Lo: 1, Hi: 2}, 117} 118var badNamedPointerSliceLiteral = []*unicode.CaseRange{ 119 {1, 2, delta}, // want "unkeyed fields" 120 &unicode.CaseRange{1, 2, delta}, // want "unkeyed fields" 121} 122 123// unicode.Range16 is whitelisted, so there'll be no vet error 124var range16 = unicode.Range16{0xfdd0, 0xfdef, 1} 125 126// unicode.Range32 is whitelisted, so there'll be no vet error 127var range32 = unicode.Range32{0x1fffe, 0x1ffff, 1} 128