diff --git a/.golangci.yml b/.golangci.yml index 734e984..2c2974f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -98,8 +98,24 @@ linters: - path: cmd/ linters: - dupl + + - path: examples/ + linters: + - errcheck + - err113 + - funlen + - gocognit + - gocritic + - gocyclo + - godot + - gosec + - mnd + - nlreturn + - noctx + - unused + - wrapcheck output: formats: text: - print-linter-name: true + path: stdout diff --git a/client.go b/client.go index 7077823..68f7a12 100644 --- a/client.go +++ b/client.go @@ -286,12 +286,10 @@ func (c *Client) downloadWithBasicAuth(ctx context.Context, downloadURL string) if err != nil { return nil, fmt.Errorf("download request failed: %w", err) } - //nolint:errcheck // Close error in defer is intentionally ignored defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { - //nolint:errcheck // Error response body preview - ignore read errors - bodyPreview, _ := io.ReadAll(resp.Body) + bodyPreview, _ := io.ReadAll(resp.Body) //nolint:errcheck // Error preview - ignore read errors bodyStr := string(bodyPreview) const maxBodyPreview = 200 if len(bodyStr) > maxBodyPreview { @@ -365,12 +363,10 @@ func (c *Client) downloadWithDigestAuth(ctx context.Context, downloadURL string) if err != nil { return nil, fmt.Errorf("digest auth request failed: %w", err) } - //nolint:errcheck // Close error in defer is intentionally ignored defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { - //nolint:errcheck // Error response body preview - ignore read errors - bodyPreview, _ := io.ReadAll(resp.Body) + bodyPreview, _ := io.ReadAll(resp.Body) //nolint:errcheck // Error preview - ignore read errors bodyStr := string(bodyPreview) const maxBodyPreview = 200 if len(bodyStr) > maxBodyPreview { diff --git a/cmd/generate-tests/main.go b/cmd/generate-tests/main.go index f96257c..b7f9b1f 100644 --- a/cmd/generate-tests/main.go +++ b/cmd/generate-tests/main.go @@ -220,12 +220,10 @@ func main() { log.Fatalf("Failed to create output file: %v", err) } defer func() { - //nolint:errcheck // Close error is not critical, file is already written _ = f.Close() }() if err := tmpl.Execute(f, testData); err != nil { - //nolint:errcheck // Close error is not critical before fatal exit _ = f.Close() //nolint:gocritic // Fatalf exits, defer won't run - this is acceptable log.Fatalf("Failed to execute template: %v", err) diff --git a/cmd/onvif-cli/ascii.go b/cmd/onvif-cli/ascii.go index 8a29540..4403c42 100644 --- a/cmd/onvif-cli/ascii.go +++ b/cmd/onvif-cli/ascii.go @@ -220,17 +220,17 @@ type ImageInfo struct { } // formatBytes converts bytes to human-readable format. -func formatBytes(bytes int64) string { - if bytes < bufferSize1024 { - return fmt.Sprintf("%d B", bytes) +func formatBytes(byteCount int64) string { + if byteCount < bufferSize1024 { + return fmt.Sprintf("%d B", byteCount) } const kbSize = 1024 const mbSize = 1024 * 1024 - if bytes < mbSize { - return fmt.Sprintf("%.1f KB", float64(bytes)/kbSize) + if byteCount < mbSize { + return fmt.Sprintf("%.1f KB", float64(byteCount)/kbSize) } - return fmt.Sprintf("%.1f MB", float64(bytes)/mbSize) + return fmt.Sprintf("%.1f MB", float64(byteCount)/mbSize) } // CreateASCIIHighQuality creates a high-quality ASCII representation. diff --git a/cmd/onvif-cli/main.go b/cmd/onvif-cli/main.go index f44cfb6..a928728 100644 --- a/cmd/onvif-cli/main.go +++ b/cmd/onvif-cli/main.go @@ -690,7 +690,6 @@ func (c *CLI) tryRTSPConnection(streamURI string) map[string]interface{} { // Try to connect conn, err := net.DialTimeout("tcp", hostPort, maxRetries*time.Second) if err == nil { - //nolint:errcheck // Close error is not critical for connectivity check _ = conn.Close() details["reachable"] = true details["port"] = strings.Split(hostPort, ":")[1] diff --git a/cmd/onvif-diagnostics/main.go b/cmd/onvif-diagnostics/main.go index 0bd1130..ac1d837 100644 --- a/cmd/onvif-diagnostics/main.go +++ b/cmd/onvif-diagnostics/main.go @@ -1102,21 +1102,18 @@ func createTarGz(sourceDir, archivePath string) error { return fmt.Errorf("failed to create archive file: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = archiveFile.Close() }() // Create gzip writer gzWriter := gzip.NewWriter(archiveFile) defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = gzWriter.Close() }() // Create tar writer tarWriter := tar.NewWriter(gzWriter) defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = tarWriter.Close() }() @@ -1156,7 +1153,6 @@ func createTarGz(sourceDir, archivePath string) error { return fmt.Errorf("failed to open file: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = file.Close() }() diff --git a/discovery/discovery.go b/discovery/discovery.go index 5025cd3..bb7b8ac 100644 --- a/discovery/discovery.go +++ b/discovery/discovery.go @@ -121,7 +121,6 @@ func DiscoverWithOptions(ctx context.Context, timeout time.Duration, opts *Disco return nil, fmt.Errorf("failed to listen on multicast address: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = conn.Close() }() diff --git a/internal/soap/soap.go b/internal/soap/soap.go index e54f209..633a16f 100644 --- a/internal/soap/soap.go +++ b/internal/soap/soap.go @@ -147,7 +147,6 @@ func (c *Client) Call(ctx context.Context, endpoint, action string, request, res return fmt.Errorf("failed to send HTTP request: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = resp.Body.Close() }() diff --git a/server/soap/handler.go b/server/soap/handler.go index 99542f1..b89d4cb 100644 --- a/server/soap/handler.go +++ b/server/soap/handler.go @@ -55,7 +55,6 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - //nolint:errcheck // Close error is not critical for cleanup _ = r.Body.Close() // Extract action from raw XML first (before parsing) diff --git a/testing/mock_server.go b/testing/mock_server.go index cb1cd55..b6d2309 100644 --- a/testing/mock_server.go +++ b/testing/mock_server.go @@ -40,7 +40,6 @@ func LoadCaptureFromArchive(archivePath string) (*CameraCapture, error) { return nil, fmt.Errorf("failed to open archive: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = file.Close() }() @@ -49,7 +48,6 @@ func LoadCaptureFromArchive(archivePath string) (*CameraCapture, error) { return nil, fmt.Errorf("failed to create gzip reader: %w", err) } defer func() { - //nolint:errcheck // Close error is not critical for cleanup _ = gzr.Close() }()