Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / go / analysis / passes / structtag / testdata / src / a / a.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/analysis/passes/structtag/testdata/src/a/a.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/analysis/passes/structtag/testdata/src/a/a.go
new file mode 100644 (file)
index 0000000..8b1cea1
--- /dev/null
@@ -0,0 +1,140 @@
+// Copyright 2010 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 canonical struct tags.
+
+package a
+
+import (
+       "a/b"
+       "encoding/xml"
+)
+
+type StructTagTest struct {
+       A   int "hello"            // want "`hello` not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
+       B   int "\tx:\"y\""        // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
+       C   int "x:\"y\"\tx:\"y\"" // want "not compatible with reflect.StructTag.Get"
+       D   int "x:`y`"            // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
+       E   int "ct\brl:\"char\""  // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
+       F   int `:"emptykey"`      // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
+       G   int `x:"noEndQuote`    // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
+       H   int `x:"trunc\x0"`     // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
+       I   int `x:"foo",y:"bar"`  // want "not compatible with reflect.StructTag.Get: key:.value. pairs not separated by spaces"
+       J   int `x:"foo"y:"bar"`   // want "not compatible with reflect.StructTag.Get: key:.value. pairs not separated by spaces"
+       OK0 int `x:"y" u:"v" w:""`
+       OK1 int `x:"y:z" u:"v" w:""` // note multiple colons.
+       OK2 int "k0:\"values contain spaces\" k1:\"literal\ttabs\" k2:\"and\\tescaped\\tabs\""
+       OK3 int `under_scores:"and" CAPS:"ARE_OK"`
+}
+
+type UnexportedEncodingTagTest struct {
+       x int `json:"xx"` // want "struct field x has json tag but is not exported"
+       y int `xml:"yy"`  // want "struct field y has xml tag but is not exported"
+       z int
+       A int `json:"aa" xml:"bb"`
+       b int `json:"-"`
+       C int `json:"-"`
+}
+
+type unexp struct{}
+
+type JSONEmbeddedField struct {
+       UnexportedEncodingTagTest `is:"embedded"`
+       unexp                     `is:"embedded,notexported" json:"unexp"` // OK for now, see issue 7363
+}
+
+type AnonymousJSON struct{}
+type AnonymousXML struct{}
+
+type AnonymousJSONField struct {
+       DuplicateAnonJSON int `json:"a"`
+
+       A int "hello" // want "`hello` not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
+}
+
+// With different names to allow using as anonymous fields multiple times.
+
+type AnonymousJSONField2 struct {
+       DuplicateAnonJSON int `json:"a"`
+}
+type AnonymousJSONField3 struct {
+       DuplicateAnonJSON int `json:"a"`
+}
+
+type DuplicateJSONFields struct {
+       JSON              int `json:"a"`
+       DuplicateJSON     int `json:"a"` // want "struct field DuplicateJSON repeats json tag .a. also at a.go:66"
+       IgnoredJSON       int `json:"-"`
+       OtherIgnoredJSON  int `json:"-"`
+       OmitJSON          int `json:",omitempty"`
+       OtherOmitJSON     int `json:",omitempty"`
+       DuplicateOmitJSON int `json:"a,omitempty"` // want "struct field DuplicateOmitJSON repeats json tag .a. also at a.go:66"
+       NonJSON           int `foo:"a"`
+       DuplicateNonJSON  int `foo:"a"`
+       Embedded          struct {
+               DuplicateJSON int `json:"a"` // OK because it's not in the same struct type
+       }
+       AnonymousJSON `json:"a"` // want "struct field AnonymousJSON repeats json tag .a. also at a.go:66"
+
+       XML              int `xml:"a"`
+       DuplicateXML     int `xml:"a"` // want "struct field DuplicateXML repeats xml tag .a. also at a.go:80"
+       IgnoredXML       int `xml:"-"`
+       OtherIgnoredXML  int `xml:"-"`
+       OmitXML          int `xml:",omitempty"`
+       OtherOmitXML     int `xml:",omitempty"`
+       DuplicateOmitXML int `xml:"a,omitempty"` // want "struct field DuplicateOmitXML repeats xml tag .a. also at a.go:80"
+       NonXML           int `foo:"a"`
+       DuplicateNonXML  int `foo:"a"`
+       Embedded2        struct {
+               DuplicateXML int `xml:"a"` // OK because it's not in the same struct type
+       }
+       AnonymousXML `xml:"a"` // want "struct field AnonymousXML repeats xml tag .a. also at a.go:80"
+       Attribute    struct {
+               XMLName     xml.Name `xml:"b"`
+               NoDup       int      `xml:"b"`                // OK because XMLName above affects enclosing struct.
+               Attr        int      `xml:"b,attr"`           // OK because <b b="0"><b>0</b></b> is valid.
+               DupAttr     int      `xml:"b,attr"`           // want "struct field DupAttr repeats xml attribute tag .b. also at a.go:96"
+               DupOmitAttr int      `xml:"b,omitempty,attr"` // want "struct field DupOmitAttr repeats xml attribute tag .b. also at a.go:96"
+
+               AnonymousXML `xml:"b,attr"` // want "struct field AnonymousXML repeats xml attribute tag .b. also at a.go:96"
+       }
+
+       AnonymousJSONField2 `json:"not_anon"` // ok; fields aren't embedded in JSON
+       AnonymousJSONField3 `json:"-"`        // ok; entire field is ignored in JSON
+}
+
+type UnexpectedSpacetest struct {
+       A int `json:"a,omitempty"`
+       B int `json:"b, omitempty"` // want "suspicious space in struct tag value"
+       C int `json:"c ,omitempty"`
+       D int `json:"d,omitempty, string"` // want "suspicious space in struct tag value"
+       E int `xml:"e local"`
+       F int `xml:"f "`                 // want "suspicious space in struct tag value"
+       G int `xml:" g"`                 // want "suspicious space in struct tag value"
+       H int `xml:"h ,omitempty"`       // want "suspicious space in struct tag value"
+       I int `xml:"i, omitempty"`       // want "suspicious space in struct tag value"
+       J int `xml:"j local ,omitempty"` // want "suspicious space in struct tag value"
+       K int `xml:"k local, omitempty"` // want "suspicious space in struct tag value"
+       L int `xml:" l local,omitempty"` // want "suspicious space in struct tag value"
+       M int `xml:"m  local,omitempty"` // want "suspicious space in struct tag value"
+       N int `xml:" "`                  // want "suspicious space in struct tag value"
+       O int `xml:""`
+       P int `xml:","`
+       Q int `foo:" doesn't care "`
+}
+
+// Nested fiels can be shadowed by fields further up. For example,
+// ShadowingAnonJSON replaces the json:"a" field in AnonymousJSONField.
+// However, if the two conflicting fields appear at the same level like in
+// DuplicateWithAnotherPackage, we should error.
+
+type ShadowingJsonFieldName struct {
+       AnonymousJSONField
+       ShadowingAnonJSON int `json:"a"`
+}
+
+type DuplicateWithAnotherPackage struct {
+       b.AnonymousJSONField
+       AnonymousJSONField2 // want "struct field DuplicateAnonJSON repeats json tag .a. also at b.b.go:8"
+}