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 tests: =go test ./...=
|
||||||
- Run linter: =golangci-lint run=
|
- 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.
|
See the [[file:docs/installation.org][Installation and Usage Guide]] for more details.
|
||||||
|
|
Loading…
Reference in New Issue