zco-claude 0.0.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ClaudeSettings/DOT.claudeignore +7 -0
- ClaudeSettings/README.md +100 -0
- ClaudeSettings/commands/generate_changelog.sh +49 -0
- ClaudeSettings/commands/show_env +92 -0
- ClaudeSettings/commands/zco-clean +164 -0
- ClaudeSettings/commands/zco-git-summary +15 -0
- ClaudeSettings/commands/zco-git-tag +42 -0
- ClaudeSettings/hooks/CHANGELOG.md +157 -0
- ClaudeSettings/hooks/README.md +254 -0
- ClaudeSettings/hooks/save_chat_plain.py +148 -0
- ClaudeSettings/hooks/save_chat_spec.py +398 -0
- ClaudeSettings/rules/README.md +270 -0
- ClaudeSettings/rules/go/.golangci.yml.template +170 -0
- ClaudeSettings/rules/go/GoBuildAutoVersion.v250425.md +95 -0
- ClaudeSettings/rules/go/check-standards.sh +128 -0
- ClaudeSettings/rules/go/coding-standards.md +973 -0
- ClaudeSettings/rules/go/example.go +207 -0
- ClaudeSettings/rules/go/go-testing.md +691 -0
- ClaudeSettings/rules/go/list-comments.sh +85 -0
- ClaudeSettings/settings.sample.json +71 -0
- ClaudeSettings/skills/README.md +225 -0
- ClaudeSettings/skills/zco-docs-update/SKILL.md +381 -0
- ClaudeSettings/skills/zco-help/SKILL.md +601 -0
- ClaudeSettings/skills/zco-plan/SKILL.md +661 -0
- ClaudeSettings/skills/zco-plan-new/SKILL.md +585 -0
- ClaudeSettings/zco-scripts/co-docs-update.sh +150 -0
- ClaudeSettings/zco-scripts/test_update_plan_metadata.py +328 -0
- ClaudeSettings/zco-scripts/update-plan-metadata.py +324 -0
- zco_claude-0.0.8.dist-info/METADATA +190 -0
- zco_claude-0.0.8.dist-info/RECORD +34 -0
- zco_claude-0.0.8.dist-info/WHEEL +5 -0
- zco_claude-0.0.8.dist-info/entry_points.txt +3 -0
- zco_claude-0.0.8.dist-info/top_level.txt +1 -0
- zco_claude_init.py +1732 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# golangci-lint 配置模板
|
|
2
|
+
# 将此文件复制到项目根目录并重命名为 .golangci.yml
|
|
3
|
+
|
|
4
|
+
run:
|
|
5
|
+
# 超时时间
|
|
6
|
+
timeout: 5m
|
|
7
|
+
|
|
8
|
+
# 要检查的目录
|
|
9
|
+
tests: true
|
|
10
|
+
|
|
11
|
+
# 要跳过的目录
|
|
12
|
+
skip-dirs:
|
|
13
|
+
- vendor
|
|
14
|
+
- third_party
|
|
15
|
+
- testdata
|
|
16
|
+
- examples
|
|
17
|
+
- .*
|
|
18
|
+
|
|
19
|
+
# 启用的 linters
|
|
20
|
+
linters:
|
|
21
|
+
enable:
|
|
22
|
+
# 基础检查
|
|
23
|
+
- gofmt # 代码格式检查
|
|
24
|
+
- goimports # import 顺序检查
|
|
25
|
+
- govet # go vet 静态分析
|
|
26
|
+
- errcheck # 错误检查
|
|
27
|
+
- staticcheck # 静态分析
|
|
28
|
+
- unused # 未使用代码检查
|
|
29
|
+
- gosimple # 简化建议
|
|
30
|
+
- ineffassign # 无效赋值检查
|
|
31
|
+
- typecheck # 类型检查
|
|
32
|
+
|
|
33
|
+
# 代码质量
|
|
34
|
+
- gocyclo # 圈复杂度检查
|
|
35
|
+
- funlen # 函数长度检查
|
|
36
|
+
- gocognit # 认知复杂度检查
|
|
37
|
+
|
|
38
|
+
# 错误处理
|
|
39
|
+
- goerr113 # 错误处理检查
|
|
40
|
+
- wrapcheck # 错误包装检查
|
|
41
|
+
|
|
42
|
+
# 性能
|
|
43
|
+
- prealloc # slice 预分配检查
|
|
44
|
+
|
|
45
|
+
# 风格
|
|
46
|
+
- stylecheck # 代码风格检查
|
|
47
|
+
- revive # golint 替代品
|
|
48
|
+
|
|
49
|
+
# 注释
|
|
50
|
+
- godot # 注释格式检查
|
|
51
|
+
- godox # TODO/FIXME 检查
|
|
52
|
+
|
|
53
|
+
# 安全
|
|
54
|
+
- gosec # 安全检查
|
|
55
|
+
|
|
56
|
+
disable:
|
|
57
|
+
- deadcode # 已被 unused 替代
|
|
58
|
+
- varcheck # 已被 unused 替代
|
|
59
|
+
- structcheck # 已被 unused 替代
|
|
60
|
+
|
|
61
|
+
# Linters 配置
|
|
62
|
+
linters-settings:
|
|
63
|
+
# 圈复杂度检查
|
|
64
|
+
gocyclo:
|
|
65
|
+
min-complexity: 10
|
|
66
|
+
|
|
67
|
+
# 函数长度检查
|
|
68
|
+
funlen:
|
|
69
|
+
lines: 50
|
|
70
|
+
statements: 40
|
|
71
|
+
|
|
72
|
+
# 认知复杂度检查
|
|
73
|
+
gocognit:
|
|
74
|
+
min-complexity: 15
|
|
75
|
+
|
|
76
|
+
# 错误检查
|
|
77
|
+
errcheck:
|
|
78
|
+
check-blank: true # 检查 _ = err
|
|
79
|
+
check-type-assertions: true
|
|
80
|
+
|
|
81
|
+
# go vet 配置
|
|
82
|
+
govet:
|
|
83
|
+
check-shadowing: true
|
|
84
|
+
enable-all: true
|
|
85
|
+
|
|
86
|
+
# 注释格式检查
|
|
87
|
+
godot:
|
|
88
|
+
scope: declarations
|
|
89
|
+
capital: true
|
|
90
|
+
|
|
91
|
+
# TODO/FIXME 检查(允许使用 //; 前缀的注释)
|
|
92
|
+
godox:
|
|
93
|
+
keywords:
|
|
94
|
+
- TODO
|
|
95
|
+
- FIXME
|
|
96
|
+
- HACK
|
|
97
|
+
- OPTIMIZE
|
|
98
|
+
- DEPRECATED
|
|
99
|
+
- NOTE
|
|
100
|
+
|
|
101
|
+
# 安全检查
|
|
102
|
+
gosec:
|
|
103
|
+
severity: medium
|
|
104
|
+
confidence: medium
|
|
105
|
+
excludes:
|
|
106
|
+
- G104 # 允许未检查的错误(errcheck 会处理)
|
|
107
|
+
|
|
108
|
+
# 代码风格检查
|
|
109
|
+
stylecheck:
|
|
110
|
+
checks: ["all", "-ST1000", "-ST1003"]
|
|
111
|
+
|
|
112
|
+
# Revive 配置
|
|
113
|
+
revive:
|
|
114
|
+
confidence: 0.8
|
|
115
|
+
rules:
|
|
116
|
+
- name: exported
|
|
117
|
+
severity: warning
|
|
118
|
+
- name: unexported-return
|
|
119
|
+
severity: warning
|
|
120
|
+
- name: time-naming
|
|
121
|
+
severity: warning
|
|
122
|
+
|
|
123
|
+
# Issues 配置
|
|
124
|
+
issues:
|
|
125
|
+
# 排除规则
|
|
126
|
+
exclude-rules:
|
|
127
|
+
# 测试文件允许更长的函数
|
|
128
|
+
- path: _test\.go
|
|
129
|
+
linters:
|
|
130
|
+
- funlen
|
|
131
|
+
- gocyclo
|
|
132
|
+
- gocognit
|
|
133
|
+
|
|
134
|
+
# 允许在测试中使用点导入
|
|
135
|
+
- path: _test\.go
|
|
136
|
+
text: "should not use dot imports"
|
|
137
|
+
|
|
138
|
+
# 允许在 main.go 中使用全局变量
|
|
139
|
+
- path: cmd/.*main\.go
|
|
140
|
+
linters:
|
|
141
|
+
- gochecknoglobals
|
|
142
|
+
|
|
143
|
+
# 允许特定的 TODO/FIXME 注释(使用 //; 前缀 和 //@ 前缀)
|
|
144
|
+
- linters:
|
|
145
|
+
- godox
|
|
146
|
+
source: "//;"
|
|
147
|
+
|
|
148
|
+
# 最大 issues 数量(0 表示无限制)
|
|
149
|
+
max-issues-per-linter: 0
|
|
150
|
+
max-same-issues: 0
|
|
151
|
+
|
|
152
|
+
# 不排除新代码的 issues
|
|
153
|
+
new: false
|
|
154
|
+
|
|
155
|
+
# 显示所有 issues
|
|
156
|
+
exclude-use-default: false
|
|
157
|
+
|
|
158
|
+
# 输出配置
|
|
159
|
+
output:
|
|
160
|
+
# 输出格式:colored-line-number, line-number, json, tab, checkstyle
|
|
161
|
+
format: colored-line-number
|
|
162
|
+
|
|
163
|
+
# 打印 linter 名称
|
|
164
|
+
print-linter-name: true
|
|
165
|
+
|
|
166
|
+
# 使问题输出唯一
|
|
167
|
+
uniq-by-line: false
|
|
168
|
+
|
|
169
|
+
# 排序方式
|
|
170
|
+
sort-results: true
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# GoBuild 动态编译版本管理
|
|
2
|
+
|
|
3
|
+
## 说明
|
|
4
|
+
go释放的二进制文件, 应该自携带版本信息
|
|
5
|
+
|
|
6
|
+
## 实现步骤
|
|
7
|
+
|
|
8
|
+
#### 1. 定义全局变量并绑定到 flag
|
|
9
|
+
|
|
10
|
+
将版本信息变量声明为包级变量:
|
|
11
|
+
|
|
12
|
+
```go
|
|
13
|
+
package main
|
|
14
|
+
|
|
15
|
+
import flag
|
|
16
|
+
import fmt
|
|
17
|
+
import os
|
|
18
|
+
|
|
19
|
+
var (
|
|
20
|
+
xBuildDesc string
|
|
21
|
+
AppName string = "{AppName}"
|
|
22
|
+
GitCommit string = "unset" // 默认 Commit,编译时覆盖
|
|
23
|
+
GitBranch string = "unset" // 默认 分支,编译时覆盖
|
|
24
|
+
BuildTime string = "unset" // 默认构建时间,编译时覆盖
|
|
25
|
+
CI_JOB_URL string = "unset" // 默认 CI Job URL,编译时覆盖
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
func co_parse_flag() {
|
|
29
|
+
//@NOTE: 绑定版本信息到 flag, 注意 flag.Parse() 只能执行一次
|
|
30
|
+
versionFlag := flag.Bool("version", false, "Print version and exit")
|
|
31
|
+
verboseFlag := flag.Bool("show-info", false, "Print verbose info and exit")
|
|
32
|
+
helpFlag := flag.Bool("h", false, "Display this help message")
|
|
33
|
+
flag.Parse()
|
|
34
|
+
|
|
35
|
+
if *versionFlag {
|
|
36
|
+
fmt.Fprint(os.Stdout, version)
|
|
37
|
+
os.Exit(0)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
xBuildDesc := fmt.Sprintf(" AppName: %s \n Version: %s \n CommitID: %s \n Branch: %s \n BuildTime: %s \n CI_JOB_URL:%s \n",
|
|
41
|
+
AppName, version, GitCommit, GitBranch, BuildTime, CI_JOB_URL,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
if *verboseFlag {
|
|
45
|
+
fmt.Fprint(os.Stdout, xBuildDesc)
|
|
46
|
+
os.Exit(0)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if *helpFlag {
|
|
50
|
+
flag.Usage()
|
|
51
|
+
os.Exit(0)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
func main(){
|
|
56
|
+
//; 如果有其他自定义的 flag 配置需要前置
|
|
57
|
+
//flag.StringVar(&configFilePath, "c", "conf/app.conf", "Path to config file")
|
|
58
|
+
//; 注意 flag.Parse() 全局只能执行一次
|
|
59
|
+
co_parse_flag()
|
|
60
|
+
|
|
61
|
+
//; 后续是原业务逻辑代码
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
#### 2. 编译时动态注入值
|
|
66
|
+
|
|
67
|
+
在编译命令中使用 `-ldflags` 覆盖全局变量值:(Makefile), 参考如下是
|
|
68
|
+
|
|
69
|
+
```Makefile
|
|
70
|
+
DIST_GitCommit ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "commit_id")
|
|
71
|
+
DIST_GitBranch ?= $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "branch")
|
|
72
|
+
DIST_CI_JOB_URL ?= $(shell echo ${CI_JOB_URL:-"unset"})
|
|
73
|
+
# DIST_BuildTime := $(shell date +'%Y-%m-%dT%H%M%S%Z')
|
|
74
|
+
DIST_BuildTime := $(shell date +'%Y%m%d_%H%M%S')
|
|
75
|
+
DIST_AppName := "AppName"
|
|
76
|
+
|
|
77
|
+
build:
|
|
78
|
+
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w \
|
|
79
|
+
-X 'main.GitCommit=${DIST_GitCommit}' \
|
|
80
|
+
-X 'main.GitBranch=${DIST_GitBranch}' \
|
|
81
|
+
-X 'main.BuildTime=${DIST_BuildTime}' \
|
|
82
|
+
-X 'main.CI_JOB_URL=${DIST_CI_JOB_URL}' " \
|
|
83
|
+
-o ${BINARY}
|
|
84
|
+
# // ... 自定义更多的参数
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- **效果**:`Version`、`GitCommit`、`BuildTime` 会被编译时注入的值覆盖。
|
|
88
|
+
|
|
89
|
+
#### 3. 测试
|
|
90
|
+
|
|
91
|
+
```shell
|
|
92
|
+
make build
|
|
93
|
+
./{BINARY} -version
|
|
94
|
+
./{BINARY} -show-info
|
|
95
|
+
```
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Go 编程标准检查脚本
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 开始检查 Go 编程标准..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# 颜色定义
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
YELLOW='\033[1;33m'
|
|
14
|
+
NC='\033[0m' # No Color
|
|
15
|
+
|
|
16
|
+
FAILED=0
|
|
17
|
+
|
|
18
|
+
# 1. 检查代码格式
|
|
19
|
+
echo "📝 [1/7] 检查代码格式..."
|
|
20
|
+
if ! gofmt -l . | grep -q ".go"; then
|
|
21
|
+
echo -e "${GREEN}✓ 代码格式正确${NC}"
|
|
22
|
+
else
|
|
23
|
+
echo -e "${RED}✗ 以下文件格式不正确:${NC}"
|
|
24
|
+
gofmt -l .
|
|
25
|
+
FAILED=1
|
|
26
|
+
fi
|
|
27
|
+
echo ""
|
|
28
|
+
|
|
29
|
+
# 2. 检查 imports
|
|
30
|
+
echo "📦 [2/7] 检查 imports 顺序..."
|
|
31
|
+
if command -v goimports &> /dev/null; then
|
|
32
|
+
if ! goimports -l . | grep -q ".go"; then
|
|
33
|
+
echo -e "${GREEN}✓ Imports 顺序正确${NC}"
|
|
34
|
+
else
|
|
35
|
+
echo -e "${RED}✗ 以下文件 imports 顺序不正确:${NC}"
|
|
36
|
+
goimports -l .
|
|
37
|
+
FAILED=1
|
|
38
|
+
fi
|
|
39
|
+
else
|
|
40
|
+
echo -e "${YELLOW}⚠ goimports 未安装,跳过检查${NC}"
|
|
41
|
+
fi
|
|
42
|
+
echo ""
|
|
43
|
+
|
|
44
|
+
# 3. 运行测试
|
|
45
|
+
echo "🧪 [3/7] 运行测试..."
|
|
46
|
+
if go test ./... -v; then
|
|
47
|
+
echo -e "${GREEN}✓ 所有测试通过${NC}"
|
|
48
|
+
else
|
|
49
|
+
echo -e "${RED}✗ 测试失败${NC}"
|
|
50
|
+
FAILED=1
|
|
51
|
+
fi
|
|
52
|
+
echo ""
|
|
53
|
+
|
|
54
|
+
# 4. 检查测试覆盖率
|
|
55
|
+
echo "📊 [4/7] 检查测试覆盖率..."
|
|
56
|
+
COVERAGE=$(go test ./... -cover -coverprofile=coverage.out 2>&1 | grep "coverage:" | awk '{sum+=$NF; count++} END {if (count>0) print sum/count; else print 0}' | sed 's/%//')
|
|
57
|
+
|
|
58
|
+
if [ -z "$COVERAGE" ]; then
|
|
59
|
+
echo -e "${YELLOW}⚠ 无法计算覆盖率${NC}"
|
|
60
|
+
else
|
|
61
|
+
if (( $(echo "$COVERAGE >= 80" | bc -l) )); then
|
|
62
|
+
echo -e "${GREEN}✓ 测试覆盖率: ${COVERAGE}% (≥ 80%)${NC}"
|
|
63
|
+
else
|
|
64
|
+
echo -e "${RED}✗ 测试覆盖率: ${COVERAGE}% (< 80%)${NC}"
|
|
65
|
+
FAILED=1
|
|
66
|
+
fi
|
|
67
|
+
fi
|
|
68
|
+
echo ""
|
|
69
|
+
|
|
70
|
+
# 5. 检查竞态条件
|
|
71
|
+
echo "🏃 [5/7] 检查竞态条件..."
|
|
72
|
+
if go test -race ./... > /dev/null 2>&1; then
|
|
73
|
+
echo -e "${GREEN}✓ 无竞态条件${NC}"
|
|
74
|
+
else
|
|
75
|
+
echo -e "${RED}✗ 检测到竞态条件${NC}"
|
|
76
|
+
FAILED=1
|
|
77
|
+
fi
|
|
78
|
+
echo ""
|
|
79
|
+
|
|
80
|
+
# 6. 运行 linter
|
|
81
|
+
echo "🔍 [6/7] 运行 linter..."
|
|
82
|
+
if command -v golangci-lint &> /dev/null; then
|
|
83
|
+
if golangci-lint run ./...; then
|
|
84
|
+
echo -e "${GREEN}✓ Linter 检查通过${NC}"
|
|
85
|
+
else
|
|
86
|
+
echo -e "${RED}✗ Linter 检查失败${NC}"
|
|
87
|
+
FAILED=1
|
|
88
|
+
fi
|
|
89
|
+
else
|
|
90
|
+
echo -e "${YELLOW}⚠ golangci-lint 未安装,跳过检查${NC}"
|
|
91
|
+
echo " 安装命令: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b \$(go env GOPATH)/bin"
|
|
92
|
+
fi
|
|
93
|
+
echo ""
|
|
94
|
+
|
|
95
|
+
# 7. 检查注释规范
|
|
96
|
+
echo "💬 [7/7] 检查注释规范..."
|
|
97
|
+
echo " 查找所有功能注释 (//@NOTE:):"
|
|
98
|
+
|
|
99
|
+
# 统计各类非代码注释
|
|
100
|
+
TODO_COUNT=$(grep -r "TODO:" . --include="*.go" 2>/dev/null | wc -l || echo 0)
|
|
101
|
+
FIXME_COUNT=$(grep -r "FIXME:" . --include="*.go" 2>/dev/null | wc -l || echo 0)
|
|
102
|
+
HACK_COUNT=$(grep -r "HACK:" . --include="*.go" 2>/dev/null | wc -l || echo 0)
|
|
103
|
+
DEPRECATED_COUNT=$(grep -r "DEPRECATED:" . --include="*.go" 2>/dev/null | wc -l || echo 0)
|
|
104
|
+
|
|
105
|
+
echo " - TODO: $TODO_COUNT 项"
|
|
106
|
+
echo " - FIXME: $FIXME_COUNT 项"
|
|
107
|
+
echo " - HACK: $HACK_COUNT 项"
|
|
108
|
+
echo " - DEPRECATED: $DEPRECATED_COUNT 项"
|
|
109
|
+
|
|
110
|
+
if [ "$FIXME_COUNT" -gt 0 ]; then
|
|
111
|
+
echo -e "${YELLOW} ⚠ 有 $FIXME_COUNT 个 FIXME 需要修复${NC}"
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
if [ "$DEPRECATED_COUNT" -gt 0 ]; then
|
|
115
|
+
echo -e "${YELLOW} ⚠ 有 $DEPRECATED_COUNT 个废弃代码需要清理${NC}"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
echo ""
|
|
119
|
+
|
|
120
|
+
# 8. 总结
|
|
121
|
+
echo "================================"
|
|
122
|
+
if [ $FAILED -eq 0 ]; then
|
|
123
|
+
echo -e "${GREEN}✓ 所有检查通过!${NC}"
|
|
124
|
+
exit 0
|
|
125
|
+
else
|
|
126
|
+
echo -e "${RED}✗ 检查失败,请修复上述问题${NC}"
|
|
127
|
+
exit 1
|
|
128
|
+
fi
|