...
Run Format

Text file src/cmd/go/testdata/script/vet_basic.txt

Documentation: cmd/go/testdata/script

     1# Test basic features of "go vet"/"go fix" CLI.
     2#
     3# The example relies on two analyzers:
     4# - hostport (which is included in both the fix and vet suites), and
     5# - printf (which is only in the vet suite).
     6# Each reports one diagnostic with a fix.
     7
     8# vet default flags print diagnostics to stderr. Diagnostic => nonzero exit.
     9! go vet example.com/x
    10stderr 'does not work with IPv6'
    11stderr 'non-constant format string in call to fmt.Sprintf'
    12
    13# -hostport runs only one analyzer. Diagnostic => failure.
    14! go vet -hostport example.com/x
    15stderr 'does not work with IPv6'
    16! stderr 'non-constant format string'
    17
    18# -timeformat runs only one analyzer. No diagnostics => success.
    19go vet -timeformat example.com/x
    20! stderr .
    21
    22# JSON output includes diagnostics and fixes. Always success.
    23go vet -json example.com/x
    24! stderr .
    25stdout '"example.com/x": {'
    26stdout '"hostport":'
    27stdout '"message": "address format .* does not work with IPv6",'
    28stdout '"suggested_fixes":'
    29stdout '"message": "Replace fmt.Sprintf with net.JoinHostPort",'
    30
    31# vet -fix -diff displays a diff.
    32go vet -fix -diff example.com/x
    33stdout '\-var _ = fmt.Sprintf\(s\)'
    34stdout '\+var _ = fmt.Sprintf\("%s", s\)'
    35stdout '\-var _, _ = net.Dial\("tcp", fmt.Sprintf\("%s:%d", s, 80\)\)'
    36stdout '\+var _, _ = net.Dial\("tcp", net.JoinHostPort\(s, "80"\)\)'
    37
    38# vet -fix quietly applies the vet suite fixes.
    39cp x.go x.go.bak
    40go vet -fix example.com/x
    41grep 'fmt.Sprintf\("%s", s\)' x.go
    42grep 'net.JoinHostPort' x.go
    43! stderr .
    44cp x.go.bak x.go
    45
    46! go vet -diff example.com/x
    47stderr 'go vet -diff flag requires -fix'
    48
    49# go fix applies the fix suite fixes.
    50go fix example.com/x
    51grep 'net.JoinHostPort' x.go
    52! grep 'fmt.Sprintf\("%s", s\)' x.go
    53! stderr .
    54cp x.go.bak x.go
    55
    56# Show diff of fixes from the fix suite.
    57go fix -diff example.com/x
    58! stdout '\-var _ = fmt.Sprintf\(s\)'
    59stdout '\-var _, _ = net.Dial\("tcp", fmt.Sprintf\("%s:%d", s, 80\)\)'
    60stdout '\+var _, _ = net.Dial\("tcp", net.JoinHostPort\(s, "80"\)\)'
    61
    62# Show fix-suite fixes in JSON form.
    63go fix -json example.com/x
    64! stderr .
    65stdout '"example.com/x": {'
    66stdout '"hostport":'
    67stdout '"message": "address format .* does not work with IPv6",'
    68stdout '"suggested_fixes":'
    69stdout '"message": "Replace fmt.Sprintf with net.JoinHostPort",'
    70! stdout '"printf":'
    71! stdout '"message": "non-constant format string.*",'
    72! stdout '"message": "Insert.*%s.*format.string",'
    73
    74# Show vet-suite fixes in JSON form.
    75go vet -fix -json example.com/x
    76! stderr .
    77stdout '"example.com/x": {'
    78stdout '"hostport":'
    79stdout '"message": "address format .* does not work with IPv6",'
    80stdout '"suggested_fixes":'
    81stdout '"message": "Replace fmt.Sprintf with net.JoinHostPort",'
    82stdout '"printf":'
    83stdout '"message": "non-constant format string.*",'
    84stdout '"suggested_fixes":'
    85stdout '"message": "Insert.*%s.*format.string",'
    86
    87# Reject -diff + -json.
    88! go fix -diff -json example.com/x
    89stderr '-json and -diff cannot be used together'
    90
    91# Legacy way of selecting fixers is a no-op.
    92go fix -fix=old1,old2 example.com/x
    93stderr 'go fix: the -fix=old1,old2 flag is obsolete and has no effect'
    94cp x.go.bak x.go
    95
    96# -c=n flag shows n lines of context.
    97! go vet -c=2 -printf example.com/x
    98stderr 'x.go:12:21: non-constant format string in call to fmt.Sprintf'
    99! stderr '9	'
   100stderr '10	'
   101stderr '11	// This call...'
   102stderr '12	var _ = fmt.Sprintf\(s\)'
   103stderr '13	'
   104stderr '14	'
   105! stderr '15	'
   106
   107-- go.mod --
   108module example.com/x
   109go 1.25
   110
   111-- x.go --
   112package x
   113
   114
   115import (
   116	"fmt"
   117	"net"
   118)
   119
   120var s string
   121
   122// This call yields a "non-constant format string" diagnostic, with a fix (go vet only).
   123var _ = fmt.Sprintf(s)
   124
   125// This call yields a hostport diagnostic, with a fix (go vet and go fix).
   126var _, _ = net.Dial("tcp", fmt.Sprintf("%s:%d", s, 80))

View as plain text