Junie: write golangci-lint config.
This commit is contained in:
parent
e22c12fd39
commit
3d5fce5c44
|
@ -0,0 +1,233 @@
|
|||
# MCIAS golangci-lint configuration
|
||||
# This is a strict configuration focused on security and code quality
|
||||
#
|
||||
# Usage:
|
||||
# - Run all linters: golangci-lint run
|
||||
# - Run specific linter: golangci-lint run --disable-all --enable=gosec
|
||||
# - Run with specific configuration: golangci-lint run -c .golangci.yml
|
||||
#
|
||||
# This configuration enables a comprehensive set of linters to ensure:
|
||||
# 1. Security best practices (gosec, errcheck, etc.)
|
||||
# 2. Code quality and maintainability (gofmt, goimports, etc.)
|
||||
# 3. Performance considerations (prealloc, etc.)
|
||||
# 4. Error handling correctness (errcheck, errorlint, etc.)
|
||||
#
|
||||
# For more information about golangci-lint, visit: https://golangci-lint.run/
|
||||
|
||||
run:
|
||||
# Timeout for running linters, default is 1m
|
||||
timeout: 5m
|
||||
# Include test files
|
||||
tests: true
|
||||
# Go version to use for analysis
|
||||
go: "1.18"
|
||||
|
||||
# Output configuration
|
||||
output:
|
||||
# Format: colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions
|
||||
formats:
|
||||
- format: colored-line-number
|
||||
# Print lines of code with issue
|
||||
print-issued-lines: true
|
||||
# Print linter name in the end of issue text
|
||||
print-linter-name: true
|
||||
|
||||
# All available linters
|
||||
linters:
|
||||
enable-all: false
|
||||
disable-all: true
|
||||
enable:
|
||||
# Default linters
|
||||
- errcheck # Detect unchecked errors
|
||||
- gosimple # Simplify code
|
||||
- govet # Examine Go source code and reports suspicious constructs
|
||||
- ineffassign # Detect ineffectual assignments
|
||||
- staticcheck # Go static analysis
|
||||
- typecheck # Like the front-end of a Go compiler
|
||||
- unused # Check for unused constants, variables, functions and types
|
||||
|
||||
# Additional linters for security and code quality
|
||||
- asciicheck # Check that your code does not contain non-ASCII identifiers
|
||||
- bodyclose # Checks whether HTTP response body is closed successfully
|
||||
- cyclop # Check function and package cyclomatic complexity
|
||||
- dupl # Code clone detection
|
||||
- durationcheck # Check for two durations multiplied together
|
||||
- errorlint # Find code that will cause problems with the error wrapping scheme
|
||||
- exhaustive # Check exhaustiveness of enum switch statements
|
||||
- copyloopvar # Check for pointers to enclosing loop variables (replaces exportloopref)
|
||||
- forbidigo # Forbids identifiers
|
||||
- funlen # Tool for detection of long functions
|
||||
- gochecknoinits # Check that no init functions are present
|
||||
- goconst # Find repeated strings that could be replaced by a constant
|
||||
- gocritic # Provides diagnostics that check for bugs, performance and style issues
|
||||
- gocyclo # Calculate cyclomatic complexities of functions
|
||||
- godot # Check if comments end in a period
|
||||
- gofmt # Check whether code was gofmt-ed
|
||||
- goimports # Check imports are formatted according to goimports
|
||||
- mnd # Detect magic numbers (replaces gomnd)
|
||||
- gosec # Inspects source code for security problems
|
||||
- misspell # Find commonly misspelled English words
|
||||
- nakedret # Find naked returns
|
||||
- nestif # Reports deeply nested if statements
|
||||
- noctx # Find sending HTTP request without context.Context
|
||||
- nolintlint # Reports ill-formed or insufficient nolint directives
|
||||
- prealloc # Find slice declarations that could potentially be preallocated
|
||||
- predeclared # Find code that shadows predeclared identifiers
|
||||
- revive # Fast, configurable, extensible, flexible, and beautiful linter for Go
|
||||
- sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed
|
||||
- stylecheck # Stylecheck is a replacement for golint
|
||||
- thelper # Detect golang test helpers without t.Helper() call
|
||||
- tparallel # Detects inappropriate usage of t.Parallel()
|
||||
- unconvert # Remove unnecessary type conversions
|
||||
- unparam # Find unused function parameters
|
||||
- wastedassign # Find wasted assignment statements
|
||||
- whitespace # Tool for detection of leading and trailing whitespace
|
||||
|
||||
# Linter settings
|
||||
linters-settings:
|
||||
errcheck:
|
||||
# Report about not checking of errors in type assertions: `a := b.(MyStruct)`.
|
||||
check-type-assertions: true
|
||||
# Report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`.
|
||||
check-blank: true
|
||||
|
||||
funlen:
|
||||
# Checks the number of lines in a function.
|
||||
lines: 100
|
||||
# Checks the number of statements in a function.
|
||||
statements: 50
|
||||
|
||||
gocyclo:
|
||||
# Minimal code complexity to report.
|
||||
min-complexity: 15
|
||||
|
||||
cyclop:
|
||||
# The maximal code complexity to report.
|
||||
max-complexity: 15
|
||||
# The maximal average package complexity.
|
||||
package-average: 10.0
|
||||
|
||||
mnd:
|
||||
# List of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.
|
||||
checks:
|
||||
- argument
|
||||
- case
|
||||
- condition
|
||||
- operation
|
||||
- return
|
||||
- assign
|
||||
|
||||
forbidigo:
|
||||
# Forbid the following identifiers
|
||||
forbid:
|
||||
- ^print$
|
||||
- ^println$
|
||||
# Exclude godoc examples from forbidigo checks
|
||||
exclude_godoc_examples: true
|
||||
|
||||
govet:
|
||||
# Enable all analyzers.
|
||||
enable-all: true
|
||||
# Disable specific analyzers.
|
||||
disable:
|
||||
- fieldalignment # Too strict for now
|
||||
# Settings per analyzer.
|
||||
settings:
|
||||
shadow:
|
||||
# Whether to be strict about shadowing; can be noisy.
|
||||
strict: true
|
||||
|
||||
revive:
|
||||
# Maximum number of open files at the same time.
|
||||
max-open-files: 2048
|
||||
# Minimal confidence for issues, default is 0.8.
|
||||
confidence: 0.8
|
||||
# Enable all available rules.
|
||||
enable-all-rules: true
|
||||
# Disabled rules.
|
||||
rules:
|
||||
- name: line-length-limit
|
||||
disabled: true
|
||||
|
||||
staticcheck:
|
||||
# https://staticcheck.io/docs/options#checks
|
||||
checks: ["all"]
|
||||
|
||||
stylecheck:
|
||||
# https://staticcheck.io/docs/options#checks
|
||||
checks: ["all"]
|
||||
|
||||
gosec:
|
||||
# To select a subset of rules to run.
|
||||
# Available rules: https://github.com/securego/gosec#available-rules
|
||||
includes:
|
||||
- G101 # Look for hard coded credentials
|
||||
- G102 # Bind to all interfaces
|
||||
- G103 # Audit the use of unsafe block
|
||||
- G104 # Audit errors not checked
|
||||
- G106 # Audit the use of ssh.InsecureIgnoreHostKey
|
||||
- G107 # Url provided to HTTP request as taint input
|
||||
- G108 # Profiling endpoint automatically exposed
|
||||
- G109 # Potential Integer overflow made by strconv.Atoi result conversion to int16/32
|
||||
- G110 # Potential DoS vulnerability via decompression bomb
|
||||
- G111 # Potential directory traversal
|
||||
- G112 # Potential slowloris attack
|
||||
- G113 # Usage of Rat.SetString in math/big
|
||||
- G114 # Use of net/http serve function that has no support for setting timeouts
|
||||
- G201 # SQL query construction using format string
|
||||
- G202 # SQL query construction using string concatenation
|
||||
- G203 # Use of unescaped data in HTML templates
|
||||
- G204 # Audit use of command execution
|
||||
- G301 # Poor file permissions used when creating a directory
|
||||
- G302 # Poor file permissions used when creation of file
|
||||
- G303 # Creating tempfile using a predictable path
|
||||
- G304 # File path provided as taint input
|
||||
- G305 # File traversal when extracting zip/tar archive
|
||||
- G306 # Poor file permissions used when writing to a file
|
||||
- G307 # Deferring a method which returns an error
|
||||
- G401 # Detect the usage of weak crypto algorithms
|
||||
- G402 # Look for bad TLS connection settings
|
||||
- G403 # Ensure minimum RSA key length of 2048 bits
|
||||
- G404 # Insecure random number source (rand)
|
||||
- G501 # Import blocklist: crypto/md5
|
||||
- G502 # Import blocklist: crypto/des
|
||||
- G503 # Import blocklist: crypto/rc4
|
||||
- G504 # Import blocklist: net/http/cgi
|
||||
- G505 # Import blocklist: crypto/sha1
|
||||
- G601 # Implicit memory aliasing of items from a range statement
|
||||
- G602 # Slice access out of bounds
|
||||
|
||||
# Issues configuration
|
||||
issues:
|
||||
# Maximum count of issues with the same text.
|
||||
max-same-issues: 3
|
||||
|
||||
# Maximum issues count per one linter.
|
||||
max-issues-per-linter: 50
|
||||
|
||||
# Fix found issues (if it's supported by the linter).
|
||||
fix: false
|
||||
|
||||
# Exclude some directories from linting
|
||||
exclude-dirs:
|
||||
- vendor
|
||||
|
||||
# Exclude some files from linting
|
||||
exclude-files:
|
||||
- ".*\\.pb\\.go$"
|
||||
- ".*\\.gen\\.go$"
|
||||
|
||||
# Exclude specific linting rules for specific files
|
||||
exclude-rules:
|
||||
# Exclude some linters from running on tests files.
|
||||
- path: _test\.go
|
||||
linters:
|
||||
- gocyclo
|
||||
- errcheck
|
||||
- dupl
|
||||
- gosec
|
||||
- funlen
|
||||
- thelper # Many test helpers don't need t.Helper()
|
||||
- noctx # Context is often not needed in tests
|
||||
- cyclop # Test functions can be more complex
|
||||
- nestif # Test functions often have nested if statements
|
|
@ -118,5 +118,13 @@
|
|||
|
||||
- Run tests: =go test ./...=
|
||||
- Run linter: =golangci-lint run=
|
||||
- Run specific linter: =golangci-lint run --disable-all --enable=gosec=
|
||||
|
||||
The project uses a strict golangci-lint configuration defined in =.golangci.yml=.
|
||||
This configuration includes a comprehensive set of linters focused on:
|
||||
- Security best practices
|
||||
- Code quality and maintainability
|
||||
- Performance considerations
|
||||
- Error handling correctness
|
||||
|
||||
See the [[file:docs/installation.org][Installation and Usage Guide]] for more details.
|
||||
|
|
Loading…
Reference in New Issue