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"