11# golangci-lint configuration for apprun project
22# Compatible with golangci-lint v2.7.2
3- # Documentation: https://golangci-lint.run/usage/configuration/
3+ # Documentation: https://golangci-lint.run/product/config
44
5- # Version declaration for v2.x (required)
6- version : 2
5+ version : " 2"
76
87run :
98 timeout : 5m
109 tests : true
1110 build-tags :
1211 - integration
13- modules-download-mode : readonly
14- allow-parallel-runners : true
15-
16- output :
17- formats :
18- colored-line-number :
19- path : stdout
20- print-issued-lines : true
21- print-linter-name : true
22- sort-results : true
2312
2413linters :
25- # Enable default linters + additional checks
2614 enable :
27- # Default (always enabled)
28- - errcheck # 检查未检查的错误
29- - govet # Go vet 静态分析
30- - ineffassign # 检测无效赋值
31- - staticcheck # 静态检查
32- - unused # 检测未使用的代码
33-
34- # Additional useful linters
35- # - goconst # 检测可以常量化的字符串(禁用:测试数据误报多)
36- - misspell # 检测拼写错误
37- - dupl # 检测重复代码
38- - gosec # 安全检查
39- - unconvert # 检测不必要的类型转换
40- - prealloc # 检测可以预分配的切片
41- # - gocognit # 认知复杂度检查(禁用:测试文件误报)
42- - gocyclo # 圈复杂度检查
43- - gocritic # 综合诊断
44- - errorlint # 错误包装检查
45- - bodyclose # HTTP body close 检查
46-
47- disable : []
15+ - errcheck
16+ - govet
17+ - ineffassign
18+ - staticcheck
19+ - unused
20+ - misspell
21+ - dupl
22+ - gosec
23+ - unconvert
24+ - prealloc
25+ - gocyclo
26+ - gocritic
27+ - errorlint
28+ - bodyclose
4829
49- linters- settings :
30+ settings :
5031 errcheck :
5132 check-type-assertions : true
5233 check-blank : true
5334
5435 govet :
55- enable-all : true
36+ enable :
37+ - all
5638 disable :
57- - shadow # 变量阴影在某些情况下是有意的
58- - fieldalignment # 结构体字段对齐优化(性能微优化,可读性优先)
39+ - shadow
40+ - fieldalignment
5941
6042 misspell :
6143 locale : US
@@ -64,117 +46,66 @@ linters-settings:
6446 threshold : 150
6547
6648 gosec :
67- excludes :
68- - G104 # 未处理错误(errcheck 已覆盖)
69- - G302 # 文件权限(日志文件需要 0644)
49+ config :
50+ global :
51+ nosec : false
52+ audit : true
7053
7154 staticcheck :
72- checks : ["all"]
73-
74- gocognit :
75- min-complexity : 50 # 认知复杂度阈值(从40提升到50避免误报)
55+ checks :
56+ - all
7657
7758 gocyclo :
78- min-complexity : 20 # 从 15 提升到 20(server.Start 函数复杂度 19)
79-
80- goconst :
81- min-len : 3 # 最小字符串长度(从 2 提升避免误报)
82- min-occurrences : 5 # 从 3 提升到 5(减少测试文件中的误报)
59+ min-complexity : 20
8360
8461 gocritic :
8562 enabled-tags :
8663 - diagnostic
8764 - style
8865 - performance
8966 disabled-checks :
90- - unnamedResult # 允许未命名返回值
91- - commentFormatting # 注释格式较宽松
92- - httpNoBody # HTTP 空 body 优化(性能微优化)
93- - octalLiteral # 八进制字面量风格(0644 vs 0o644)
94- - paramTypeCombine # 参数类型合并(代码风格偏好)
95- - equalFold # strings.EqualFold 优化建议(非必须)
96- - exitAfterDefer # main 函数中 log.Fatal 的合理使用
67+ - unnamedResult
68+ - commentFormatting
69+ - httpNoBody
70+ - octalLiteral
71+ - paramTypeCombine
72+ - equalFold
73+ - exitAfterDefer
9774
9875issues :
99- # 排除生成的代码
10076 exclude-dirs :
10177 - ent
10278 - docs
103- - tests/e2e
10479
105- exclude-files :
106- - " .*\\ .pb\\ .go$"
107- - " .*_gen\\ .go$"
80+ exclude-generated-strict : true
10881
109- # 排除特定规则
11082 exclude-rules :
111- # 允许 main 函数中未检查的错误(通常会 panic)
11283 - path : cmd/
11384 linters :
11485 - errcheck
115- text : " Error return value"
116-
117- # 允许链式调用中的 WithContext 不检查返回值
86+
11887 - linters :
11988 - errcheck
120- text : " Error return value of.*WithContext.*is not checked "
89+ text : " Error return value of.*WithContext"
12190
122- # 允许 logger.Sync 不检查返回值(defer 中调用)
12391 - linters :
12492 - errcheck
125- text : " Error return value of.*logger\\ .Sync.*is not checked "
93+ text : " Error return value of.*logger\\ .Sync"
12694
127- # 允许日志文件使用 0644 权限(需要被监控工具读取)
12895 - linters :
12996 - gosec
130- text : " G302.*0644 "
97+ text : " G302"
13198
132- # 允许 main 函数中的 log.Fatal 使用 exitAfterDefer
13399 - linters :
134100 - gocritic
135- text : " exitAfterDefer.*log\\ .Fatal"
136-
137- # 测试文件中允许忽略 json.Marshal 错误
138- - path : _test\.go
139- linters :
140- - errcheck
141- text : " Error return value of.*json\\ .Marshal.*is not checked"
101+ text : " exitAfterDefer"
142102
143- # 测试文件使用较宽松的规则(包括复杂度、重复代码等)
144103 - path : _test\.go
145104 linters :
146105 - dupl
147106 - gosec
148- - goconst # 测试数据允许重复字符串
149- - gocognit # 测试函数允许较高认知复杂度
150- - gocyclo # 测试函数允许较高圈复杂度
151- - funlen # 测试函数允许较长
152-
153- # 忽略启动失败场景的 exitAfterDefer(main 函数中 log.Fatal)
154- - path : ' cmd/.*main\.go'
155- text : ' exitAfterDefer'
156- linters :
157- - gocritic
158-
159- # 忽略 main 函数中的 exitAfterDefer
160- - linters :
161- - gocritic
162- text : ' exitAfterDefer.*log\.Fatal'
107+ - errcheck
108+ - gocyclo
163109
164- # 最大问题数(0 = 无限制)
165110 max-issues-per-linter : 50
166111 max-same-issues : 3
167-
168- # 排除特定问题(宽松模式,优先通过 CI)
169- exclude :
170- - " cognitive complexity.*is high" # 认知复杂度警告(测试文件常见)
171- - " has \\ d+ occurrences, make it a constant" # 重复字符串(测试数据允许)
172- - " G302.*0644" # 文件权限 0644(日志文件需要)
173-
174- # 新代码优先(显示新引入的问题)
175- new : false
176-
177- # Severity settings
178- severity :
179- default-severity : warning
180- case-sensitive : false
0 commit comments