| // Copyright 2022 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. |
| |
| package a |
| |
| // Misplaced, above imports. |
| //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" |
| |
| import ( |
| "embed" |
| embedPkg "embed" |
| "fmt" |
| |
| _ "embed" |
| ) |
| |
| //go:embed embedText // ok |
| var e1 string |
| |
| // The analyzer does not check for many directives using the same var. |
| // |
| //go:embed embedText // ok |
| //go:embed embedText // ok |
| var e2 string |
| |
| // Comments and blank lines between are OK. All types OK. |
| // |
| //go:embed embedText // ok |
| // |
| // foo |
| |
| var e3 string |
| |
| //go:embed embedText //ok |
| var e4 []byte |
| |
| //go:embed embedText //ok |
| var e5 embed.FS |
| |
| // Followed by wrong kind of decl. |
| // |
| //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" |
| func fooFunc() {} |
| |
| // Multiple variable specs. |
| // |
| //go:embed embedText // want "declarations following go:embed directives must define a single variable" |
| var e6, e7 []byte |
| |
| // Specifying a value is not allowed. |
| // |
| //go:embed embedText // want "declarations following go:embed directives must not specify a value" |
| var e8 string = "foo" |
| |
| // TODO: This should not be OK, misplaced according to compiler. |
| // |
| //go:embed embedText // ok |
| var ( |
| e9 string |
| e10 string |
| ) |
| |
| // Type definition. |
| type fooType []byte |
| |
| //go:embed embedText //ok |
| var e11 fooType |
| |
| // Type alias. |
| type barType = string |
| |
| //go:embed embedText //ok |
| var e12 barType |
| |
| // Renamed embed package. |
| |
| //go:embed embedText //ok |
| var e13 embedPkg.FS |
| |
| // Renamed embed package alias. |
| type embedAlias = embedPkg.FS |
| |
| //go:embed embedText //ok |
| var e14 embedAlias |
| |
| // var blocks are OK as long as the variable following the directive is OK. |
| var ( |
| x, y, z string |
| //go:embed embedText // ok |
| e20 string |
| q, r, t string |
| ) |
| |
| //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" |
| var () |
| |
| // Incorrect types. |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e16 byte |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e17 []string |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e18 embed.Foo |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e19 foo.FS |
| |
| type byteAlias byte |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e15 byteAlias |
| |
| // A type declaration of embed.FS is not accepted by the compiler, in contrast to an alias. |
| type embedDecl embed.FS |
| |
| //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` |
| var e16 embedDecl |
| |
| // This is main function |
| func main() { |
| fmt.Println(s) |
| } |
| |
| // No declaration following. |
| //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" |