Skip to content

Commit 80a5ff2

Browse files
author
golangci
authored
Merge pull request #42 from dixonwille/feature/better-memory-alloc-for-slices
Allocate memory for known size slices
2 parents 3b5ee0c + d3762b8 commit 80a5ff2

15 files changed

+65
-16
lines changed

pkg/golinters/deadcode.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ func (d Deadcode) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, er
2424
return nil, err
2525
}
2626

27-
var res []result.Issue
27+
if len(issues) == 0 {
28+
return nil, nil
29+
}
30+
31+
res := make([]result.Issue, 0, len(issues))
2832
for _, i := range issues {
2933
res = append(res, result.Issue{
3034
Pos: i.Pos,

pkg/golinters/dupl.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ func (d Dupl) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error)
2525
return nil, err
2626
}
2727

28-
var res []result.Issue
28+
if len(issues) == 0 {
29+
return nil, nil
30+
}
31+
32+
res := make([]result.Issue, 0, len(issues))
2933
for _, i := range issues {
3034
dupl := fmt.Sprintf("%s:%d-%d", i.To.Filename(), i.To.LineStart(), i.To.LineEnd())
3135
text := fmt.Sprintf("%d-%d lines are duplicate of %s",

pkg/golinters/errcheck.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ func (e Errcheck) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, er
2525
return nil, err
2626
}
2727

28-
var res []result.Issue
28+
if len(issues) == 0 {
29+
return nil, nil
30+
}
31+
32+
res := make([]result.Issue, 0, len(issues))
2933
for _, i := range issues {
3034
var text string
3135
if i.FuncName != "" {

pkg/golinters/gas.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,11 @@ func (lint Gas) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, erro
3333

3434
analyzer.ProcessProgram(lintCtx.Program)
3535
issues, _ := analyzer.Report()
36+
if len(issues) == 0 {
37+
return nil, nil
38+
}
3639

37-
var res []result.Issue
40+
res := make([]result.Issue, 0, len(issues))
3841
for _, i := range issues {
3942
text := fmt.Sprintf("%s: %s", i.RuleID, i.What) // TODO: use severity and confidence
4043
var r result.Range

pkg/golinters/goconst.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@ func (lint Goconst) Run(ctx context.Context, lintCtx *Context) ([]result.Issue,
3232

3333
goconstIssues = append(goconstIssues, issues...)
3434
}
35+
if len(goconstIssues) == 0 {
36+
return nil, nil
37+
}
3538

36-
var res []result.Issue
39+
res := make([]result.Issue, 0, len(goconstIssues))
3740
for _, i := range goconstIssues {
3841
textBegin := fmt.Sprintf("string %s has %d occurrences", formatCode(i.Str, lintCtx.Cfg), i.OccurencesCount)
3942
var textEnd string

pkg/golinters/gocyclo.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,18 @@ func (g Gocyclo) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, err
2424
for _, f := range lintCtx.ASTCache.GetAllValidFiles() {
2525
stats = gocycloAPI.BuildStats(f.F, f.Fset, stats)
2626
}
27+
if len(stats) == 0 {
28+
return nil, nil
29+
}
2730

2831
sort.Slice(stats, func(i, j int) bool {
2932
return stats[i].Complexity > stats[j].Complexity
3033
})
3134

32-
var res []result.Issue
35+
res := make([]result.Issue, 0, len(stats))
3336
for _, s := range stats {
3437
if s.Complexity <= lintCtx.Settings().Gocyclo.MinComplexity {
35-
continue
38+
break //Break as the stats is already sorted from greatest to least
3639
}
3740

3841
res = append(res, result.Issue{

pkg/golinters/golint.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,11 @@ func (g Golint) lintFiles(minConfidence float64, filenames ...string) ([]result.
5353
if err != nil {
5454
return nil, fmt.Errorf("can't lint files %s: %s", filenames, err)
5555
}
56+
if len(ps) == 0 {
57+
return nil, nil
58+
}
5659

57-
var issues []result.Issue
60+
issues := make([]result.Issue, 0, len(ps)) //This is worst case
5861
for _, p := range ps {
5962
if p.Confidence >= minConfidence {
6063
issues = append(issues, result.Issue{

pkg/golinters/govet.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ func (g Govet) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error
2727
}
2828
govetIssues = append(govetIssues, issues...)
2929
}
30+
if len(govetIssues) == 0 {
31+
return nil, nil
32+
}
3033

31-
var res []result.Issue
34+
res := make([]result.Issue, 0, len(govetIssues))
3235
for _, i := range govetIssues {
3336
res = append(res, result.Issue{
3437
Pos: i.Pos,

pkg/golinters/ineffassign.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ func (Ineffassign) Desc() string {
2020

2121
func (lint Ineffassign) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
2222
issues := ineffassignAPI.Run(lintCtx.Paths.Files)
23+
if len(issues) == 0 {
24+
return nil, nil
25+
}
2326

24-
var res []result.Issue
27+
res := make([]result.Issue, 0, len(issues))
2528
for _, i := range issues {
2629
res = append(res, result.Issue{
2730
Pos: i.Pos,

pkg/golinters/interfacer.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ func (lint Interfacer) Run(ctx context.Context, lintCtx *Context) ([]result.Issu
2727
if err != nil {
2828
return nil, err
2929
}
30+
if len(issues) == 0 {
31+
return nil, nil
32+
}
3033

31-
var res []result.Issue
34+
res := make([]result.Issue, 0, len(issues))
3235
for _, i := range issues {
3336
pos := lintCtx.SSAProgram.Fset.Position(i.Pos())
3437
res = append(res, result.Issue{

pkg/golinters/maligned.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ func (Maligned) Desc() string {
2020

2121
func (m Maligned) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
2222
issues := malignedAPI.Run(lintCtx.Program)
23+
if len(issues) == 0 {
24+
return nil, nil
25+
}
2326

24-
var res []result.Issue
27+
res := make([]result.Issue, 0, len(issues))
2528
for _, i := range issues {
2629
text := fmt.Sprintf("struct of size %d bytes could be of size %d bytes", i.OldSize, i.NewSize)
2730
if lintCtx.Settings().Maligned.SuggestNewOrder {

pkg/golinters/megacheck.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ func (m Megacheck) Desc() string {
4141
func (m Megacheck) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
4242
issues := megacheckAPI.Run(lintCtx.Program, lintCtx.LoaderConfig, lintCtx.SSAProgram,
4343
m.StaticcheckEnabled, m.GosimpleEnabled, m.UnusedEnabled)
44+
if len(issues) == 0 {
45+
return nil, nil
46+
}
4447

45-
var res []result.Issue
48+
res := make([]result.Issue, 0, len(issues))
4649
for _, i := range issues {
4750
res = append(res, result.Issue{
4851
Pos: i.Position,

pkg/golinters/structcheck.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ func (Structcheck) Desc() string {
2020

2121
func (s Structcheck) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
2222
issues := structcheckAPI.Run(lintCtx.Program, lintCtx.Settings().Structcheck.CheckExportedFields)
23+
if len(issues) == 0 {
24+
return nil, nil
25+
}
2326

24-
var res []result.Issue
27+
res := make([]result.Issue, 0, len(issues))
2528
for _, i := range issues {
2629
res = append(res, result.Issue{
2730
Pos: i.Pos,

pkg/golinters/unconvert.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ func (Unconvert) Desc() string {
1919

2020
func (lint Unconvert) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
2121
positions := unconvertAPI.Run(lintCtx.Program)
22-
var res []result.Issue
22+
if len(positions) == 0 {
23+
return nil, nil
24+
}
25+
26+
res := make([]result.Issue, 0, len(positions))
2327
for _, pos := range positions {
2428
res = append(res, result.Issue{
2529
Pos: pos,

pkg/golinters/varcheck.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ func (Varcheck) Desc() string {
2020

2121
func (v Varcheck) Run(ctx context.Context, lintCtx *Context) ([]result.Issue, error) {
2222
issues := varcheckAPI.Run(lintCtx.Program, lintCtx.Settings().Varcheck.CheckExportedFields)
23+
if len(issues) == 0 {
24+
return nil, nil
25+
}
2326

24-
var res []result.Issue
27+
res := make([]result.Issue, 0, len(issues))
2528
for _, i := range issues {
2629
res = append(res, result.Issue{
2730
Pos: i.Pos,

0 commit comments

Comments
 (0)