version: "2" run: issues-exit-code: 1 tests: true linters: default: none enable: - asasalint - bodyclose - depguard - errcheck - errorlint - gocritic - godot - gosec - govet - ineffassign - misspell - perfsprint - revive - staticcheck - testifylint - unconvert - unparam - unused - usestdlibvars - usetesting settings: depguard: rules: auto/sdk: files: - '!internal/global/trace.go' - ~internal/global/trace_test.go deny: - pkg: go.opentelemetry.io/auto/sdk desc: Do not use SDK from automatic instrumentation. non-tests: files: - '!$test' - '!**/*test/*.go' - '!**/internal/matchers/*.go' deny: - pkg: testing - pkg: github.com/stretchr/testify - pkg: crypto/md5 - pkg: crypto/sha1 - pkg: crypto/**/pkix otel-internal: files: - '**/sdk/*.go' - '**/sdk/**/*.go' - '**/exporters/*.go' - '**/exporters/**/*.go' - '**/schema/*.go' - '**/schema/**/*.go' - '**/metric/*.go' - '**/metric/**/*.go' - '**/bridge/*.go' - '**/bridge/**/*.go' - '**/trace/*.go' - '**/trace/**/*.go' - '**/log/*.go' - '**/log/**/*.go' deny: - pkg: go.opentelemetry.io/otel/internal$ desc: Do not use cross-module internal packages. - pkg: go.opentelemetry.io/otel/internal/internaltest desc: Do not use cross-module internal packages. otlp-internal: files: - '!**/exporters/otlp/internal/**/*.go' deny: - pkg: go.opentelemetry.io/otel/exporters/otlp/internal desc: Do not use cross-module internal packages. otlpmetric-internal: files: - '!**/exporters/otlp/otlpmetric/internal/*.go' - '!**/exporters/otlp/otlpmetric/internal/**/*.go' deny: - pkg: go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal desc: Do not use cross-module internal packages. otlptrace-internal: files: - '!**/exporters/otlp/otlptrace/*.go' - '!**/exporters/otlp/otlptrace/internal/**.go' deny: - pkg: go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal desc: Do not use cross-module internal packages. gocritic: disabled-checks: - appendAssign - commentedOutCode - dupArg - hugeParam - importShadow - preferDecodeRune - rangeValCopy - unnamedResult - whyNoLint enable-all: true godot: exclude: # Exclude links. - '^ *\[[^]]+\]:' # Exclude sentence fragments for lists. - ^[ ]*[-•] # Exclude sentences prefixing a list. - :$ misspell: locale: US ignore-rules: - cancelled perfsprint: int-conversion: true err-error: true errorf: true sprintf1: true strconcat: true revive: confidence: 0.01 rules: - name: blank-imports - name: bool-literal-in-expr - name: constant-logical-expr - name: context-as-argument arguments: - allowTypesBefore: '*testing.T' disabled: true - name: context-keys-type - name: deep-exit - name: defer arguments: - - call-chain - loop - name: dot-imports - name: duplicated-imports - name: early-return arguments: - preserveScope - name: empty-block - name: empty-lines - name: error-naming - name: error-return - name: error-strings - name: errorf - name: exported arguments: - sayRepetitiveInsteadOfStutters - name: flag-parameter - name: identical-branches - name: if-return - name: import-shadowing - name: increment-decrement - name: indent-error-flow arguments: - preserveScope - name: package-comments - name: range - name: range-val-in-closure - name: range-val-address - name: redefines-builtin-id - name: string-format arguments: - - panic - /^[^\n]*$/ - must not contain line breaks - name: struct-tag - name: superfluous-else arguments: - preserveScope - name: time-equal - name: unconditional-recursion - name: unexported-return - name: unhandled-error arguments: - fmt.Fprint - fmt.Fprintf - fmt.Fprintln - fmt.Print - fmt.Printf - fmt.Println - name: unused-parameter - name: unused-receiver - name: unnecessary-stmt - name: use-any - name: useless-break - name: var-declaration - name: var-naming arguments: - ["ID"] # AllowList - ["Otel", "Aws", "Gcp"] # DenyList - name: waitgroup-by-value testifylint: enable-all: true disable: - float-compare - go-require - require-error exclusions: generated: lax presets: - common-false-positives - legacy - std-error-handling rules: - linters: - revive path: schema/v.*/types/.* text: avoid meaningless package names # TODO: Having appropriate comments for exported objects helps development, # even for objects in internal packages. Appropriate comments for all # exported objects should be added and this exclusion removed. - linters: - revive path: .*internal/.* text: exported (method|function|type|const) (.+) should have comment or be unexported # Yes, they are, but it's okay in a test. - linters: - revive path: _test\.go text: exported func.*returns unexported type.*which can be annoying to use # Example test functions should be treated like main. - linters: - revive path: example.*_test\.go text: calls to (.+) only in main[(][)] or init[(][)] functions # It's okay to not run gosec and perfsprint in a test. - linters: - gosec - perfsprint path: _test\.go # Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) # as we commonly use it in tests and examples. - linters: - gosec text: 'G404:' # Ignoring gosec G402: TLS MinVersion too low # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well. - linters: - gosec text: 'G402: TLS MinVersion too low.' issues: max-issues-per-linter: 0 max-same-issues: 0 formatters: enable: - gofumpt - goimports - golines settings: gofumpt: extra-rules: true goimports: local-prefixes: - go.opentelemetry.io/otel golines: max-len: 120 exclusions: generated: lax