Ka0s-Klaus/klaus-antipatterns-search
GitHub: Ka0s-Klaus/klaus-antipatterns-search
基于 Go 和 tree-sitter 的多语言代码反模式检测器,在本地、CI/CD 和组织级别统一识别技术债并生成标准化诊断报告。
Stars: 0 | Forks: 0
# 🔍 Klaus antipatterns 搜索
[](https://github.com/Ka0s-Klaus)
[](https://go.dev)
[](LICENSE)
[](https://github.com/orgs/Ka0s-Klaus/projects/21)
## 🤔 我做什么?我怎么做?我为什么这么做?
### 我做什么?
我是一个多语言的**代码反模式**检测器。我分析代码仓库——在本地、CI/CD 中或组织级别——并生成可执行的技术债务诊断:God Objects、过高的复杂度、重复代码、循环依赖、magic numbers 等。
### 我怎么做?
我结合了两种互补的方法:
1. 基于 [`tree-sitter`](https://tree-sitter.github.io/tree-sitter/) 统一 AST 的**原生检测器**——使用单一分析引擎支持 ~40+ 种语言。
2. **OSS linters 适配器**(`jscpd`、`radon`、`gocyclo`、`madge` 等)——通过子进程编排,并在未安装时实现优雅降级。
所有的发现都会被标准化为统一的 `Finding` 模型,并以多种格式渲染。
### 我为什么这么做?
因为在不同的组织(Ka0s-Klaus, mango, masorange)处理多个代码仓库时,如果没有统一的工具,技术债务就会悄无声息地累积。`Klaus-antipatterns-search` 为任何技术栈的代码健康状况提供了可重现且一致的可见性。
## 🏗️ 架构
```
graph TD
CLI["🖥️ CLI / GitHub Action"] --> CORE["🎛️ Core Orchestrator"]
CORE --> LANG["🔍 Language Detector"]
LANG --> NATIVE["🌳 Native Detectors\n(tree-sitter)"]
LANG --> ADAPTERS["🔌 OSS Adapters\n(jscpd · radon · gocyclo · madge)"]
NATIVE --> MODEL["📦 model.Finding"]
ADAPTERS --> MODEL
MODEL --> REPORT["📊 Report Renderers"]
REPORT --> CONSOLE["💻 Console + JSON"]
REPORT --> MARKDOWN["📄 Markdown / HTML"]
REPORT --> SARIF["🔐 SARIF\n(GitHub Code Scanning)"]
SCAN["🌐 Multi-org Scanner"] --> CORE
CONFIG["⚙️ .antipatterns.yml"] --> CORE
```
## 🚀 运行模式
| 模式 | 命令 | 描述 |
| --- | --- | --- |
| 📁 **本地** | `antipatterns scan ./ruta` | 分析本地 repo |
| 🔁 **CI/CD** | GitHub Action | 在 PR 中评论 + 上传 SARIF |
| 🌐 **多组织** | `antipatterns scan-org ` | 扫描整个组织 |
## 🎯 检测到的反模式 (MVP)
| 反模式 | 方法 | 来源 |
| --- | --- | --- |
| 🐘 God Object / God Class | 类指标 (LOC, 方法, fan-in/out) | 原生 (tree-sitter) |
| 🌀 过高的复杂度 | 圈复杂度 / 认知复杂度 | OSS: `radon`, `gocyclo`, `eslint` |
| 🔁 重复代码 | type-1/type-2 克隆检测 | OSS: `jscpd` |
| 🔄 循环依赖 | imports 图 + 循环检测 | OSS: `madge`, `go list` |
| 🔢 Magic numbers/strings | 常量外部的重复字面量 | 原生 |
| 📏 巨型函数/文件 | 超过阈值的 LOC 和参数数量 | 原生 |
| 💀 死代码 (lava flow) | 未被引用的符号 | OSS: `vulture`, `ts-prune` |
| 📋 复制粘贴编程 | 按目录聚合重复项 | 衍生 |
## 📊 报告格式
- **终端** — 根据严重程度着色的表格 (info/low/medium/high/critical)
- **JSON** — 结构化的 `report.json`,用于与其他工具集成
- **Markdown/HTML** — 可导航的报告,包含指标和指向受影响代码行的链接
- **SARIF** — 与 GitHub Code Scanning 集成(Security 选项卡)
## ⚙️ 配置
```
# .antipatterns.yml
orgs:
ka0s-klaus:
token_env: GH_TOKEN_KA0S
output: reports/ka0s/
publish: true
masorange:
token_env: GH_TOKEN_MASORANGE
output: reports/masorange/
publish: false # datos de cliente: nunca se publican
thresholds:
god_object:
methods: 20
loc: 400
function_loc: 80
cyclomatic: 15
duplication_pct: 5
```
## 🗺️ 路线图
| 阶段 | 内容 | 状态 |
| --- | --- | --- |
| **0 — 脚手架** | Go 模块, Cobra CLI, Finding 模型, console+JSON 渲染器 | 🔄 进行中 |
| **1 — 原生 MVP** | tree-sitter + 检测器: God Object, 巨型函数, magic numbers | ⏳ 待定 |
| **2 — OSS 适配器** | `jscpd`, `madge`, `radon`, `gocyclo`, 优雅跳过 | ⏳ 待定 |
| **3 — SARIF + Action** | GitHub Action, PR 评论, Code Scanning | ⏳ 待定 |
| **4 — 多组织** | `scan-org`, profiles, 并行处理, 汇总面板 | ⏳ 待定 |
| **5 — 发布** | README, license, 交叉编译 releases | ⏳ 待定 |
## 📄 许可证
MIT © [Ka0s-Klaus](https://github.com/Ka0s-Klaus)
标签:Go, Ruby工具, tree-sitter, 云安全监控, 代码异味, 反模式检测, 弱口令爆破, 技术债务, 日志审计, 自动化安全运营, 静态分析