Skip to content

Commit e20c62e

Browse files
committed
feat: add untypedconst linter
Implements #3478.
1 parent abe878d commit e20c62e

File tree

5 files changed

+93
-0
lines changed

5 files changed

+93
-0
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ require (
4949
github.com/hashicorp/go-version v1.6.0
5050
github.com/hexops/gotextdiff v1.0.3
5151
github.com/jgautheron/goconst v1.5.1
52+
github.com/jiftechnify/untypedconst v0.0.0-20211230012903-7f805b5dad89
5253
github.com/jingyugao/rowserrcheck v1.1.1
5354
github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af
5455
github.com/julz/importas v0.1.0

go.sum

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/golinters/untypedconst.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package golinters
2+
3+
import (
4+
"github.com/jiftechnify/untypedconst"
5+
"golang.org/x/tools/go/analysis"
6+
7+
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
8+
)
9+
10+
func NewUntypedConst() *goanalysis.Linter {
11+
a := untypedconst.Analyzer
12+
13+
return goanalysis.NewLinter(
14+
a.Name,
15+
a.Doc,
16+
[]*analysis.Analyzer{a},
17+
nil,
18+
).WithLoadMode(goanalysis.LoadModeTypesInfo)
19+
}

pkg/lint/lintersdb/manager.go

+5
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,11 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config {
821821
WithLoadForGoAnalysis().
822822
WithURL("https://github.com/mvdan/unparam"),
823823

824+
linter.NewConfig(golinters.NewUntypedConst()).
825+
WithSince("v1.51.0").
826+
WithPresets(linter.PresetBugs).
827+
WithURL("https://github.com/jiftechnify/untypedconst"),
828+
824829
linter.NewConfig(golinters.NewUnused(unusedCfg)).
825830
WithSince("v1.20.0").
826831
WithLoadForGoAnalysis().

test/testdata/untypedconst.go

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//golangcitest:args -Euntypedconst
2+
package testdata
3+
4+
type ExString string
5+
6+
func retExString() ExString {
7+
if true {
8+
return ExString("hoge")
9+
} else {
10+
return "hoge" // want `returning untyped constant as defined type "command-line-arguments.ExString"`
11+
}
12+
}
13+
14+
type ExInt int
15+
16+
func retExInt() ExInt {
17+
if true {
18+
return ExInt(1)
19+
} else {
20+
return 1 // want `returning untyped constant as defined type "command-line-arguments.ExInt"`
21+
}
22+
}
23+
24+
type ExFloat float64
25+
26+
func retExFloat() ExFloat {
27+
if true {
28+
return ExFloat(0.5)
29+
} else {
30+
return 0.5 // want `returning untyped constant as defined type "command-line-arguments.ExFloat"`
31+
}
32+
}
33+
34+
type ExComplex complex128
35+
36+
func retExComplex() ExComplex {
37+
if true {
38+
return ExComplex(1.0 + 0.5i)
39+
} else {
40+
return 1.0 + 0.5i // want `returning untyped constant as defined type "command-line-arguments.ExComplex"`
41+
}
42+
}
43+
44+
type ExRune rune
45+
46+
func retExRune() ExRune {
47+
if true {
48+
return ExRune('a')
49+
} else {
50+
return 'a' // want `returning untyped constant as defined type "command-line-arguments.ExRune"`
51+
}
52+
}
53+
54+
type ExBool bool
55+
56+
func retExBool() ExBool {
57+
if true {
58+
return ExBool(true)
59+
} else {
60+
return true // want `returning untyped constant as defined type "command-line-arguments.ExBool"`
61+
}
62+
}

0 commit comments

Comments
 (0)