@@ -48,19 +48,21 @@ func New(settings *config.GoConstSettings) *goanalysis.Linter {
4848 nil ,
4949 ).WithIssuesReporter (func (* linter.Context ) []goanalysis.Issue {
5050 return resIssues
51- }).WithLoadMode (goanalysis .LoadModeSyntax )
51+ }).WithLoadMode (goanalysis .LoadModeTypesInfo )
5252}
5353
5454func runGoconst (pass * analysis.Pass , settings * config.GoConstSettings ) ([]goanalysis.Issue , error ) {
5555 cfg := goconstAPI.Config {
56- IgnoreStrings : settings .IgnoreStrings ,
57- MatchWithConstants : settings .MatchWithConstants ,
58- MinStringLength : settings .MinStringLen ,
59- MinOccurrences : settings .MinOccurrencesCount ,
60- ParseNumbers : settings .ParseNumbers ,
61- NumberMin : settings .NumberMin ,
62- NumberMax : settings .NumberMax ,
63- ExcludeTypes : map [goconstAPI.Type ]bool {},
56+ IgnoreStrings : settings .IgnoreStringValues ,
57+ MatchWithConstants : settings .MatchWithConstants ,
58+ MinStringLength : settings .MinStringLen ,
59+ MinOccurrences : settings .MinOccurrencesCount ,
60+ ParseNumbers : settings .ParseNumbers ,
61+ NumberMin : settings .NumberMin ,
62+ NumberMax : settings .NumberMax ,
63+ ExcludeTypes : map [goconstAPI.Type ]bool {},
64+ FindDuplicates : settings .FindDuplicates ,
65+ EvalConstExpressions : settings .EvalConstExpressions ,
6466
6567 // Should be managed with `linters.exclusions.rules`.
6668 IgnoreTests : false ,
@@ -70,7 +72,7 @@ func runGoconst(pass *analysis.Pass, settings *config.GoConstSettings) ([]goanal
7072 cfg .ExcludeTypes [goconstAPI .Call ] = true
7173 }
7274
73- lintIssues , err := goconstAPI .Run (pass .Files , pass .Fset , & cfg )
75+ lintIssues , err := goconstAPI .Run (pass .Files , pass .Fset , pass . TypesInfo , & cfg )
7476 if err != nil {
7577 return nil , err
7678 }
@@ -80,17 +82,32 @@ func runGoconst(pass *analysis.Pass, settings *config.GoConstSettings) ([]goanal
8082 }
8183
8284 res := make ([]goanalysis.Issue , 0 , len (lintIssues ))
83- for _ , i := range lintIssues {
84- text := fmt . Sprintf ( "string %s has %d occurrences" , internal . FormatCode ( i . Str , nil ), i . OccurrencesCount )
85+ for i := range lintIssues {
86+ issue := & lintIssues [ i ]
8587
86- if i .MatchingConst == "" {
87- text += ", make it a constant"
88- } else {
89- text += fmt .Sprintf (", but such constant %s already exists" , internal .FormatCode (i .MatchingConst , nil ))
88+ var text string
89+
90+ switch {
91+ case issue .OccurrencesCount > 0 :
92+ text = fmt .Sprintf ("string %s has %d occurrences" , internal .FormatCode (issue .Str , nil ), issue .OccurrencesCount )
93+
94+ if issue .MatchingConst == "" {
95+ text += ", make it a constant"
96+ } else {
97+ text += fmt .Sprintf (", but such constant %s already exists" , internal .FormatCode (issue .MatchingConst , nil ))
98+ }
99+
100+ case issue .DuplicateConst != "" :
101+ text = fmt .Sprintf ("This constant is a duplicate of %s at %s" ,
102+ internal .FormatCode (issue .DuplicateConst , nil ),
103+ issue .DuplicatePos .String ())
104+
105+ default :
106+ continue
90107 }
91108
92109 res = append (res , goanalysis .NewIssue (& result.Issue {
93- Pos : i .Pos ,
110+ Pos : issue .Pos ,
94111 Text : text ,
95112 FromLinter : linterName ,
96113 }, pass ))
0 commit comments