# MEV Bot Parser - Go Linter Configuration # Optimized for production-ready MEV/DeFi applications run: timeout: 10m issues-exit-code: 1 tests: true skip-dirs: - vendor - node_modules skip-files: - ".*\\.pb\\.go$" - ".*_generated\\.go$" output: format: colored-line-number print-issued-lines: true print-linter-name: true uniq-by-line: true sort-results: true linters-settings: govet: check-shadowing: true settings: printf: funcs: - (github.com/fraktal/mev-beta/internal/logger).Logger.Error - (github.com/fraktal/mev-beta/internal/logger).Logger.Warn - (github.com/fraktal/mev-beta/internal/logger).Logger.Info - (github.com/fraktal/mev-beta/internal/logger).Logger.Debug enable: - atomicalign - deepequalerrors - fieldalignment - nilness - sortslice - unusedwrite golint: min-confidence: 0.8 gofmt: simplify: true goimports: local-prefixes: github.com/fraktal/mev-beta gocyclo: min-complexity: 15 maligned: suggest-new: true dupl: threshold: 100 goconst: min-len: 3 min-occurrences: 3 ignore-tests: false ignore-calls: true depguard: list-type: blacklist packages: # Prevent usage of deprecated/unsafe packages - io/ioutil packages-with-error-message: - io/ioutil: "io/ioutil is deprecated, use os and io packages instead" misspell: locale: US ignore-words: - someword lll: line-length: 120 tab-width: 1 unused: check-exported: false unparam: check-exported: false nakedret: max-func-lines: 30 prealloc: simple: true range-loops: true for-loops: false gocritic: enabled-tags: - diagnostic - experimental - opinionated - performance - style disabled-checks: - dupImport - ifElseChain - octalLiteral - whyNoLint - wrapperFunc - importShadow - unnamedResult - unnecessaryBlock settings: captLocal: paramsOnly: true rangeValCopy: sizeThreshold: 64 gocognit: min-complexity: 20 nestif: min-complexity: 5 godox: keywords: - TODO - BUG - FIXME - HACK - XXX errorlint: errorf: true asserts: true comparison: true exhaustive: check-generated: false default-signifies-exhaustive: false exportloopref: check-exported: false forbidigo: forbid: - ^print.*$ - ^fmt\.Print.*$ - ^log\..*$ # Prevent usage of panic in production code - 'panic\(' exclude_godoc_examples: false funlen: lines: 100 statements: 50 gochecknoglobals: g: true gochecknoinits: g: true godot: capital: false period: true scope: declarations gomnd: settings: mnd: checks: argument,case,condition,operation,return,assign ignored-numbers: 0,1,2,3,4,8,10,16,18,32,64,100,256,1000,1024 ignored-functions: strings.SplitN,bytes.SplitN,strconv.FormatInt,make gomodguard: allowed: modules: - github.com/ethereum/go-ethereum - github.com/stretchr/testify - github.com/holiman/uint256 - github.com/shopspring/decimal blocked: modules: - github.com/ugorji/go: recommendations: - github.com/json-iterator/go reason: "ugorji/go has performance issues" goheader: values: const: COMPANY: Fraktal PROJECT: MEV Beta template: |- Copyright {{ YEAR }} {{ COMPANY }} This file is part of {{ PROJECT }}. revive: min-confidence: 0.8 severity: warning 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: if-return - 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: unused-parameter - name: unreachable-code - name: redefines-builtin-id - name: waitgroup-by-value - name: atomic - name: bare-return - name: bool-literal-in-expr - name: constant-logical-expr linters: disable-all: true enable: # Essential linters for MEV/DeFi applications - errcheck # Check that error returns are used - gosimple # Suggest simplifications - govet # Examine Go source code and report bugs - ineffassign # Detect ineffectual assignments - staticcheck # Advanced static analysis - typecheck # Type checking - unused # Find unused code # Code quality linters - gocyclo # Check cyclomatic complexity - gofmt # Check formatting - goimports # Check import formatting - revive # Fast, configurable, extensible, flexible, and beautiful linter - misspell # Find commonly misspelled English words # Performance and optimization linters - gocritic # Most opinionated Go source code linter - prealloc # Find slice declarations with non-zero initial length # Security linters (critical for MEV applications) - gosec # Inspect source code for security problems # Bug prevention linters - bodyclose # Check whether HTTP response body is closed successfully - errorlint # Find code that will cause problems with error wrapping - exportloopref # Check for pointers to enclosing loop variables - goconst # Find repeated strings that could be constants - godox # Detect FIXME, TODO and other comment keywords - gomnd # Detect magic numbers - gomodguard # Check for blocked module imports - goprintffuncname # Check printf-like functions are named with f at the end - nilerr # Find code that returns nil even though it checks that error is not nil - nolintlint # Reports ill-formed or insufficient nolint directives - rowserrcheck # Check whether Err of rows is checked successfully - sqlclosecheck # Check that sql.Rows and sql.Stmt are closed - unconvert # Remove unnecessary type conversions - unparam # Report unused function parameters - wastedassign # Find wasted assignment statements # Style linters - gochecknoglobals # Check that no global variables exist - godot # Check if comments end in a period - lll # Report long lines - whitespace # Detection of unnecessary whitespaces # Additional quality linters - dupl # Code clone detection - funlen # Tool for detection of long functions - gocognit # Compute and check the cognitive complexity of functions - nestif # Report deeply nested if statements - nlreturn # Check for new line before return - wsl # Whitespace Linter issues: exclude-rules: # Exclude some linters from running on tests files - path: _test\.go linters: - gocyclo - errcheck - dupl - gosec - funlen - goconst - gochecknoglobals - lll - gomnd # Exclude specific issues in generated files - path: ".*\\.pb\\.go" linters: - all # Exclude magic number checks for common values in crypto/finance - text: "mnd: Magic number: 18," linters: - gomnd - text: "mnd: Magic number: 1000000000000000000," linters: - gomnd - text: "mnd: Magic number: 500," linters: - gomnd - text: "mnd: Magic number: 3000," linters: - gomnd - text: "mnd: Magic number: 10000," linters: - gomnd # Allow globals in main packages and configuration - path: cmd/ linters: - gochecknoglobals - path: ".*config.*" linters: - gochecknoglobals # Allow longer lines in test files for better readability - path: _test\.go text: "line is \\d+ characters" linters: - lll # Allow certain complexity in parser code - path: pkg/arbitrum/.*parser.* linters: - gocyclo - gocognit - funlen # Don't require comments on exported functions in test helpers - path: test/.* text: "exported (.+) should have comment" linters: - revive - golint # Ignore unused parameters in interface implementations - text: "parameter '.*' seems to be unused, consider removing or renaming it as _" linters: - unparam - revive # Allow TODO comments in development - text: "TODO.*" linters: - godox exclude-use-default: false max-issues-per-linter: 0 max-same-issues: 0 new: false fix: false severity: default-severity: error case-sensitive: false rules: - linters: - dupl - goconst - gomnd - lll - whitespace - nlreturn - wsl - godot severity: warning - linters: - gosec - errcheck - staticcheck - govet severity: error