RandomCodeSpace/code-signal
GitHub: RandomCodeSpace/code-signal
一款零外部依赖、完全离线的多语言仓库代码质量聚合扫描 CLI 工具。
Stars: 0 | Forks: 0
## 功能
code-signal 是一个独立的 Go CLI,用于扫描仓库并报告聚合的代码质量信号:评分、问题总数、问题类别、规则计数、检测到的语言/模块以及重复密度。它专为本地开发者机器、CI 任务和物理隔离环境而设计。
该扫描器特意**不**调用 PMD、ESLint、Ruff、ShellCheck、Hadolint、SonarQube 或任何其他项目提供的分析器。每一条规则都内置在二进制文件中并且是确定性的。
## 安装
```
go install github.com/randomcodespace/code-signal/cmd/scanner@latest
```
或者从源码构建:
```
git clone https://github.com/RandomCodeSpace/code-signal.git
cd code-signal
go build -trimpath -o scanner ./cmd/scanner
```
## 快速开始
```
# 扫描当前 repository
scanner scan .
# 输出聚合 JSON
scanner scan . --json
# 检测语言和 module root
scanner detect .
# 比较完整的本地 git 快照
scanner diff --base main --head HEAD .
# 检查离线就绪状态
scanner doctor
```
完成的 `scan`、`diff` 和 `detect` 命令在生成报告后会以退出码 `0` 退出,即使在质量评分很差或检测到回归时也是如此。非零退出码专门用于 CLI 使用错误、无效配置、本地 git/runtime 错误、上下文取消以及输出写入失败。
## 内置规则
当前规则集:`0.5.0`。
| 规则 | 类别 | 严重程度 | 信号 |
|---|---|---:|---|
| `generic.long-line` | style | warning | 超过配置最大长度(默认为 120)的行。 |
| `generic.trailing-whitespace` | style | warning | 尾部的空格或制表符。 |
| `generic.todo` | maintainability | info | 注释中的 `TODO`、`FIXME` 和 `HACK` 标记。 |
| `generic.duplicate-block` | maintainability | warning | 重复的规范化 10 行逻辑窗口。 |
| `generic.deep-nesting` | complexity | warning | Python 缩进嵌套以及类 C 语言的大括号控制嵌套。 |
| `generic.risky-shell` | security | error | 危险的 shell 模式,例如 `curl | sh`、`wget | bash` 以及危险的 `rm -rf` 目标。 |
| `generic.merge-conflict` | bug | error | 未解决的 git 冲突标记。 |
| `generic.parse-json` | bug | error | 无效的 JSON。 |
| `generic.parse-go` | bug | error | 无效的 Go 语法。 |
| `generic.go-complexity` | complexity | warning | Go 圈复杂度超过 15。 |
| `generic.generated-skip` | maintainability | info | 生成、压缩、vendor 和构建输出跳过策略的元数据。 |
这些都是真实的检查,而不是占位符。它们的目的不是提供与 SonarQube 兼容的计数;而是 code-signal 自身确定性的质量信号。
## 支持的语言
code-signal 通过内置的词法/解析器检查来检测和分析以下语言:
`go`、`javascript`、`typescript`、`python`、`ruby`、`rust`、`java`、`csharp`、`php`、`shell`、`dockerfile`、`json`、`toml`、`yaml`。
检测机制会使用扩展名、shebang 以及常见的清单文件,例如 `go.mod`、`package.json`、`pyproject.toml`、`Cargo.toml`、`pom.xml`、Gradle 文件、`.csproj`、`.sln`、`composer.json`、`Gemfile`、`Dockerfile`、`Containerfile` 和 `*.dockerfile`。
## 配置
配置是可选的。如果存在,将从扫描的仓库根目录或通过 `--config` 加载 `scanner.json`。
```
{
"scan": {
"default_timeout_seconds": 30,
"max_file_bytes": 1048576,
"follow_symlinks": false,
"workers": 0
},
"score": {
"fail_under": 75,
"error": 10,
"warning": 4,
"info": 1
},
"diff": {
"fail_on_score_drop": true,
"max_allowed_new_errors": 0,
"category_regression_threshold": 1
}
}
```
未知的配置字段和冗余的 JSON 值将被拒绝。
## 隐私与输出契约
报告仅包含聚合数据。Facts 和报告 JSON 不包含文件路径、行/列坐标、代码片段、克隆组、单文件发现或源代码文本。扫描器仅读取本地文件和本地 git 对象;它不执行遥测、更新检查、远程规则下载、包安装或任何网络调用。
## 开发
```
go test ./...
go vet ./...
go run ./cmd/scanner scan .
```
Main 分支受保护。功能开发应使用分支和 pull request。必要的检查反映了 `RandomCodeSpace/codeiq` 所使用的 CI/安全模式:Go vet/test/static analysis、OSS 安全扫描器、重复项检查、SBOM 生成、perf/self-scan 检查以及 OpenSSF Scorecard。
## 许可证
MIT。详情请见 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Homebrew安装, Ruby工具, SOC Prime, 开发工具, 报告聚合, 文档结构分析, 日志审计, 静态扫描