Golang代码审查工具示例解析
Golang代码审查工具示例解析
我是Scrutinizer的新手,不知道如何编写以及应该在.scrutinizer.yml文件中写些什么。我已经按照文档说明将我的代码仓库链接到了Scrutinizer。能否提供一些相关的示例?这对我将非常有帮助,任何帮助都将不胜感激。
4 回复
第一个是 scrutinizer-ci.com
你指的是哪个 Scrutinizer?
在.scrutinizer.yml中配置Go项目时,通常需要设置构建环境、测试命令和代码分析规则。以下是一个典型的Go项目配置示例:
build:
environment:
go: "1.21"
nodes:
analysis:
tests:
override:
- go test ./...
project_setup:
override:
- go mod download
analysis:
checks:
php: false
metrics:
cyclomatic_complexity: true
npath_complexity: true
halstead_volume: true
maintainability_index: true
checks:
golangci:
enabled: true
config:
run:
skip-dirs:
- vendor
linters:
enable:
- govet
- errcheck
- staticcheck
- gosimple
- unused
- ineffassign
- gofmt
- goimports
filter:
excluded_paths:
- vendor/*
- "*.pb.go"
- "*.gen.go"
这个配置示例包含了以下几个关键部分:
- 构建环境:指定Go版本为1.21
- 测试命令:运行
go test ./...执行所有测试 - 代码检查:启用golangci-lint并配置常用linter
- 路径过滤:排除vendor目录和生成的代码文件
对于更具体的检查规则,可以添加自定义配置:
checks:
golangci:
enabled: true
config:
linters-settings:
gocyclo:
min-complexity: 15
goconst:
min-len: 3
min-occurrences: 3
issues:
exclude-rules:
- path: _test\.go
linters:
- gocyclo
- dupl
这个配置设置了:
- 圈复杂度阈值为15
- 常量检查的最小长度为3,最小出现次数为3
- 排除测试文件中的圈复杂度和重复代码检查
如果需要集成覆盖率检查,可以添加:
build:
environment:
go: "1.21"
nodes:
analysis:
tests:
override:
- go test -coverprofile=coverage.out ./...
- go tool cover -func=coverage.out
coverage:
file: coverage.out
format: go-cover
这个配置会生成覆盖率报告并在Scrutinizer中显示覆盖率数据。
对于包含多个模块的项目,可以使用矩阵构建:
build:
environment:
go: "1.21"
nodes:
analysis:
matrix:
- name: "Module A"
project_setup:
override:
- cd module-a && go mod download
tests:
override:
- cd module-a && go test ./...
- name: "Module B"
project_setup:
override:
- cd module-b && go mod download
tests:
override:
- cd module-b && go test ./...
这些配置示例涵盖了Go项目在Scrutinizer中的常见使用场景,可以根据实际项目需求进行调整。

