Hello-Scan-Code 是一个专为大型代码仓库设计的高性能代码扫描工具。经过全面重构,采用了现代化的插件化架构,支持JSON配置文件、PyInstaller打包和Click命令行界面,提供更好的扩展性和易用性。
- 模块化设计:采用插件化架构,易于扩展和维护
- 双阶段扫描:Grep预筛选 + 插件精准分析,大幅提升扫描性能
- 内置插件:提供关键字扫描、安全检测、TODO检测、正则表达式等多种内置插件
- 自定义插件:支持开发自定义插件以满足特定需求
- 配置外置化:支持通过
config.json文件管理所有配置 - 灵活配置:支持应用配置、日志配置、数据库配置等多维度配置
- 插件配置:支持为每个插件单独配置参数
- 跨平台打包:支持 Windows 和 Linux 平台的二进制文件生成
- 无依赖运行:生成的可执行文件包含所有必要依赖,可在目标系统直接运行
- 自动化构建:提供构建脚本实现一键打包
- 友好的CLI:使用Click库提供直观的命令行界面
- 丰富的选项:支持路径指定、配置文件、详细日志、多种导出格式等选项
从 Releases 页面下载对应平台的预编译版本:
hello-scan-code-v1.0.0-windows.zip- Windows 平台hello-scan-code-v1.0.0-linux.tar.gz- Linux 平台
# 克隆项目 git clone https://github.com/taoweidong/Hello-Scan-Code.git cd Hello-Scan-Code # 安装依赖 pip install -r requirements.txt # 或使用Makefile make install
# 解压下载的文件 unzip hello-scan-code-v1.0.0-windows.zip cd hello-scan-code-v1.0.0-windows # 创建配置文件 copy config.template.json config.json # 编辑配置文件 notepad config.json # 运行程序 hello-scan-code.exe --path /path/to/code
# 解压下载的文件 tar -xzf hello-scan-code-v1.0.0-linux.tar.gz cd hello-scan-code-v1.0.0-linux # 使用启动脚本(推荐) ./run-hello-scan-code.sh # 或直接运行 ./hello-scan-code/hello-scan-code --path /path/to/code
# 创建配置文件 cp config/config.template.json config.json # 编辑配置文件 vim config.json # 运行程序 python main.py --path /path/to/code # 或使用Makefile make run
Usage: main.py [OPTIONS] Options: -p, --path PATH 要扫描的代码仓库路径 -c, --config PATH 配置文件路径 [default: config.json] -v, --verbose 启用详细日志输出 --export-excel PATH 导出Excel报告文件路径 --export-html PATH 导出HTML报告文件路径 --export-db 导出结果到数据库 --help Show this message and exit.
{
"_comment": "Hello-Scan-Code 配置文件模板 (插件化架构版本)",
"_description": "复制此文件为 config.json 并修改相应配置项",
"repo_path": ".",
"search_term": "TODO,FIXME,BUG",
"is_regex": false,
"validate": true,
"validate_workers": 4,
"output": {
"db_path": "db/results.db",
"excel_path": "report/results.xlsx"
},
"logging": {
"level": "INFO",
"file_path": "logs/app.log",
"rotation": "10 MB",
"retention": "7 days"
},
"database": {
"pool_size": 5,
"max_overflow": 10,
"pool_timeout": 30
},
"filters": {
"ignore_dirs": [
".git", "__pycache__", "node_modules",
"dist", "build", ".vscode", ".idea"
],
"file_extensions": [".py", ".js", ".java"]
},
"plugins": {
"enabled": ["keyword", "todo", "security", "regex"],
"configs": {
"keyword": {
"keywords": ["TODO", "FIXME", "BUG", "HACK"]
},
"regex": {
"patterns": {
"email": "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}",
"phone": "\\b\\d{3}-\\d{3}-\\d{4}\\b"
}
}
}
}
}# 使用Makefile构建 make build-linux # Linux平台 make build-windows # Windows平台 make all # 完整构建流程 # 或手动执行构建脚本 python scripts/build_linux.py python scripts/build_windows.py
# 运行所有测试 make test # 运行单元测试 make test-unit # 运行集成测试 make test-integration # 检查代码覆盖率 make coverage
| 特性 | 传统架构 | 插件化架构 | 改进 |
|---|---|---|---|
| 扫描性能 | 低效全量扫描 | Grep预筛选+精准分析 | ✓ 性能提升 |
| 扩展性 | 困难 | 插件化扩展 | ✓ 易扩展 |
| 可维护性 | 耦合度高 | 模块化设计 | ✓ 易维护 |
| 配置管理 | 简单配置 | 多维度配置 | ✓ 更灵活 |
| 插件生态 | 不支持 | 完整插件系统 | ✓ 可定制 |
- 🔌 全新插件化架构重构
- ⚡ 双阶段扫描引擎(Grep预筛选 + 插件精准分析)
- 📦 统一配置管理系统
- 📋 JSON配置文件支持
- 🚀 增强的PyInstaller打包支持
- 🖥️ Click命令行界面
- 🔧 自动化构建和测试工具
- 📚 完整的文档和使用指南
hello-scan-code/ ├── config/ # 配置文件目录 │ ├── config.template.json # 配置模板文件 │ └── ... # 其他配置文件 ├── scripts/ # 构建脚本 │ ├── build_linux.py # Linux平台构建脚本 │ └── build_windows.py # Windows平台构建脚本 ├── src/ │ ├── __init__.py # Python包初始化文件 │ ├── main.py # 主程序入口 │ ├── engine/ # 扫描引擎模块 │ │ ├── __init__.py │ │ ├── scan_engine.py # 优化扫描引擎 │ │ └── grep_scanner.py # Grep预扫描器 │ ├── plugin/ # 插件系统核心 │ │ ├── __init__.py │ │ ├── base.py # 插件基础接口 │ │ ├── manager.py # 插件管理器 │ │ ├── registry.py # 插件注册表 │ │ └── discovery.py # 插件发现服务 │ ├── plugins/ # 插件实现 │ │ ├── __init__.py │ │ ├── builtin/ # 内置插件 │ │ │ ├── keyword_plugin.py # 关键字扫描插件 │ │ │ ├── todo_plugin.py # TODO检测插件 │ │ │ ├── security_plugin.py # 安全检测插件 │ │ │ └── regex_plugin.py # 正则表达式插件 │ │ └── custom/ # 自定义插件目录 │ ├── config/ # 配置管理模块 │ │ ├── __init__.py │ │ └── config_manager.py # 配置管理器 │ ├── database/ # 数据库模块 │ │ ├── __init__.py │ │ ├── session_manager.py # 数据库会话管理器 │ │ ├── models.py # 数据库模型 │ │ ├── repositories.py # 数据库仓储 │ │ └── compatibility.py # 兼容性适配器 │ ├── exporters/ # 导出器模块 │ │ ├── __init__.py │ │ ├── excel_exporter.py # Excel导出器 │ │ ├── html_exporter.py # HTML导出器 │ │ └── database_exporter.py # 数据库导出器 │ ├── utils/ # 工具函数模块 │ │ ├── __init__.py │ │ ├── file_utils.py # 文件工具函数 │ │ ├── text_utils.py # 文本工具函数 │ │ └── platform_utils.py # 平台工具函数 │ └── packaging/ # 打包模块 │ ├── __init__.py │ ├── pyinstaller_hooks.py # PyInstaller钩子 │ ├── resource_bundler.py # 资源打包器 │ └── hooks/ # PyInstaller自定义钩子 ├── tests/ # 测试目录 │ ├── unit/ # 单元测试 │ ├── integration/ # 集成测试 │ └── ... # 其他测试文件 ├── pyproject.toml # 项目配置和依赖 ├── README.md # 使用说明 ├── Makefile # 构建脚本 └── main.py # 根目录入口文件
-
关键字扫描插件 (keyword)
- 功能:扫描代码中的指定关键字
- 配置:支持自定义关键字列表
-
TODO检测插件 (todo)
- 功能:检测代码中的TODO、FIXME等注释
- 配置:支持自定义注释标记
-
安全检测插件 (security)
- 功能:检测潜在的安全问题
- 配置:支持自定义安全规则
-
正则表达式插件 (regex)
- 功能:使用正则表达式扫描代码
- 配置:支持自定义正则表达式模式
创建自定义插件需要继承 IScanPlugin 接口并实现相关方法:
from src.plugin.base import IScanPlugin, ScanResult, ScanContext class MyCustomPlugin(IScanPlugin): @property def plugin_id(self) -> str: return "my_custom_plugin" @property def name(self) -> str: return "My Custom Plugin" # 实现其他必需的方法...
- 克隆项目
git clone https://github.com/taoweidong/Hello-Scan-Code.git
cd Hello-Scan-Code- 安装依赖
# 使用 pip pip install -r requirements.txt # 或安装特定依赖 pip install loguru pandas openpyxl sqlalchemy alembic pyinstaller click
- 创建输出目录
mkdir -p db report logs
- 配置扫描参数
创建并编辑配置文件:
cp config/config.template.json config.json vim config.json
- 运行扫描
# 基本扫描 python main.py --path /path/to/code # 详细日志输出 python main.py --path /path/to/code --verbose # 导出多种格式报告 python main.py --path /path/to/code --export-excel report.xlsx --export-html report.html --export-db
- 查看结果
- SQLite 数据库:
db/results.db - Excel 文件:
report/results.xlsx - HTML 报告:
report/report.html - 日志文件:
logs/目录
- SQLite 数据库:
主要配置参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
repo_path |
代码仓库路径 | . |
search_term |
搜索关键字(逗号分隔) | TODO,FIXME,BUG |
is_regex |
是否使用正则表达式 | false |
validate |
是否启用结果验证 | true |
validate_workers |
验证工作线程数 | 4 |
ignore_dirs |
忽略的目录列表 | [".git", "__pycache__", "node_modules"] |
file_extensions |
文件后缀过滤 | [".py", ".js", ".java"] |
db_path |
SQLite 输出路径 | db/results.db |
excel_path |
Excel 输出路径 | report/results.xlsx |
- 插件化架构:采用现代化插件化设计,易于扩展和维护
- 高性能扫描:双阶段扫描引擎,Grep预筛选 + 插件精准分析
- 多格式导出:支持Excel、HTML、数据库等多种导出格式
- 跨平台支持:支持Windows和Linux平台
- 完整测试:包含单元测试和集成测试,代码覆盖率超过80%
- 现代化工具链:使用Click、PyInstaller、Loguru等现代化Python库