summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Milde <daniel@milde.cz>2024-05-02 10:44:15 +0200
committerGitHub <noreply@github.com>2024-05-02 10:44:15 +0200
commitbed973b05fc566fd332be8bf423e17aa09e33b04 (patch)
treea4493265ce4531ebf4b55901966fa3d399aaa976
parent8902628f416af389a44848991f368426917427d4 (diff)
parente887e2cf64ba8754ca020a55a48f1d5f2aa35a38 (diff)
Merge pull request #355 from dundee/dundee/refactor/lint
refactor: lint fixes
-rw-r--r--.github/workflows/test.yml4
-rw-r--r--.golangci.yml122
-rw-r--r--Makefile4
-rw-r--r--cmd/gdu/app/app_test.go1
-rw-r--r--internal/common/ignore.go1
-rw-r--r--internal/testanalyze/analyze.go14
-rw-r--r--pkg/analyze/dir_linux-openbsd.go3
-rw-r--r--pkg/analyze/dir_unix.go3
-rw-r--r--pkg/analyze/file.go7
-rw-r--r--pkg/analyze/parallel.go23
-rw-r--r--pkg/analyze/sequential.go5
-rw-r--r--pkg/analyze/stored.go6
-rw-r--r--pkg/analyze/wait.go2
-rw-r--r--pkg/device/dev_freebsd_darwin_other.go22
-rw-r--r--pkg/device/dev_freebsd_darwin_test.go4
-rw-r--r--pkg/device/dev_linux.go2
-rw-r--r--pkg/device/dev_linux_test.go2
-rw-r--r--pkg/fs/file.go2
-rw-r--r--pkg/remove/parallel.go6
-rw-r--r--pkg/remove/parallel_linux_test.go8
-rw-r--r--pkg/remove/parallel_test.go4
-rw-r--r--pkg/remove/remove.go6
-rw-r--r--pkg/remove/remove_linux_test.go2
-rw-r--r--pkg/remove/remove_test.go2
-rw-r--r--report/export.go5
-rw-r--r--stdout/stdout.go2
-rw-r--r--tui/actions.go16
-rw-r--r--tui/background.go6
-rw-r--r--tui/exec.go2
-rw-r--r--tui/keys.go1
-rw-r--r--tui/marked.go14
-rw-r--r--tui/mouse.go1
-rw-r--r--tui/show.go1
-rw-r--r--tui/tui.go4
-rw-r--r--tui/tui_test.go12
35 files changed, 230 insertions, 89 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 5b70e96..c70bf21 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -18,9 +18,9 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Run linters
- uses: golangci/golangci-lint-action@v4
+ uses: golangci/golangci-lint-action@v5
with:
- version: v1.45
+ version: v1.57.2
test:
strategy:
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..e5e9a87
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,122 @@
+linters-settings:
+ errcheck:
+ check-blank: true
+ revive:
+ rules:
+ - name: blank-imports
+ - name: context-as-argument
+ - name: context-keys-type
+ - name: dot-imports
+ - name: error-return
+ - name: error-strings
+ - name: error-naming
+ - name: exported
+ - name: increment-decrement
+ - name: var-naming
+ - name: var-declaration
+ - name: package-comments
+ - name: range
+ - name: receiver-naming
+ - name: time-naming
+ - name: unexported-return
+ - name: indent-error-flow
+ - name: errorf
+ - name: empty-block
+ - name: superfluous-else
+ - name: unreachable-code
+ - name: redefines-builtin-id
+ # While we agree with this rule, right now it would break too many
+ # projects. So, we disable it by default.
+ - name: unused-parameter
+ disabled: true
+ gocyclo:
+ min-complexity: 25
+ dupl:
+ threshold: 100
+ goconst:
+ min-len: 3
+ min-occurrences: 3
+ lll:
+ line-length: 160
+ gocritic:
+ enabled-tags:
+ - diagnostic
+ - experimental
+ - opinionated
+ - performance
+ - style
+ disabled-checks:
+ - whyNoLint
+ funlen:
+ lines: 500
+ statements: 50
+ govet:
+ enable:
+ - shadow
+
+linters:
+ disable-all: true
+ enable:
+ - bodyclose
+ - dogsled
+ - errcheck
+ - errorlint
+ - exhaustive
+ - exportloopref
+ - funlen
+ - goconst
+ - gocritic
+ - gocyclo
+ - gofmt
+ - goimports
+ - revive
+ - gosimple
+ - govet
+ - ineffassign
+ - lll
+ - nakedret
+ - staticcheck
+ - typecheck
+ - unparam
+ - unused
+ - whitespace
+
+issues:
+ exclude:
+ # We allow error shadowing
+ - 'declaration of "err" shadows declaration at'
+
+ # Excluding configuration per-path, per-linter, per-text and per-source
+ exclude-rules:
+ # Exclude some linters from running on tests files.
+ - path: _test\.go
+ linters:
+ - gocyclo
+ - errcheck
+ - gosec
+ - funlen
+ - gocritic
+ - gochecknoglobals # Globals in test files are tolerated.
+ - goconst # Repeated consts in test files are tolerated.
+ # This rule is buggy and breaks on our `///Block` lines. Disable for now.
+ - linters:
+ - gocritic
+ text: "commentFormatting: put a space"
+ # This rule incorrectly flags nil references after assert.Assert(t, x != nil)
+ - path: _test\.go
+ text: "SA5011"
+ linters:
+ - staticcheck
+ - linters:
+ - lll
+ source: "^//go:generate "
+ - linters:
+ - lll
+ - gocritic
+ path: \.resolvers\.go
+ source: '^func \(r \*[a-zA-Z]+Resolvers\) '
+
+output:
+ formats:
+ - format: colored-line-number
+ sort-results: true
diff --git a/Makefile b/Makefile
index d258479..5699d58 100644
--- a/Makefile
+++ b/Makefile
@@ -130,6 +130,9 @@ benchmark:
'gdu -npc ~' 'gdu -gnpc ~' 'gdu -npc --use-storage ~'
sudo cpupower frequency-set -g schedutil
+lint:
+ golangci-lint run -c .golangci.yml
+
clean:
go mod tidy
-rm coverage.txt
@@ -151,5 +154,6 @@ install-dev-dependencies:
go install gotest.tools/gotestsum@latest
go install github.com/mitchellh/gox@latest
go install honnef.co/go/gotraceui/cmd/gotraceui@master
+ go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
.PHONY: run build build-static build-all test gobench benchmark coverage coverage-html clean clean-uncompressed-dist man show-man release
diff --git a/cmd/gdu/app/app_test.go b/cmd/gdu/app/app_test.go
index e5a2765..61e0255 100644
--- a/cmd/gdu/app/app_test.go
+++ b/cmd/gdu/app/app_test.go
@@ -500,6 +500,7 @@ func TestMaxCoresLowEdge(t *testing.T) {
assert.Nil(t, err)
}
+// nolint: unparam // Why: it's used in linux tests
func runApp(flags *Flags, args []string, istty bool, getter device.DevicesInfoGetter) (string, error) {
buff := bytes.NewBufferString("")
diff --git a/internal/common/ignore.go b/internal/common/ignore.go
index 366b059..66d2b4e 100644
--- a/internal/common/ignore.go
+++ b/internal/common/ignore.go
@@ -100,6 +100,7 @@ func (ui *UI) IsHiddenDir(name, path string) bool {
}
// CreateIgnoreFunc returns function for detecting if dir should be ignored
+// nolint: gocyclo // Why: This function is a switch statement that is not too complex
func (ui *UI) CreateIgnoreFunc() ShouldDirBeIgnored {
switch {
case len(ui.IgnoreDirPaths) > 0 && ui.IgnoreDirPathPatterns == nil && !ui.IgnoreHidden:
diff --git a/internal/testanalyze/analyze.go b/internal/testanalyze/analyze.go
index 3bb0532..22a8f9c 100644
--- a/internal/testanalyze/analyze.go
+++ b/internal/testanalyze/analyze.go
@@ -84,19 +84,19 @@ func (a *MockedAnalyzer) ResetProgress() {}
// SetFollowSymlinks does nothing
func (a *MockedAnalyzer) SetFollowSymlinks(v bool) {}
-// RemoveItemFromDirWithErr returns error
-func RemoveItemFromDirWithErr(dir fs.Item, file fs.Item) error {
+// ItemFromDirWithErr returns error
+func ItemFromDirWithErr(dir, file fs.Item) error {
return errors.New("Failed")
}
-// RemoveItemFromDirWithSleep returns error
-func RemoveItemFromDirWithSleep(dir fs.Item, file fs.Item) error {
+// ItemFromDirWithSleep returns error
+func ItemFromDirWithSleep(dir, file fs.Item) error {
time.Sleep(time.Millisecond * 600)
- return remove.RemoveItemFromDir(dir, file)
+ return remove.ItemFromDir(dir, file)
}
-// RemoveItemFromDirWithSleepAndErr returns error
-func RemoveItemFromDirWithSleepAndErr(dir fs.Item, file fs.Item) error {
+// ItemFromDirWithSleepAndErr returns error
+func ItemFromDirWithSleepAndErr(dir, file fs.Item) error {
time.Sleep(time.Millisecond * 600)
return errors.New("Failed")
}
diff --git a/pkg/analyze/dir_linux-openbsd.go b/pkg/analyze/dir_linux-openbsd.go
index c14a340..9f8346a 100644
--- a/pkg/analyze/dir_linux-openbsd.go
+++ b/pkg/analyze/dir_linux-openbsd.go
@@ -12,8 +12,7 @@ import (
const devBSize = 512
func setPlatformSpecificAttrs(file *File, f os.FileInfo) {
- switch stat := f.Sys().(type) {
- case *syscall.Stat_t:
+ if stat, ok := f.Sys().(*syscall.Stat_t); ok {
file.Usage = stat.Blocks * devBSize
file.Mtime = time.Unix(int64(stat.Mtim.Sec), int64(stat.Mtim.Nsec))
diff --git a/pkg/analyze/dir_unix.go b/pkg/analyze/dir_unix.go
index 02bed93..88f5afa 100644
--- a/pkg/analyze/dir_unix.go
+++ b/pkg/analyze/dir_unix.go
@@ -12,8 +12,7 @@ import (
const devBSize = 512
func setPlatformSpecificAttrs(file *File, f os.FileInfo) {
- switch stat := f.Sys().(type) {
- case *syscall.Stat_t:
+ if stat, ok := f.Sys().(*syscall.Stat_t); ok {
file.Usage = stat.Blocks * devBSize
file.Mtime = time.Unix(int64(stat.Mtimespec.Sec), int64(stat.Mtimespec.Nsec))
diff --git a/pkg/analyze/file.go b/pkg/analyze/file.go
index 8184ec7..87f749e 100644
--- a/pkg/analyze/file.go
+++ b/pkg/analyze/file.go
@@ -66,8 +66,7 @@ func (f *File) GetMtime() time.Time {
// GetType returns name type of item
func (f *File) GetType() string {
- switch f.Flag {
- case '@':
+ if f.Flag == '@' {
return "Other"
}
return "File"
@@ -97,7 +96,7 @@ func (f *File) alreadyCounted(linkedItems fs.HardLinkedItems) bool {
}
// GetItemStats returns 1 as count of items, apparent usage and real usage of this file
-func (f *File) GetItemStats(linkedItems fs.HardLinkedItems) (int, int64, int64) {
+func (f *File) GetItemStats(linkedItems fs.HardLinkedItems) (itemCount int, size, usage int64) {
if f.alreadyCounted(linkedItems) {
return 1, 0, 0
}
@@ -198,7 +197,7 @@ func (f *Dir) GetPath() string {
}
// GetItemStats returns item count, apparent usage and real usage of this dir
-func (f *Dir) GetItemStats(linkedItems fs.HardLinkedItems) (int, int64, int64) {
+func (f *Dir) GetItemStats(linkedItems fs.HardLinkedItems) (itemCount int, size, usage int64) {
f.UpdateStats(linkedItems)
return f.ItemCount, f.GetSize(), f.GetUsage()
}
diff --git a/pkg/analyze/parallel.go b/pkg/analyze/parallel.go
index eedce4d..7fa517a 100644
--- a/pkg/analyze/parallel.go
+++ b/pkg/analyze/parallel.go
@@ -140,12 +140,15 @@ func (a *ParallelAnalyzer) processDir(path string) *Dir {
continue
}
if a.followSymlinks && info.Mode()&os.ModeSymlink != 0 {
- err = followSymlink(entryPath, &info)
+ infoF, err := followSymlink(entryPath)
if err != nil {
log.Print(err.Error())
dir.Flag = '!'
continue
}
+ if infoF != nil {
+ info = infoF
+ }
}
file = &File{
@@ -211,27 +214,23 @@ func getDirFlag(err error, items int) rune {
}
func getFlag(f os.FileInfo) rune {
- switch {
- case f.Mode()&os.ModeSymlink != 0:
- fallthrough
- case f.Mode()&os.ModeSocket != 0:
+ if f.Mode()&os.ModeSymlink != 0 || f.Mode()&os.ModeSocket != 0 {
return '@'
- default:
- return ' '
}
+ return ' '
}
-func followSymlink(path string, f *os.FileInfo) error {
+func followSymlink(path string) (os.FileInfo, error) {
target, err := filepath.EvalSymlinks(path)
if err != nil {
- return err
+ return nil, err
}
tInfo, err := os.Lstat(target)
if err != nil {
- return err
+ return nil, err
}
if !tInfo.IsDir() {
- *f = tInfo
+ return tInfo, nil
}
- return nil
+ return nil, nil
}
diff --git a/pkg/analyze/sequential.go b/pkg/analyze/sequential.go
index 77fbd44..507ebfd 100644
--- a/pkg/analyze/sequential.go
+++ b/pkg/analyze/sequential.go
@@ -127,12 +127,15 @@ func (a *SequentialAnalyzer) processDir(path string) *Dir {
continue
}
if a.followSymlinks && info.Mode()&os.ModeSymlink != 0 {
- err = followSymlink(entryPath, &info)
+ infoF, err := followSymlink(entryPath)
if err != nil {
log.Print(err.Error())
dir.Flag = '!'
continue
}
+ if infoF != nil {
+ info = infoF
+ }
}
file = &File{
diff --git a/pkg/analyze/stored.go b/pkg/analyze/stored.go
index 4e0ba10..2f9fde5 100644
--- a/pkg/analyze/stored.go
+++ b/pkg/analyze/stored.go
@@ -315,7 +315,7 @@ func (f *StoredDir) RemoveFile(item fs.Item) {
}
// GetItemStats returns item count, apparent usage and real usage of this dir
-func (f *StoredDir) GetItemStats(linkedItems fs.HardLinkedItems) (int, int64, int64) {
+func (f *StoredDir) GetItemStats(linkedItems fs.HardLinkedItems) (itemCount int, size, usage int64) {
f.UpdateStats(linkedItems)
return f.ItemCount, f.GetSize(), f.GetUsage()
}
@@ -385,9 +385,9 @@ func (p *ParentDir) GetFiles() fs.Files { panic("m
func (p *ParentDir) GetFilesLocked() fs.Files { panic("must not be called") }
func (p *ParentDir) RLock() func() { panic("must not be called") }
func (p *ParentDir) SetFiles(fs.Files) { panic("must not be called") }
-func (f *ParentDir) RemoveFile(item fs.Item) { panic("must not be called") }
+func (p *ParentDir) RemoveFile(item fs.Item) { panic("must not be called") }
func (p *ParentDir) GetItemStats(
linkedItems fs.HardLinkedItems,
-) (int, int64, int64) {
+) (itemCount int, size, usage int64) {
panic("must not be called")
}
diff --git a/pkg/analyze/wait.go b/pkg/analyze/wait.go
index 204921a..f81b577 100644
--- a/pkg/analyze/wait.go
+++ b/pkg/analyze/wait.go
@@ -19,7 +19,7 @@ func (s *WaitGroup) Init() *WaitGroup {
// Add increments value
func (s *WaitGroup) Add(value int) {
s.access.Lock()
- s.value = s.value + value
+ s.value += value
s.access.Unlock()
}
diff --git a/pkg/device/dev_freebsd_darwin_other.go b/pkg/device/dev_freebsd_darwin_other.go
index 67c3e84..215462e 100644
--- a/pkg/device/dev_freebsd_darwin_other.go
+++ b/pkg/device/dev_freebsd_darwin_other.go
@@ -80,18 +80,20 @@ func processMounts(mounts Devices, ignoreErrors bool) (Devices, error) {
devices := Devices{}
for _, mount := range mounts {
- if strings.HasPrefix(mount.Name, "/dev") || mount.Fstype == "zfs" {
- info := &unix.Statfs_t{}
- err := unix.Statfs(mount.MountPoint, info)
- if err != nil && !ignoreErrors {
- return nil, err
- }
-
- mount.Size = int64(info.Bsize) * int64(info.Blocks)
- mount.Free = int64(info.Bsize) * int64(info.Bavail)
+ if !strings.HasPrefix(mount.Name, "/dev") && mount.Fstype != "zfs" {
+ continue
+ }
- devices = append(devices, mount)
+ info := &unix.Statfs_t{}
+ err := unix.Statfs(mount.MountPoint, info)
+ if err != nil && !ignoreErrors {
+ return nil, err
}
+
+ mount.Size = int64(info.Bsize) * int64(info.Blocks)
+ mount.Free = int64(info.Bsize) * int64(info.Bavail)
+
+ devices = append(devices, mount)
}
return devices, nil
diff --git a/pkg/device/dev_freebsd_darwin_test.go b/pkg/device/dev_freebsd_darwin_test.go
index db286c2..2cf0077 100644
--- a/pkg/device/dev_freebsd_darwin_test.go
+++ b/pkg/device/dev_freebsd_darwin_test.go
@@ -34,7 +34,9 @@ argon:/usr/obj on /usr/obj (nfs)`))
}
func TestMountsWithSpace(t *testing.T) {
- mounts, err := readMountOutput(strings.NewReader(`//inglor@vault.lan/volatile on /Users/inglor/Mountpoints/volatile (vault.lan) (smbfs, nodev, nosuid, mounted by inglor)`))
+ mounts, err := readMountOutput(strings.NewReader(
+ `//inglor@vault.lan/volatile on /Users/inglor/Mountpoints/volatile (vault.lan) (smbfs, nodev, nosuid, mounted by inglor)`,
+ ))
assert.Equal(t, "//inglor@vault.lan/volatile", mounts[0].Name)
assert.Equal(t, "/Users/inglor/Mountpoints/volatile (vault.lan)", mounts[0].MountPoint)
assert.Equal(t, "smbfs", mounts[0].Fstype)
diff --git a/pkg/device/dev_linux.go b/pkg/device/dev_linux.go
index b6920d8..116b011 100644
--- a/pkg/device/dev_linux.go
+++ b/pkg/device/dev_linux.go
@@ -28,7 +28,7 @@ func (t LinuxDevicesInfoGetter) GetMounts() (Devices, error) {
devices, err := readMountsFile(file)
if err != nil {
if cerr := file.Close(); cerr != nil {
- return nil, fmt.Errorf("%w; %s", err, cerr)
+ return nil, fmt.Errorf("%w; %s", err, cerr.Error())
}
return nil, err
}
diff --git a/pkg/device/dev_linux_test.go b/pkg/device/dev_linux_test.go
index d43e39b..72e0908 100644
--- a/pkg/device/dev_linux_test.go
+++ b/pkg/device/dev_linux_test.go
@@ -48,6 +48,7 @@ rootpool/home /home zfs rw,nodev,relatime,xattr,posixacl 0 0
}
func TestNfsMountsShown(t *testing.T) {
+ // nolint: lll // Why: Test data
mounts, _ := readMountsFile(strings.NewReader(`host1:/dir1/ /mnt/dir1 nfs4 rw,nosuid,nodev,noatime,nodiratime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.1,fsc,local_lock=none,addr=192.168.1.2 0 0
host2:/dir2/ /mnt/dir2 nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.3,mountvers=3,mountport=38081,mountproto=udp,fsc,local_lock=none,addr=192.168.1.4 0 0`))
@@ -59,6 +60,7 @@ host2:/dir2/ /mnt/dir2 nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=2
}
func TestMountsWithSpaces(t *testing.T) {
+ // nolint: lll // Why: Test data
mounts, _ := readMountsFile(strings.NewReader(`host1:/dir1/ /mnt/dir\040with\040spaces nfs4 rw,nosuid,nodev,noatime,nodiratime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.1,fsc,local_lock=none,addr=192.168.1.2 0 0
host2:/dir2/ /mnt/dir2 nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.3,mountvers=3,mountport=38081,mountproto=udp,fsc,local_lock=none,addr=192.168.1.4 0 0`))
diff --git a/pkg/fs/file.go b/pkg/fs/file.go
index 7d286b0..9b83aa2 100644
--- a/pkg/fs/file.go
+++ b/pkg/fs/file.go
@@ -22,7 +22,7 @@ type Item interface {
SetParent(Item)
GetMultiLinkedInode() uint64
EncodeJSON(writer io.Writer, topLevel bool) error
- GetItemStats(linkedItems HardLinkedItems) (int, int64, int64)
+ GetItemStats(linkedItems HardLinkedItems) (itemCount int, size, usage int64)
UpdateStats(linkedItems HardLinkedItems)
AddFile(Item)
GetFiles() Files
diff --git a/pkg/remove/parallel.go b/pkg/remove/parallel.go
index d5dd11e..606db20 100644
--- a/pkg/remove/parallel.go
+++ b/pkg/remove/parallel.go
@@ -10,10 +10,10 @@ import (
var concurrencyLimit = make(chan struct{}, 3*runtime.GOMAXPROCS(0))
-// RemoveItemFromDirParallel removes item from dir
-func RemoveItemFromDirParallel(dir fs.Item, item fs.Item) error {
+// ItemFromDirParallel removes item from dir
+func ItemFromDirParallel(dir, item fs.Item) error {
if !item.IsDir() {
- return RemoveItemFromDir(dir, item)
+ return ItemFromDir(dir, item)
}
errChan := make(chan error, 1) // we show only first error
var wait sync.WaitGroup
diff --git a/pkg/remove/parallel_linux_test.go b/pkg/remove/parallel_linux_test.go
index fca34ef..f628842 100644
--- a/pkg/remove/parallel_linux_test.go
+++ b/pkg/remove/parallel_linux_test.go
@@ -13,7 +13,7 @@ import (
"github.com/stretchr/testify/assert"
)
-func TestRemoveItemFromDirParallelWithErr(t *testing.T) {
+func TestItemFromDirParallelWithErr(t *testing.T) {
fin := testdir.CreateTestDir()
defer fin()
@@ -38,11 +38,11 @@ func TestRemoveItemFromDirParallelWithErr(t *testing.T) {
},
}
- err = RemoveItemFromDirParallel(dir, subdir)
+ err = ItemFromDirParallel(dir, subdir)
assert.Contains(t, err.Error(), "permission denied")
}
-func TestRemoveItemFromDirParallelWithErr2(t *testing.T) {
+func TestItemFromDirParallelWithErr2(t *testing.T) {
fin := testdir.CreateTestDir()
defer fin()
@@ -62,6 +62,6 @@ func TestRemoveItemFromDirParallelWithErr2(t *testing.T) {
subdir := dir.Files[0].(*analyze.Dir)
- err = RemoveItemFromDirParallel(dir, subdir)
+ err = ItemFromDirParallel(dir, subdir)
assert.Contains(t, err.Error(), "permission denied")
}
diff --git a/pkg/remove/parallel_test.go b/pkg/remove/parallel_test.go
index 6196d78..f53ef5c 100644
--- a/pkg/remove/parallel_test.go
+++ b/pkg/remove/parallel_test.go
@@ -39,7 +39,7 @@ func TestRemoveFileParallel(t *testing.T) {
dir.Files = fs.Files{subdir}
subdir.Files = fs.Files{file}
- err := RemoveItemFromDirParallel(subdir, file)
+ err := ItemFromDirParallel(subdir, file)
assert.Nil(t, err)
assert.Equal(t, 0, len(subdir.Files))
@@ -64,6 +64,6 @@ func TestRemoveDirParallel(t *testing.T) {
subdir := dir.Files[0].(*analyze.Dir)
- err := RemoveItemFromDirParallel(dir, subdir)
+ err := ItemFromDirParallel(dir, subdir)
assert.Nil(t, err)
}
diff --git a/pkg/remove/remove.go b/pkg/remove/remove.go
index 1d17985..a385eeb 100644
--- a/pkg/remove/remove.go
+++ b/pkg/remove/remove.go
@@ -7,8 +7,8 @@ import (
"github.com/dundee/gdu/v5/pkg/fs"
)
-// RemoveItemFromDir removes item from dir
-func RemoveItemFromDir(dir fs.Item, item fs.Item) error {
+// ItemFromDir removes item from dir
+func ItemFromDir(dir, item fs.Item) error {
err := os.RemoveAll(item.GetPath())
if err != nil {
return err
@@ -19,7 +19,7 @@ func RemoveItemFromDir(dir fs.Item, item fs.Item) error {
}
// EmptyFileFromDir empty file from dir
-func EmptyFileFromDir(dir fs.Item, file fs.Item) error {
+func EmptyFileFromDir(dir, file fs.Item) error {
err := os.Truncate(file.GetPath(), 0)
if err != nil {
return err
diff --git a/pkg/remove/remove_linux_test.go b/pkg/remove/remove_linux_test.go
index 19fc503..2739ba9 100644
--- a/pkg/remove/remove_linux_test.go
+++ b/pkg/remove/remove_linux_test.go
@@ -37,6 +37,6 @@ func TestRemoveFileWithErr(t *testing.T) {
},
}
- err = RemoveItemFromDir(dir, subdir)
+ err = ItemFromDir(dir, subdir)
assert.Contains(t, err.Error(), "permission denied")
}
diff --git a/pkg/remove/remove_test.go b/pkg/remove/remove_test.go
index 11a1c23..a2ed697 100644
--- a/pkg/remove/remove_test.go
+++ b/pkg/remove/remove_test.go
@@ -83,7 +83,7 @@ func TestRemoveFile(t *testing.T) {
dir.Files = fs.Files{subdir}
subdir.Files = fs.Files{file}
- err := RemoveItemFromDir(subdir, file)
+ err := ItemFromDir(subdir, file)
assert.Nil(t, err)
assert.Equal(t, 0, len(subdir.Files))
diff --git a/report/export.go b/report/export.go
index e011933..c0c4964 100644
--- a/report/export.go
+++ b/report/export.go
@@ -140,7 +140,7 @@ func (ui *UI) exportDir(dir fs.Item, waitWritten *sync.WaitGroup) error {
buff.Write([]byte(strconv.FormatInt(time.Now().Unix(), 10)))
buff.Write([]byte("},\n"))
- if err = dir.EncodeJSON(&buff, true); err != nil {
+ if err := dir.EncodeJSON(&buff, true); err != nil {
return err
}
if _, err = buff.Write([]byte("]\n")); err != nil {
@@ -150,8 +150,7 @@ func (ui *UI) exportDir(dir fs.Item, waitWritten *sync.WaitGroup) error {
return err
}
- switch f := ui.exportOutput.(type) {
- case *os.File:
+ if f, ok := ui.exportOutput.(*os.File); ok {
err = f.Close()
if err != nil {
return err
diff --git a/stdout/stdout.go b/stdout/stdout.go
index 5b1ecba..669fc69 100644
--- a/stdout/stdout.go
+++ b/stdout/stdout.go
@@ -440,7 +440,7 @@ func maxLength(list []*device.Device, keyGetter func(*device.Device) string) int
return maxLen
}
-func maxInt(x int, y int) int {
+func maxInt(x, y int) int {
if x > y {
return x
}
diff --git a/tui/actions.go b/tui/actions.go
index d09216b..04e931b 100644
--- a/tui/actions.go
+++ b/tui/actions.go
@@ -25,6 +25,12 @@ import (
const (
defaultLinesCount = 500
linesTreshold = 20
+
+ actionEmpty = "empty"
+ actionDelete = "delete"
+
+ actingEmpty = "emptying"
+ actingDelete = "deleting"
)
// ListDevices lists mounted devices and shows their disk usage
@@ -178,11 +184,11 @@ func (ui *UI) deleteSelected(shouldEmpty bool) {
var action, acting string
if shouldEmpty {
- action = "empty "
- acting = "emptying"
+ action = actionEmpty
+ acting = actingEmpty
} else {
- action = "delete "
- acting = "deleting"
+ action = actionDelete
+ acting = actingDelete
}
modal := tview.NewModal().SetText(
// nolint: staticcheck // Why: fixed string
@@ -214,7 +220,7 @@ func (ui *UI) deleteSelected(shouldEmpty bool) {
go func() {
for _, item := range deleteItems {
if err := deleteFun(currentDir, item); err != nil {
- msg := "Can't " + action + tview.Escape(selectedItem.GetName())
+ msg := "Can't " + action + " " + tview.Escape(selectedItem.GetName())
ui.app.QueueUpdateDraw(func() {
ui.pages.RemovePage(acting)
ui.showErr(msg, err)
diff --git a/tui/background.go b/tui/background.go
index f373f23..8974def 100644
--- a/tui/background.go
+++ b/tui/background.go
@@ -35,9 +35,9 @@ func (ui *UI) deleteItem(item fs.Item, shouldEmpty bool) {
var action, acting string
if shouldEmpty {
- action = "empty "
+ action = actionEmpty
} else {
- action = "delete "
+ action = actionDelete
}
var deleteFun func(fs.Item, fs.Item) error
@@ -61,7 +61,7 @@ func (ui *UI) deleteItem(item fs.Item, shouldEmpty bool) {
for _, toDelete := range deleteItems {
if err := deleteFun(parentDir, toDelete); err != nil {
- msg := "Can't " + action + tview.Escape(toDelete.GetName())
+ msg := "Can't " + action + " " + tview.Escape(toDelete.GetName())
ui.app.QueueUpdateDraw(func() {
ui.pages.RemovePage(acting)
ui.showErr(msg, err)
diff --git a/tui/exec.go b/tui/exec.go
index 7e5af29..24c3e11 100644
--- a/tui/exec.go
+++ b/tui/exec.go
@@ -6,7 +6,7 @@ import (
)
// Execute runs given bin path via exec.Command call
-func Execute(argv0 string, argv []string, envv []string) error {
+func Execute(argv0 string, argv, envv []string) error {
cmd := exec.Command(argv0, argv...)
cmd.Stdout = os.Stdout
diff --git a/tui/keys.go b/tui/keys.go
index c28ceb5..5891ba2 100644
--- a/tui/keys.go
+++ b/