.golangci.yml raw

   1  version: "2"
   2  run:
   3    issues-exit-code: 1
   4    tests: true
   5  linters:
   6    default: none
   7    enable:
   8      - asasalint
   9      - bodyclose
  10      - depguard
  11      - errcheck
  12      - errorlint
  13      - gocritic
  14      - godot
  15      - gosec
  16      - govet
  17      - ineffassign
  18      - misspell
  19      - perfsprint
  20      - revive
  21      - staticcheck
  22      - testifylint
  23      - unconvert
  24      - unparam
  25      - unused
  26      - usestdlibvars
  27      - usetesting
  28    settings:
  29      depguard:
  30        rules:
  31          auto/sdk:
  32            files:
  33              - '!internal/global/trace.go'
  34              - ~internal/global/trace_test.go
  35            deny:
  36              - pkg: go.opentelemetry.io/auto/sdk
  37                desc: Do not use SDK from automatic instrumentation.
  38          non-tests:
  39            files:
  40              - '!$test'
  41              - '!**/*test/*.go'
  42              - '!**/internal/matchers/*.go'
  43            deny:
  44              - pkg: testing
  45              - pkg: github.com/stretchr/testify
  46              - pkg: crypto/md5
  47              - pkg: crypto/sha1
  48              - pkg: crypto/**/pkix
  49          otel-internal:
  50            files:
  51              - '**/sdk/*.go'
  52              - '**/sdk/**/*.go'
  53              - '**/exporters/*.go'
  54              - '**/exporters/**/*.go'
  55              - '**/schema/*.go'
  56              - '**/schema/**/*.go'
  57              - '**/metric/*.go'
  58              - '**/metric/**/*.go'
  59              - '**/bridge/*.go'
  60              - '**/bridge/**/*.go'
  61              - '**/trace/*.go'
  62              - '**/trace/**/*.go'
  63              - '**/log/*.go'
  64              - '**/log/**/*.go'
  65            deny:
  66              - pkg: go.opentelemetry.io/otel/internal$
  67                desc: Do not use cross-module internal packages.
  68              - pkg: go.opentelemetry.io/otel/internal/internaltest
  69                desc: Do not use cross-module internal packages.
  70          otlp-internal:
  71            files:
  72              - '!**/exporters/otlp/internal/**/*.go'
  73            deny:
  74              - pkg: go.opentelemetry.io/otel/exporters/otlp/internal
  75                desc: Do not use cross-module internal packages.
  76          otlpmetric-internal:
  77            files:
  78              - '!**/exporters/otlp/otlpmetric/internal/*.go'
  79              - '!**/exporters/otlp/otlpmetric/internal/**/*.go'
  80            deny:
  81              - pkg: go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal
  82                desc: Do not use cross-module internal packages.
  83          otlptrace-internal:
  84            files:
  85              - '!**/exporters/otlp/otlptrace/*.go'
  86              - '!**/exporters/otlp/otlptrace/internal/**.go'
  87            deny:
  88              - pkg: go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal
  89                desc: Do not use cross-module internal packages.
  90      gocritic:
  91        disabled-checks:
  92          - appendAssign
  93          - commentedOutCode
  94          - dupArg
  95          - hugeParam
  96          - importShadow
  97          - preferDecodeRune
  98          - rangeValCopy
  99          - unnamedResult
 100          - whyNoLint
 101        enable-all: true
 102      godot:
 103        exclude:
 104          # Exclude links.
 105          - '^ *\[[^]]+\]:'
 106          # Exclude sentence fragments for lists.
 107          - ^[ ]*[-•]
 108          # Exclude sentences prefixing a list.
 109          - :$
 110      misspell:
 111        locale: US
 112        ignore-rules:
 113          - cancelled
 114      perfsprint:
 115        int-conversion: true
 116        err-error: true
 117        errorf: true
 118        sprintf1: true
 119        strconcat: true
 120      revive:
 121        confidence: 0.01
 122        rules:
 123          - name: blank-imports
 124          - name: bool-literal-in-expr
 125          - name: constant-logical-expr
 126          - name: context-as-argument
 127            arguments:
 128              - allowTypesBefore: '*testing.T'
 129            disabled: true
 130          - name: context-keys-type
 131          - name: deep-exit
 132          - name: defer
 133            arguments:
 134              - - call-chain
 135                - loop
 136          - name: dot-imports
 137          - name: duplicated-imports
 138          - name: early-return
 139            arguments:
 140              - preserveScope
 141          - name: empty-block
 142          - name: empty-lines
 143          - name: error-naming
 144          - name: error-return
 145          - name: error-strings
 146          - name: errorf
 147          - name: exported
 148            arguments:
 149              - sayRepetitiveInsteadOfStutters
 150          - name: flag-parameter
 151          - name: identical-branches
 152          - name: if-return
 153          - name: import-shadowing
 154          - name: increment-decrement
 155          - name: indent-error-flow
 156            arguments:
 157              - preserveScope
 158          - name: package-comments
 159          - name: range
 160          - name: range-val-in-closure
 161          - name: range-val-address
 162          - name: redefines-builtin-id
 163          - name: string-format
 164            arguments:
 165              - - panic
 166                - /^[^\n]*$/
 167                - must not contain line breaks
 168          - name: struct-tag
 169          - name: superfluous-else
 170            arguments:
 171              - preserveScope
 172          - name: time-equal
 173          - name: unconditional-recursion
 174          - name: unexported-return
 175          - name: unhandled-error
 176            arguments:
 177              - fmt.Fprint
 178              - fmt.Fprintf
 179              - fmt.Fprintln
 180              - fmt.Print
 181              - fmt.Printf
 182              - fmt.Println
 183          - name: unused-parameter
 184          - name: unused-receiver
 185          - name: unnecessary-stmt
 186          - name: use-any
 187          - name: useless-break
 188          - name: var-declaration
 189          - name: var-naming
 190            arguments:
 191              - ["ID"] # AllowList
 192              - ["Otel", "Aws", "Gcp"] # DenyList
 193          - name: waitgroup-by-value
 194      testifylint:
 195        enable-all: true
 196        disable:
 197          - float-compare
 198          - go-require
 199          - require-error
 200    exclusions:
 201      generated: lax
 202      presets:
 203        - common-false-positives
 204        - legacy
 205        - std-error-handling
 206      rules:
 207        - linters:
 208            - revive
 209          path: schema/v.*/types/.*
 210          text: avoid meaningless package names
 211        # TODO: Having appropriate comments for exported objects helps development,
 212        # even for objects in internal packages. Appropriate comments for all
 213        # exported objects should be added and this exclusion removed.
 214        - linters:
 215            - revive
 216          path: .*internal/.*
 217          text: exported (method|function|type|const) (.+) should have comment or be unexported
 218        # Yes, they are, but it's okay in a test.
 219        - linters:
 220            - revive
 221          path: _test\.go
 222          text: exported func.*returns unexported type.*which can be annoying to use
 223        # Example test functions should be treated like main.
 224        - linters:
 225            - revive
 226          path: example.*_test\.go
 227          text: calls to (.+) only in main[(][)] or init[(][)] functions
 228        # It's okay to not run gosec and perfsprint in a test.
 229        - linters:
 230            - gosec
 231            - perfsprint
 232          path: _test\.go
 233        # Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand)
 234        # as we commonly use it in tests and examples.
 235        - linters:
 236            - gosec
 237          text: 'G404:'
 238        # Ignoring gosec G402: TLS MinVersion too low
 239        # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well.
 240        - linters:
 241            - gosec
 242          text: 'G402: TLS MinVersion too low.'
 243  issues:
 244    max-issues-per-linter: 0
 245    max-same-issues: 0
 246  formatters:
 247    enable:
 248      - gofumpt
 249      - goimports
 250      - golines
 251    settings:
 252      gofumpt:
 253        extra-rules: true
 254      goimports:
 255        local-prefixes:
 256          - go.opentelemetry.io/otel
 257      golines:
 258        max-len: 120
 259    exclusions:
 260      generated: lax
 261