golang.org/x/tools/gopls@v0.15.3/internal/analysis/embeddirective/testdata/src/a/import_present.go (about) 1 // Copyright 2022 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 package a 6 7 // Misplaced, above imports. 8 //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" 9 10 import ( 11 "embed" 12 embedPkg "embed" 13 "fmt" 14 15 _ "embed" 16 ) 17 18 //go:embed embedText // ok 19 var e1 string 20 21 // The analyzer does not check for many directives using the same var. 22 // 23 //go:embed embedText // ok 24 //go:embed embedText // ok 25 var e2 string 26 27 // Comments and blank lines between are OK. All types OK. 28 // 29 //go:embed embedText // ok 30 // 31 // foo 32 33 var e3 string 34 35 //go:embed embedText //ok 36 var e4 []byte 37 38 //go:embed embedText //ok 39 var e5 embed.FS 40 41 // Followed by wrong kind of decl. 42 // 43 //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" 44 func fooFunc() {} 45 46 // Multiple variable specs. 47 // 48 //go:embed embedText // want "declarations following go:embed directives must define a single variable" 49 var e6, e7 []byte 50 51 // Specifying a value is not allowed. 52 // 53 //go:embed embedText // want "declarations following go:embed directives must not specify a value" 54 var e8 string = "foo" 55 56 // TODO: This should not be OK, misplaced according to compiler. 57 // 58 //go:embed embedText // ok 59 var ( 60 e9 string 61 e10 string 62 ) 63 64 // Type definition. 65 type fooType []byte 66 67 //go:embed embedText //ok 68 var e11 fooType 69 70 // Type alias. 71 type barType = string 72 73 //go:embed embedText //ok 74 var e12 barType 75 76 // Renamed embed package. 77 78 //go:embed embedText //ok 79 var e13 embedPkg.FS 80 81 // Renamed embed package alias. 82 type embedAlias = embedPkg.FS 83 84 //go:embed embedText //ok 85 var e14 embedAlias 86 87 // var blocks are OK as long as the variable following the directive is OK. 88 var ( 89 x, y, z string 90 //go:embed embedText // ok 91 e20 string 92 q, r, t string 93 ) 94 95 //go:embed embedText // want "go:embed directives must precede a \"var\" declaration" 96 var () 97 98 // Incorrect types. 99 100 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 101 var e16 byte 102 103 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 104 var e17 []string 105 106 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 107 var e18 embed.Foo 108 109 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 110 var e19 foo.FS 111 112 type byteAlias byte 113 114 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 115 var e15 byteAlias 116 117 // A type declaration of embed.FS is not accepted by the compiler, in contrast to an alias. 118 type embedDecl embed.FS 119 120 //go:embed embedText // want `declarations following go:embed directives must be of type string, \[\]byte or embed.FS` 121 var e16 embedDecl 122 123 // This is main function 124 func main() { 125 fmt.Println(s) 126 } 127 128 // No declaration following. 129 //go:embed embedText // want "go:embed directives must precede a \"var\" declaration"