Improve lll parsing for very long lines
lll is using scanner.Scan() to read the file line by line. scanner.Scan() might fail if the line is longer than bufio.MaxScanTokenSize In the case where the specified maxLineLen is smaller than bufio.MaxScanTokenSize we can return this line as a long line instead of returning an error. The reason for this change is that this case might happen with autogenerated files The go-bindata tool for instance might generate a file with a very long line. In this case, as it's a auto generated file, the warning returned by lll will be ignored. But if we return a linter error here, and this error happens for an autogenerated file the error will be discarded (fine), but all the subsequent errors for lll will be discarded for other files and we'll miss legit error.
This commit is contained in:
parent
b1948fdbaa
commit
bc945a157b
@ -53,7 +53,29 @@ func (lint Lll) getIssuesForFile(filename string, maxLineLen int, tabSpaces stri
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, fmt.Errorf("can't scan file %s: %s", filename, err)
|
||||
if err == bufio.ErrTooLong && maxLineLen < bufio.MaxScanTokenSize {
|
||||
// scanner.Scan() might fail if the line is longer than bufio.MaxScanTokenSize
|
||||
// In the case where the specified maxLineLen is smaller than bufio.MaxScanTokenSize
|
||||
// we can return this line as a long line instead of returning an error.
|
||||
// The reason for this change is that this case might happen with autogenerated files
|
||||
// The go-bindata tool for instance might generate a file with a very long line.
|
||||
// In this case, as it's a auto generated file, the warning returned by lll will
|
||||
// be ignored.
|
||||
// But if we return a linter error here, and this error happens for an autogenerated
|
||||
// file the error will be discarded (fine), but all the subsequent errors for lll will
|
||||
// be discarded for other files and we'll miss legit error.
|
||||
res = append(res, result.Issue{
|
||||
Pos: token.Position{
|
||||
Filename: filename,
|
||||
Line: lineNumber,
|
||||
Column: 1,
|
||||
},
|
||||
Text: fmt.Sprintf("line is more than %d characters", bufio.MaxScanTokenSize),
|
||||
FromLinter: lint.Name(),
|
||||
})
|
||||
} else {
|
||||
return nil, fmt.Errorf("can't scan file %s: %s", filename, err)
|
||||
}
|
||||
}
|
||||
|
||||
return res, nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user