Breaks down large functions into smaller, focused helpers to pass gocyclo linter: Auto-import refactoring: - Extract parseJSONLIssues() to handle JSONL parsing - Extract handleCollisions() to detect and report conflicts - Extract importIssueData() to coordinate issue/dep/label imports - Extract updateExistingIssue() and createNewIssue() for clarity - Extract importDependencies() and importLabels() for modularity Flush refactoring: - Extract recordFlushFailure() and recordFlushSuccess() for state management - Extract readExistingJSONL() to isolate file reading logic - Extract fetchDirtyIssuesFromDB() to separate DB access - Extract writeIssuesToJSONL() to handle atomic writes Command improvements: - Extract executeLabelCommand() to eliminate duplication in label.go - Extract addLabelsToIssue() helper for label management - Replace deprecated strings.Title with manual capitalization Configuration: - Add gocyclo exception for test files in .golangci.yml All tests passing, no functionality changes.
90 lines
2.5 KiB
YAML
90 lines
2.5 KiB
YAML
# golangci-lint configuration for beads
|
|
# See https://golangci-lint.run/usage/configuration/
|
|
|
|
run:
|
|
timeout: 5m
|
|
tests: true
|
|
|
|
linters:
|
|
enable:
|
|
# Core linters (always available)
|
|
- errcheck # Check for unchecked errors
|
|
- govet # Go vet
|
|
- ineffassign # Detect ineffectual assignments
|
|
- staticcheck # Static analysis
|
|
- unused # Find unused code
|
|
|
|
# Additional linters
|
|
- revive # Fast, configurable, extensible linter
|
|
- misspell # Fix commonly misspelled English words
|
|
- unconvert # Remove unnecessary type conversions
|
|
- unparam # Find unused function parameters
|
|
- goconst # Find repeated strings that could be constants
|
|
- gocyclo # Check cyclomatic complexity
|
|
- dupl # Find duplicated code
|
|
- gosec # Security-focused linter
|
|
|
|
linters-settings:
|
|
errcheck:
|
|
check-type-assertions: true
|
|
check-blank: false
|
|
exclude-functions:
|
|
- (*database/sql.DB).Close
|
|
- (*database/sql.Rows).Close
|
|
- (*database/sql.Tx).Rollback
|
|
|
|
gocyclo:
|
|
min-complexity: 15
|
|
|
|
goconst:
|
|
min-len: 3
|
|
min-occurrences: 3
|
|
|
|
dupl:
|
|
threshold: 100
|
|
|
|
misspell:
|
|
locale: US
|
|
|
|
revive:
|
|
rules:
|
|
- name: var-naming
|
|
- name: exported
|
|
|
|
issues:
|
|
max-issues-per-linter: 0
|
|
max-same-issues: 0
|
|
|
|
# Exclude known false positives and idiomatic patterns
|
|
exclude:
|
|
# Idiomatic Go: ignoring errors from defer cleanup
|
|
- "Error return value.*\\.Close.*is not checked"
|
|
- "Error return value.*\\.Rollback.*is not checked"
|
|
- "Error return value.*\\.RemoveAll.*is not checked"
|
|
|
|
# Cobra handlers: unused params required by interface
|
|
- "unused-parameter: parameter 'cmd' seems to be unused"
|
|
- "unused-parameter: parameter 'args' seems to be unused"
|
|
|
|
# Style preferences: naming decisions
|
|
- "var-naming: avoid meaningless package names"
|
|
- "exported.*SQLiteStorage.*stutters"
|
|
|
|
# False positives: validated SQL construction
|
|
- "G201: SQL string formatting"
|
|
|
|
# False positives: user-specified file paths (intended feature)
|
|
- "G304.*file inclusion via variable"
|
|
|
|
# False positive: directory is for user data
|
|
- "G301: Expect directory permissions"
|
|
|
|
# Exclude some linters from running on tests
|
|
exclude-rules:
|
|
- path: _test\.go
|
|
linters:
|
|
- dupl # Test duplication is acceptable
|
|
- goconst # Test constants are acceptable
|
|
- errcheck # Test cleanup errors are acceptable
|
|
- gocyclo # Test complexity is acceptable
|