Skip to content

Commit

Permalink
Add stringintconv and ifaceassert to govet
Browse files Browse the repository at this point in the history
Add new linters:
* stringintconv, enabled by default
* ifaceassert is additional linter

Move govet tests to a dedicated folder
  • Loading branch information
Sergey Vilgelm committed Sep 8, 2020
1 parent 140d51b commit d9df700
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
5 changes: 5 additions & 0 deletions pkg/golinters/govet.go
Expand Up @@ -17,6 +17,7 @@ import (
"golang.org/x/tools/go/analysis/passes/errorsas"
"golang.org/x/tools/go/analysis/passes/findcall"
"golang.org/x/tools/go/analysis/passes/httpresponse"
"golang.org/x/tools/go/analysis/passes/ifaceassert"
_ "golang.org/x/tools/go/analysis/passes/inspect" // unused internal analyzer
"golang.org/x/tools/go/analysis/passes/loopclosure"
"golang.org/x/tools/go/analysis/passes/lostcancel"
Expand All @@ -28,6 +29,7 @@ import (
"golang.org/x/tools/go/analysis/passes/shift"
"golang.org/x/tools/go/analysis/passes/sortslice"
"golang.org/x/tools/go/analysis/passes/stdmethods"
"golang.org/x/tools/go/analysis/passes/stringintconv"
"golang.org/x/tools/go/analysis/passes/structtag"
"golang.org/x/tools/go/analysis/passes/testinggoroutine"
"golang.org/x/tools/go/analysis/passes/tests"
Expand Down Expand Up @@ -55,6 +57,7 @@ var (
errorsas.Analyzer,
findcall.Analyzer,
httpresponse.Analyzer,
ifaceassert.Analyzer,
loopclosure.Analyzer,
lostcancel.Analyzer,
nilfunc.Analyzer,
Expand All @@ -64,6 +67,7 @@ var (
shift.Analyzer,
sortslice.Analyzer,
stdmethods.Analyzer,
stringintconv.Analyzer,
structtag.Analyzer,
testinggoroutine.Analyzer,
tests.Analyzer,
Expand All @@ -90,6 +94,7 @@ var (
printf.Analyzer,
shift.Analyzer,
stdmethods.Analyzer,
stringintconv.Analyzer,
structtag.Analyzer,
tests.Analyzer,
unmarshal.Analyzer,
Expand Down
17 changes: 11 additions & 6 deletions test/testdata/govet.go → test/testdata/govet/default.go
@@ -1,18 +1,18 @@
//args: -Egovet
//config: linters-settings.govet.check-shadowing=true
package testdata
package govet

import (
"fmt"
"io"
"os"
)

func Govet() error {
func Composites() error {
return &os.PathError{"first", "path", os.ErrNotExist} // ERROR "composites: `os.PathError` composite literal uses unkeyed fields"
}

func GovetShadow(f io.Reader, buf []byte) (err error) {
func Shadow(f io.Reader, buf []byte) (err error) {
if f != nil {
_, err := f.Read(buf) // ERROR "shadow: declaration of .err. shadows declaration at line \d+"
if err != nil {
Expand All @@ -24,15 +24,20 @@ func GovetShadow(f io.Reader, buf []byte) (err error) {
return
}

func GovetNolintVet() error {
func NolintVet() error {
return &os.PathError{"first", "path", os.ErrNotExist} //nolint:vet
}

func GovetNolintVetShadow() error {
func NolintVetShadow() error {
return &os.PathError{"first", "path", os.ErrNotExist} //nolint:vetshadow
}

func GovetPrintf() {
func Printf() {
x := "dummy"
fmt.Printf("%d", x) // ERROR "printf: Printf format %d has arg x of wrong type string"
}

func StringIntConv() {
i := 42
fmt.Println("i = " + string(i)) // ERROR "stringintconv: conversion from int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?)"
}
14 changes: 14 additions & 0 deletions test/testdata/govet/ifaceassert.go
@@ -0,0 +1,14 @@
//args: -Egovet
//config: linters-settings.govet.enable=["ifaceassert"]
package govet

import (
"io"
)

func IfaceAssert() {
var v interface {
Read()
}
_ = v.(io.Reader) // ERROR "composites: `os.PathError` composite literal uses unkeyed fields"
}

0 comments on commit d9df700

Please sign in to comment.