...

Text file src/golang.org/x/tools/go/analysis/passes/stdversion/testdata/test.txtar

Documentation: golang.org/x/tools/go/analysis/passes/stdversion/testdata

     1Test of "too new" diagnostics from the stdversion analyzer.
     2
     3This test references go1.21 and go1.22 symbols from std.
     4
     5It uses a txtar file due to golang/go#37054.
     6
     7See also gopls/internal/test/marker/testdata/diagnostics/stdversion.txt
     8which runs the same test within the gopls analysis driver, to ensure
     9coverage of per-file Go version support.
    10
    11-- go.work --
    12go 1.21
    13
    14use .
    15use sub
    16use sub20
    17use old
    18
    19-- go.mod --
    20module example.com
    21
    22go 1.21
    23
    24-- a/a.go --
    25package a
    26
    27import "go/types"
    28
    29func _() {
    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 --
    47module example.com/sub
    48
    49go 1.21
    50
    51-- sub/sub.go --
    52package sub
    53
    54import "go/types"
    55
    56func _() {
    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
    73invalid syntax // exercise RunDespiteErrors
    74
    75-- sub/tagged.go --
    76//go:build go1.22
    77
    78package sub
    79
    80import "go/types"
    81
    82func _() {
    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 --
   100module example.com/old
   101
   102go 1.5
   103
   104-- old/old.go --
   105package old
   106
   107import "go/types"
   108
   109var _ 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
   120package sub
   121
   122import "bytes"
   123import "go/types"
   124
   125var _ = bytes.Clone // want `bytes.Clone requires go1.20 or later \(file is go1.16\)`
   126var _ = types.Alias // want `types.Alias requires go1.22 or later \(file is go1.16\)`
   127
   128-- sub20/go.mod --
   129module example.com/sub20
   130
   131go 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
   141package sub
   142
   143import "bytes"
   144import "go/types"
   145
   146var _ = bytes.Clone
   147var _ = types.Alias
   148

View as plain text