golang.org/x/tools@v0.21.1-0.20240520172518-788d39e776b1/go/analysis/passes/stdversion/testdata/test.txtar (about)

     1  Test of "too new" diagnostics from the stdversion analyzer.
     2  
     3  This test references go1.21 and go1.22 symbols from std.
     4  
     5  It uses a txtar file due to golang/go#37054.
     6  
     7  See also gopls/internal/test/marker/testdata/diagnostics/stdversion.txt
     8  which runs the same test within the gopls analysis driver, to ensure
     9  coverage of per-file Go version support.
    10  
    11  -- go.work --
    12  go 1.21
    13  
    14  use .
    15  use sub
    16  use sub20
    17  use old
    18  
    19  -- go.mod --
    20  module example.com
    21  
    22  go 1.21
    23  
    24  -- a/a.go --
    25  package a
    26  
    27  import "go/types"
    28  
    29  func _() {
    30  	// old package-level type
    31  	var _ types.Info // ok: defined by go1.0
    32  
    33  	// new field of older type
    34  	_ = new(types.Info).FileVersions // want `types.FileVersions requires go1.22 or later \(module is go1.21\)`
    35  
    36  	// new method of older type
    37  	new(types.Info).PkgNameOf // want `types.PkgNameOf requires go1.22 or later \(module is go1.21\)`
    38  
    39  	// new package-level type
    40  	var a types.Alias // want `types.Alias requires go1.22 or later \(module is go1.21\)`
    41  
    42  	// new method of new type
    43  	a.Underlying() // no diagnostic
    44  }
    45  
    46  -- sub/go.mod --
    47  module example.com/sub
    48  
    49  go 1.21
    50  
    51  -- sub/sub.go --
    52  package sub
    53  
    54  import "go/types"
    55  
    56  func _() {
    57  	// old package-level type
    58  	var _ types.Info // ok: defined by go1.0
    59  
    60  	// new field of older type
    61  	_ = new(types.Info).FileVersions // want `types.FileVersions requires go1.22 or later \(module is go1.21\)`
    62  
    63  	// new method of older type
    64  	new(types.Info).PkgNameOf // want `types.PkgNameOf requires go1.22 or later \(module is go1.21\)`
    65  
    66  	// new package-level type
    67  	var a types.Alias // want `types.Alias requires go1.22 or later \(module is go1.21\)`
    68  
    69  	// new method of new type
    70  	a.Underlying() // no diagnostic
    71  }
    72  
    73  invalid syntax // exercise RunDespiteErrors
    74  
    75  -- sub/tagged.go --
    76  //go:build go1.22
    77  
    78  package sub
    79  
    80  import "go/types"
    81  
    82  func _() {
    83  	// old package-level type
    84  	var _ types.Info
    85  
    86  	// new field of older type
    87  	_ = new(types.Info).FileVersions
    88  
    89  	// new method of older type
    90  	new(types.Info).PkgNameOf
    91  
    92  	// new package-level type
    93  	var a types.Alias
    94  
    95  	// new method of new type
    96  	a.Underlying()
    97  }
    98  
    99  -- old/go.mod --
   100  module example.com/old
   101  
   102  go 1.5
   103  
   104  -- old/old.go --
   105  package old
   106  
   107  import "go/types"
   108  
   109  var _ types.Alias // no diagnostic: go.mod is too old for us to care
   110  
   111  -- sub/oldtagged.go --
   112  // The file Go version (1.16) overrides the go.mod Go version (1.21),
   113  // even when this means a downgrade (#67123).
   114  // (stdversion is silent for go.mod versions before 1.21:
   115  // before the forward compatibility regime, the meaning
   116  // of the go.mod version was not clearly defined.)
   117  
   118  //go:build go1.16
   119  
   120  package sub
   121  
   122  import "bytes"
   123  import "go/types"
   124  
   125  var _ = bytes.Clone // want `bytes.Clone requires go1.20 or later \(file is go1.16\)`
   126  var _ = types.Alias // want `types.Alias requires go1.22 or later \(file is go1.16\)`
   127  
   128  -- sub20/go.mod --
   129  module example.com/sub20
   130  
   131  go 1.20
   132  
   133  -- sub20/oldtagged.go --
   134  // Same test again, but with a go1.20 mod,
   135  // before the forward compatibility regime:
   136  // The file's build tag effects selection, but
   137  // not language semantics, so stdversion is silent.
   138  
   139  //go:build go1.16
   140  
   141  package sub
   142  
   143  import "bytes"
   144  import "go/types"
   145  
   146  var _ = bytes.Clone
   147  var _ = types.Alias
   148