mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-01 10:11:11 +02:00
tools/linters: ignore log lines
This commit adds a feature to our custom lll linter which will ignore log lines (both single and multi-lined log lines) for the lll linter.
This commit is contained in:
@@ -2,6 +2,7 @@ package linters
|
||||
|
||||
import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -16,12 +17,14 @@ func TestGetLLLIssuesForFile(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
content string
|
||||
logRegex string
|
||||
expectedIssue []string
|
||||
}{
|
||||
{
|
||||
name: "Single long line",
|
||||
content: `
|
||||
fmt.Println("This is a very long line that exceeds the maximum length and should be flagged by the linter.")`,
|
||||
logRegex: defaultLogRegex,
|
||||
expectedIssue: []string{
|
||||
"the line is 140 characters long, which " +
|
||||
"exceeds the maximum of 80 characters.",
|
||||
@@ -32,6 +35,7 @@ func TestGetLLLIssuesForFile(t *testing.T) {
|
||||
content: `
|
||||
fmt.Println("This is a very long line that exceeds the maximum length and should be flagged by the linter.")
|
||||
fmt.Println("This is a another very long line that exceeds the maximum length and should be flagged by the linter.")`,
|
||||
logRegex: defaultLogRegex,
|
||||
expectedIssue: []string{
|
||||
"the line is 140 characters long, which " +
|
||||
"exceeds the maximum of 80 characters.",
|
||||
@@ -40,20 +44,24 @@ func TestGetLLLIssuesForFile(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Short lines",
|
||||
name: "Short lines",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
fmt.Println("Short line")`,
|
||||
},
|
||||
{
|
||||
name: "Directive ignored",
|
||||
content: `//go:generate something very very very very very very very very very long and complex here wowowow`,
|
||||
name: "Directive ignored",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `//go:generate something very very very very very very very very very long and complex here wowowow`,
|
||||
},
|
||||
{
|
||||
name: "Long single line import",
|
||||
content: `import "github.com/lightningnetwork/lnd/lnrpc/walletrpc/more/more/more/more/more/more/ok/that/is/enough"`,
|
||||
name: "Long single line import",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `import "github.com/lightningnetwork/lnd/lnrpc/walletrpc/more/more/more/more/more/more/ok/that/is/enough"`,
|
||||
},
|
||||
{
|
||||
name: "Multi-line import",
|
||||
name: "Multi-line import",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
import (
|
||||
"os"
|
||||
@@ -62,20 +70,68 @@ func TestGetLLLIssuesForFile(t *testing.T) {
|
||||
)`,
|
||||
},
|
||||
{
|
||||
name: "Long single line log",
|
||||
name: "Long single line log",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
log.Infof("This is a very long log line but since it is a log line, it should be skipped by the linter.")`,
|
||||
log.Infof("This is a very long log line but since it is a log line, it should be skipped by the linter."),
|
||||
rpcLog.Info("Another long log line with a slightly different name and should still be skipped")`,
|
||||
},
|
||||
{
|
||||
name: "Long single line log followed by a non-log line",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
log.Infof("This is a very long log line but since it is a log line, it should be skipped by the linter.")
|
||||
fmt.Println("This is a very long line that exceeds the maximum length and should be flagged by the linter.")`,
|
||||
expectedIssue: []string{
|
||||
"the line is 121 characters long, which " +
|
||||
"the line is 140 characters long, which " +
|
||||
"exceeds the maximum of 80 characters.",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Multi-line log",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
log.Infof("This is a very long log line but
|
||||
since it is a log line, it
|
||||
should be skipped by the linter.")`,
|
||||
},
|
||||
{
|
||||
name: "Multi-line log followed by a non-log line",
|
||||
logRegex: defaultLogRegex,
|
||||
content: `
|
||||
log.Infof("This is a very long log line but
|
||||
since it is a log line, it
|
||||
should be skipped by the linter.")
|
||||
fmt.Println("This is a very long line that
|
||||
exceeds the maximum length and
|
||||
should be flagged by the linter.")`,
|
||||
expectedIssue: []string{
|
||||
"the line is 82 characters long, which " +
|
||||
"exceeds the maximum of 80 characters.",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Only skip 'S' logs",
|
||||
logRegex: `^\s*.*(L|l)og\.(Info|Debug|Trace|Warn|Error|Critical)S\(`,
|
||||
content: `
|
||||
log.Infof("A long log line but it is not an S log and so should be caught")
|
||||
log.InfoS("This is a very long log line but
|
||||
since it is an 'S' log line, it
|
||||
should be skipped by the linter.")
|
||||
log.TraceS("Another S log that should be skipped by the linter")`,
|
||||
expectedIssue: []string{
|
||||
"the line is 107 characters long, which " +
|
||||
"exceeds the maximum of 80 characters.",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
tabSpaces := strings.Repeat(" ", 8)
|
||||
tabSpaces := strings.Repeat(" ", defaultTabWidthInSpaces)
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
logRegex := regexp.MustCompile(tc.logRegex)
|
||||
|
||||
// Write content to a temporary file.
|
||||
tmpFile := t.TempDir() + "/test.go"
|
||||
err := os.WriteFile(tmpFile, []byte(tc.content), 0644)
|
||||
@@ -83,7 +139,7 @@ func TestGetLLLIssuesForFile(t *testing.T) {
|
||||
|
||||
// Run the linter on the file.
|
||||
issues, err := getLLLIssuesForFile(
|
||||
tmpFile, 80, tabSpaces,
|
||||
tmpFile, defaultMaxLineLen, tabSpaces, logRegex,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
Reference in New Issue
Block a user