From 44dbaee87a674c744e08bf3e988bc0cf4a06bc8b Mon Sep 17 00:00:00 2001 From: eleksir Date: Mon, 7 Apr 2025 20:14:14 +0300 Subject: [PATCH] Fix more golangci-lint warnings and update its config, bump required version of go compiler to 1.24.2 --- .golangci.yml | 65 +++++++++++++++++++++++--------------- Makefile | 2 +- cmd/battery-test/main.go | 2 +- go.mod | 2 +- internal/lib/batteries.go | 12 +++---- internal/lib/config.go | 13 +++----- internal/lib/i3.go | 8 ++--- internal/lib/pulseaudio.go | 2 +- internal/lib/vpn.go | 1 + 9 files changed, 60 insertions(+), 47 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 45e9b82..384c8ec 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,28 +1,12 @@ +version: "2" run: - tests: false - skip-dirs: - - data - - vendor + go: "1.24" modules-download-mode: readonly + tests: false allow-parallel-runners: true - go: '1.21' -output: - sort-results: true -linters-settings: - gosec: - excludes: - # not relevant here - - G404 # Insecure random number source (rand) - - G306 # Expect WriteFile permissions to be 0600 or less (gosec) linters: - disable-all: true + default: none enable: - - errcheck - - gosimple - - govet - - ineffassign - - staticcheck - - unused - asasalint - asciicheck - bodyclose @@ -30,20 +14,20 @@ linters: - contextcheck - decorder - durationcheck + - err113 + - errcheck - errchkjson - errorlint - - exportloopref - ginkgolinter - gocheckcompilerdirectives - gocritic - godot - - goerr113 - - gofmt - - goimports - gosec - gosmopolitan + - govet - grouper - importas + - ineffassign - ireturn - makezero - mirror @@ -59,8 +43,39 @@ linters: - reassign - revive - rowserrcheck - - stylecheck + - staticcheck - unconvert + - unused - wastedassign - whitespace - wsl + settings: + gosec: + excludes: + - G404 + - G306 + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - data + - vendor + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + - goimports + exclusions: + generated: lax + paths: + - data + - vendor + - third_party$ + - builtin$ + - examples$ diff --git a/Makefile b/Makefile index c87b9eb..c1e3e82 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ #!/usr/bin/env gmake -f -BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath +BUILDOPTS=-ldflags="-s -w" -a -gcflags=all=-l -trimpath -buildvcs=false BINARY=i3status-go TEST1=battery-test diff --git a/cmd/battery-test/main.go b/cmd/battery-test/main.go index 14a9239..41fbf76 100644 --- a/cmd/battery-test/main.go +++ b/cmd/battery-test/main.go @@ -14,7 +14,7 @@ func main() { batteries, _ := battery.GetAll() for index, battery := range batteries { - fmt.Printf("Battery %s: %s\n", index, spew.Sdump(battery)) + fmt.Printf("Battery %d: %s\n", index, spew.Sdump(battery)) } time.Sleep(1 * time.Second) diff --git a/go.mod b/go.mod index 5c8a67a..3801a0b 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module i3status-go -go 1.22.6 +go 1.24.2 require ( github.com/adrg/xdg v0.5.0 diff --git a/internal/lib/batteries.go b/internal/lib/batteries.go index bde6e37..17076c0 100644 --- a/internal/lib/batteries.go +++ b/internal/lib/batteries.go @@ -11,11 +11,11 @@ import ( // UpdateBatteryInfo updates info about battery charge. func (c *MyConfig) UpdateBatteryInfo() { var ( - ch int - status string - Batts string - InitialDelay time.Duration = 100 * time.Millisecond - LoopIterationDelay time.Duration = 5 * time.Second + ch int + status string + Batts string + InitialDelay = 100 * time.Millisecond + LoopIterationDelay = 5 * time.Second ) Delay := InitialDelay @@ -30,7 +30,7 @@ func (c *MyConfig) UpdateBatteryInfo() { batteries, _ := battery.GetAll() // In theory, this module should give for each entry its separate err, but in practice it gives // one single err for all entries, so we cannot detemine whist exatly entry errored. - + var ( battsInfo string chStr string diff --git a/internal/lib/config.go b/internal/lib/config.go index dda4942..c63726c 100644 --- a/internal/lib/config.go +++ b/internal/lib/config.go @@ -252,7 +252,7 @@ type MyConfig struct { // readConf reads and validates config if config does not exist, it puts default config to the same dir where i3 config // is located. -func ReadConf(DefaultConfig []byte) (*MyConfig, error) { +func ReadConf(defaultConfig []byte) (*MyConfig, error) { var ( path string config *MyConfig @@ -272,7 +272,7 @@ func ReadConf(DefaultConfig []byte) (*MyConfig, error) { // about it for now. if err != nil { if errors.Is(err, os.ErrNotExist) { - buf = DefaultConfig + buf = defaultConfig if err := os.WriteFile(path, buf, 0644); err != nil { return config, err @@ -283,7 +283,7 @@ func ReadConf(DefaultConfig []byte) (*MyConfig, error) { } else { // Config file looks too long for config... if fileInfo.Size() > 65535 { - err := fmt.Errorf("config file %s is too long for config", path) //nolint: goerr113 + err := fmt.Errorf("config file %s is too long for config", path) //nolint: err113 return config, err } @@ -1530,13 +1530,11 @@ func ReadConf(DefaultConfig []byte) (*MyConfig, error) { for num, app := range sampleConfig.Apps { // app.Instance can be missing. // app.Class can be missing. - if app.Name == "" { app.Name = fmt.Sprintf("app%d", num) } // app.Args can be empty slice. In that case command will be run without aruments. - if app.Cmd == "" { app.Cmd = "true" } @@ -1557,12 +1555,11 @@ func ReadConf(DefaultConfig []byte) (*MyConfig, error) { app.BorderActive = sampleConfig.Color } + // app.Separator can be omitted, in that case it is false + // app.SeparatorBlockWidth can be missing if app.FullText == "" { app.FullText = fmt.Sprintf(" %d ", num) } - - // app.Separator can be omitted, in that case it is false - // app.SeparatorBlockWidth can be missing } } diff --git a/internal/lib/i3.go b/internal/lib/i3.go index a6c0a18..51ea202 100644 --- a/internal/lib/i3.go +++ b/internal/lib/i3.go @@ -152,10 +152,10 @@ func HasWindows(className string, instanceName string) bool { func FindWindowInstance(regexpStr string) bool { var found = false - f := func(key interface{}, value interface{}) bool { + f := func(key any, value any) bool { //nolint: revive keyStr := reflect.ValueOf(key).String() - re, err := regexp.Compile(regexpStr) //nolint:nolintlint, gocritic, we do not want shit our pants and panic on + re, err := regexp.Compile(regexpStr) // we do not want shit our pants and panic on // erroneous regexp, we want log it to stderr, that it. if err != nil { @@ -183,10 +183,10 @@ func FindWindowInstance(regexpStr string) bool { func FindWindowClass(regexpStr string) bool { var found = false - f := func(key interface{}, value interface{}) bool { + f := func(key any, value any) bool { //nolint: revive keyStr := reflect.ValueOf(key).String() - re, err := regexp.Compile(regexpStr) //nolint:nolintlint, gocritic, we do not want shit our pants and panic on + re, err := regexp.Compile(regexpStr) // we do not want shit our pants and panic on // erroneous regexp, we want log it to stderr, that it. if err != nil { diff --git a/internal/lib/pulseaudio.go b/internal/lib/pulseaudio.go index b289740..c8cd801 100644 --- a/internal/lib/pulseaudio.go +++ b/internal/lib/pulseaudio.go @@ -135,7 +135,7 @@ func (c *MyConfig) PaReinit() error { } if cnt >= 5 { - return errors.New("timeout waiting pulseaudio to exit") //nolint: goerr113 + return errors.New("timeout waiting pulseaudio to exit") //nolint: err113 } log.Print("Waiting for pulseaudio to exit") diff --git a/internal/lib/vpn.go b/internal/lib/vpn.go index 9e8add9..df5b55a 100644 --- a/internal/lib/vpn.go +++ b/internal/lib/vpn.go @@ -69,6 +69,7 @@ func (c *MyConfig) VPNTCPCheck() bool { if err == nil { _ = conn.Close() + return true }