Skip to content

Commit fc52a16

Browse files
authored
dev: replace FileCache by LineCache (#5518)
1 parent 4d2f4d6 commit fc52a16

File tree

8 files changed

+38
-173
lines changed

8 files changed

+38
-173
lines changed

pkg/fsutils/files.go

-33
This file was deleted.

pkg/lint/runner.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ func NewRunner(log logutils.Log, cfg *config.Config, goenv *goutil.Env,
3737
lineCache *fsutils.LineCache, fileCache *fsutils.FileCache,
3838
dbManager *lintersdb.Manager, lintCtx *linter.Context,
3939
) (*Runner, error) {
40-
// Beware that some processors need to add the path prefix when working with paths
41-
// because they get invoked before the path prefixer (exclude and severity rules)
42-
// or process other paths (skip files).
43-
files := fsutils.NewFiles(lineCache, cfg.Output.PathPrefix)
44-
4540
pathRelativity, err := processors.NewPathRelativity(log, cfg.GetBasePath())
4641
if err != nil {
4742
return nil, fmt.Errorf("error creating path relativity processor: %w", err)
@@ -98,7 +93,7 @@ func NewRunner(log logutils.Log, cfg *config.Config, goenv *goutil.Env,
9893
// Must be before exclude because users see already marked output and configure excluding by it.
9994
processors.NewIdentifierMarker(),
10095

101-
processors.NewExclusionRules(log.Child(logutils.DebugKeyExclusionRules), files,
96+
processors.NewExclusionRules(log.Child(logutils.DebugKeyExclusionRules), lineCache,
10297
&cfg.Linters.Exclusions),
10398

10499
processors.NewNolintFilter(log.Child(logutils.DebugKeyNolintFilter), dbManager, enabledLinters),
@@ -117,7 +112,7 @@ func NewRunner(log logutils.Log, cfg *config.Config, goenv *goutil.Env,
117112
// Now we can modify the issues for output.
118113
processors.NewSourceCode(lineCache, log.Child(logutils.DebugKeySourceCode)),
119114
processors.NewPathShortener(),
120-
processors.NewSeverity(log.Child(logutils.DebugKeySeverityRules), files, &cfg.Severity),
115+
processors.NewSeverity(log.Child(logutils.DebugKeySeverityRules), lineCache, &cfg.Severity),
121116
processors.NewPathPrettifier(log, cfg.Output.PathPrefix),
122117
processors.NewSortResults(&cfg.Output),
123118
},

pkg/result/processors/base_rule.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ func (r *baseRule) isEmpty() bool {
4747
return r.text == nil && r.source == nil && r.path == nil && r.pathExcept == nil && len(r.linters) == 0
4848
}
4949

50-
func (r *baseRule) match(issue *result.Issue, files *fsutils.Files, log logutils.Log) bool {
50+
func (r *baseRule) match(issue *result.Issue, lines *fsutils.LineCache, log logutils.Log) bool {
5151
if r.isEmpty() {
5252
return false
5353
}
5454
if r.text != nil && !r.text.MatchString(issue.Text) {
5555
return false
5656
}
57-
if r.path != nil && !r.path.MatchString(files.WithPathPrefix(issue.RelativePath)) {
57+
if r.path != nil && !r.path.MatchString(issue.RelativePath) {
5858
return false
5959
}
6060
if r.pathExcept != nil && r.pathExcept.MatchString(issue.RelativePath) {
@@ -65,7 +65,7 @@ func (r *baseRule) match(issue *result.Issue, files *fsutils.Files, log logutils
6565
}
6666

6767
// the most heavyweight checking last
68-
if r.source != nil && !r.matchSource(issue, files.LineCache, log) {
68+
if r.source != nil && !r.matchSource(issue, lines, log) {
6969
return false
7070
}
7171

pkg/result/processors/exclusion_rules.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@ import (
1414
var _ Processor = (*ExclusionRules)(nil)
1515

1616
type ExclusionRules struct {
17-
log logutils.Log
18-
files *fsutils.Files
17+
log logutils.Log
18+
19+
lines *fsutils.LineCache
1920

2021
warnUnused bool
2122
skippedCounter map[string]int
2223

2324
rules []excludeRule
2425
}
2526

26-
func NewExclusionRules(log logutils.Log, files *fsutils.Files,
27-
cfg *config.LinterExclusions) *ExclusionRules {
27+
func NewExclusionRules(log logutils.Log, lines *fsutils.LineCache, cfg *config.LinterExclusions) *ExclusionRules {
2828
p := &ExclusionRules{
2929
log: log,
30-
files: files,
30+
lines: lines,
3131
warnUnused: cfg.WarnUnused,
3232
skippedCounter: map[string]int{},
3333
}
@@ -56,7 +56,7 @@ func (p *ExclusionRules) Process(issues []result.Issue) ([]result.Issue, error)
5656

5757
return filterIssues(issues, func(issue *result.Issue) bool {
5858
for _, rule := range p.rules {
59-
if !rule.match(issue, p.files, p.log) {
59+
if !rule.match(issue, p.lines, p.log) {
6060
continue
6161
}
6262

pkg/result/processors/exclusion_rules_test.go

+12-57
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package processors
22

33
import (
4-
"path"
54
"path/filepath"
65
"testing"
76

@@ -13,7 +12,7 @@ import (
1312
)
1413

1514
func TestExclusionRules_Process_multiple(t *testing.T) {
16-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
15+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
1716

1817
cfg := &config.LinterExclusions{
1918
Rules: []config.ExcludeRule{
@@ -50,7 +49,7 @@ func TestExclusionRules_Process_multiple(t *testing.T) {
5049
},
5150
}
5251

53-
p := NewExclusionRules(nil, files, cfg)
52+
p := NewExclusionRules(nil, lines, cfg)
5453

5554
cases := []issueTestCase{
5655
{Path: "e.go", Text: "exclude", Linter: "linter"},
@@ -91,52 +90,8 @@ func TestExclusionRules_Process_multiple(t *testing.T) {
9190
assert.Equal(t, expectedCases, resultingCases)
9291
}
9392

94-
func TestExclusionRules_Process_pathPrefix(t *testing.T) {
95-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), path.Join("some", "dir"))
96-
97-
cfg := &config.LinterExclusions{
98-
Rules: []config.ExcludeRule{
99-
{
100-
BaseRule: config.BaseRule{
101-
Path: `some/dir/e\.go`,
102-
},
103-
},
104-
},
105-
}
106-
107-
p := NewExclusionRules(nil, files, cfg)
108-
109-
cases := []issueTestCase{
110-
{Path: "e.go"},
111-
{Path: "other.go"},
112-
}
113-
114-
var issues []result.Issue
115-
for _, c := range cases {
116-
issues = append(issues, newIssueFromIssueTestCase(c))
117-
}
118-
119-
processedIssues := process(t, p, issues...)
120-
121-
var resultingCases []issueTestCase
122-
for _, i := range processedIssues {
123-
resultingCases = append(resultingCases, issueTestCase{
124-
Path: i.FilePath(),
125-
Linter: i.FromLinter,
126-
Text: i.Text,
127-
Line: i.Line(),
128-
})
129-
}
130-
131-
expectedCases := []issueTestCase{
132-
{Path: "other.go"},
133-
}
134-
135-
assert.Equal(t, expectedCases, resultingCases)
136-
}
137-
13893
func TestExclusionRules_Process_text(t *testing.T) {
139-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
94+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
14095

14196
cfg := &config.LinterExclusions{
14297
Rules: []config.ExcludeRule{{
@@ -147,7 +102,7 @@ func TestExclusionRules_Process_text(t *testing.T) {
147102
}},
148103
}
149104

150-
p := NewExclusionRules(nil, files, cfg)
105+
p := NewExclusionRules(nil, lines, cfg)
151106

152107
texts := []string{"exclude", "1", "", "exclud", "notexclude"}
153108
var issues []result.Issue
@@ -170,15 +125,15 @@ func TestExclusionRules_Process_text(t *testing.T) {
170125
}
171126

172127
func TestExclusionRules_Process_empty(t *testing.T) {
173-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
128+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
174129

175-
p := NewExclusionRules(nil, files, &config.LinterExclusions{})
130+
p := NewExclusionRules(nil, lines, &config.LinterExclusions{})
176131

177132
processAssertSame(t, p, newIssueFromTextTestCase("test"))
178133
}
179134

180135
func TestExclusionRules_Process_caseSensitive_multiple(t *testing.T) {
181-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
136+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
182137

183138
cfg := &config.LinterExclusions{
184139
Rules: []config.ExcludeRule{
@@ -209,7 +164,7 @@ func TestExclusionRules_Process_caseSensitive_multiple(t *testing.T) {
209164
},
210165
}
211166

212-
p := NewExclusionRules(nil, files, cfg)
167+
p := NewExclusionRules(nil, lines, cfg)
213168

214169
cases := []issueTestCase{
215170
{Path: "e.go", Text: "exclude", Linter: "linter"},
@@ -253,7 +208,7 @@ func TestExclusionRules_Process_caseSensitive_multiple(t *testing.T) {
253208
}
254209

255210
func TestExclusionRules_Process_caseSensitive_text(t *testing.T) {
256-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
211+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
257212

258213
cfg := &config.LinterExclusions{
259214
Rules: []config.ExcludeRule{
@@ -266,7 +221,7 @@ func TestExclusionRules_Process_caseSensitive_text(t *testing.T) {
266221
},
267222
}
268223

269-
p := NewExclusionRules(nil, files, cfg)
224+
p := NewExclusionRules(nil, lines, cfg)
270225

271226
texts := []string{"exclude", "excLude", "1", "", "exclud", "notexclude"}
272227

@@ -290,9 +245,9 @@ func TestExclusionRules_Process_caseSensitive_text(t *testing.T) {
290245
}
291246

292247
func TestExclusionRules_Process_caseSensitive_empty(t *testing.T) {
293-
files := fsutils.NewFiles(fsutils.NewLineCache(fsutils.NewFileCache()), "")
248+
lines := fsutils.NewLineCache(fsutils.NewFileCache())
294249

295-
p := NewExclusionRules(nil, files, &config.LinterExclusions{})
250+
p := NewExclusionRules(nil, lines, &config.LinterExclusions{})
296251

297252
processAssertSame(t, p, newIssueFromTextTestCase("test"))
298253
}

pkg/result/processors/path_prettifier.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package processors
22

33
import (
4-
"github.com/golangci/golangci-lint/pkg/fsutils"
4+
"path/filepath"
5+
56
"github.com/golangci/golangci-lint/pkg/logutils"
67
"github.com/golangci/golangci-lint/pkg/result"
78
)
@@ -30,7 +31,11 @@ func (p *PathPrettifier) Process(issues []result.Issue) ([]result.Issue, error)
3031
return transformIssues(issues, func(issue *result.Issue) *result.Issue {
3132
newIssue := issue
3233

33-
newIssue.Pos.Filename = fsutils.WithPathPrefix(p.prefix, issue.RelativePath)
34+
if p.prefix == "" {
35+
newIssue.Pos.Filename = issue.RelativePath
36+
} else {
37+
newIssue.Pos.Filename = filepath.Join(p.prefix, issue.RelativePath)
38+
}
3439

3540
return newIssue
3641
}), nil

pkg/result/processors/severity.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ type Severity struct {
2222

2323
log logutils.Log
2424

25-
files *fsutils.Files
25+
lines *fsutils.LineCache
2626

2727
defaultSeverity string
2828
rules []severityRule
2929
}
3030

31-
func NewSeverity(log logutils.Log, files *fsutils.Files, cfg *config.Severity) *Severity {
31+
func NewSeverity(log logutils.Log, lines *fsutils.LineCache, cfg *config.Severity) *Severity {
3232
p := &Severity{
3333
name: "severity-rules",
34-
files: files,
34+
lines: lines,
3535
log: log,
3636
defaultSeverity: cfg.Default,
3737
}
@@ -55,7 +55,7 @@ func (*Severity) Finish() {}
5555

5656
func (p *Severity) transform(issue *result.Issue) *result.Issue {
5757
for _, rule := range p.rules {
58-
if rule.match(issue, p.files, p.log) {
58+
if rule.match(issue, p.lines, p.log) {
5959
if rule.severity == severityFromLinter || (rule.severity == "" && p.defaultSeverity == severityFromLinter) {
6060
return issue
6161
}

0 commit comments

Comments
 (0)