.golangci.yml 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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