RepoPath 是一个帮助开发者快速理解陌生代码仓库的工具,支持分析本地项目目录和公开 GitHub 仓库。具备文件结构分析、Python/C++ 代码结构识别、模块依赖关系分析、Git 提交历史分析、代码阅读顺序推荐及变更热点识别等功能,可生成 Markdown 和 JSON 分析报告,并提供 Streamlit 可视化界面。
整体架构
项目采用 Python 分层架构,将数据来源、分析逻辑、核心流程和结果展示解耦。
数据来源层(Provider):统一处理本地文件系统、Git 历史和公开 GitHub 仓库。远程仓库通过固定提交 SHA 下载源码快照,不执行目标仓库代码。
分析层(Analyzer):分别实现文件扫描与代码统计、Python AST 分析、C++ 基础静态分析、Git 历史分析、依赖图构建和代码阅读优先级评分。
核心流程层(Core Pipeline):统一编排各分析阶段,收集分析结果和中间产物,由 Composer 汇总为统一的仓库报告。
展示与输出层:CLI 和 Streamlit 共用同一套分析流程,支持 Markdown / JSON 报告生成,以及可视化查看依赖关系、推荐阅读顺序和 Git 变更热点。
技术坑:Streamlit 交互与状态管理
1. Rerun 导致临时状态丢失:Streamlit 在用户交互后会重新执行脚本,普通 Python 变量不会自动跨 rerun 保存。通过 `st.session_state` 管理分析状态、用户选择和交互流程,避免重复初始化导致已选配置、分析进度或展示状态异常。
2. 交互触发重复计算:修改选项或点击组件可能触发整页重新执行。如果直接在页面渲染过程中运行完整的仓库分析流程,会造成重复扫描、Git 历史重复解析和界面响应变慢。需要区分参数配置、正式分析和结果展示阶段,避免无意义的重复计算,并合理使用缓存。