danyasync/explain-codebase

GitHub: danyasync/explain-codebase

静态分析 CLI 工具,通过解析源码依赖关系映射仓库架构、入口点和变更风险,帮助开发者快速理解代码库结构。

Stars: 3 | Forks: 0

# 解释 Codebase [![PyPI version](https://img.shields.io/pypi/v/explain-codebase.svg)](https://pypi.org/project/explain-codebase/) [![Python versions](https://img.shields.io/pypi/pyversions/explain-codebase.svg)](https://pypi.org/project/explain-codebase/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/danyasync/explain-codebase/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/danyasync/explain-codebase/blob/main/LICENSE) 用于映射仓库架构、依赖关系、入口点、副作用和变更风险的静态分析 CLI。 `explain-codebase` 可帮助您发现执行从哪里开始、哪些文件是核心、源文件之间如何相互依赖,以及哪里发生的变更可能会产生最广泛的影响。它会读取源文件,而无需导入或运行目标项目。 ## 快速开始 从 PyPI 安装并检查当前目录: ``` python -m pip install explain-codebase explain-codebase . ``` 要进行隔离的命令行安装,请使用 `pipx`: ``` pipx install explain-codebase explain-codebase . ``` 默认视图特意保持了紧凑: ``` Explain Codebase -------------------------------- Repository Path C:\Projects\checkout-service Type Python backend service Language python Files 7 Architecture Entrypoints 1 Core modules 5 Side effects 4 Suggested starting point api_server.py Run with --verbose to see full architecture ``` ## 它展示的内容 - 可能的应用程序入口点 - 根据依赖使用情况排名的核心模块 - 相对路径和包的导入关系 - 可能的执行路径 - 与数据库、网络、文件系统或缓存交互的文件 - 常见的架构区域,如服务、存储库、路由和控制器 - 大文件、高连接度文件、循环依赖和有风险的变更点 - 建议的入职阅读顺序 - 聚焦的依赖图和 HTML 架构报告 这些结果是旨在缩短初步调查时间的启发式信号。它们不能替代阅读关键代码路径或运行目标项目自身的检查。 ## 安装说明 ### 前置条件 - Python 3.10 或更高版本 - 检查公共 GitHub 仓库时需要 Git - 进行远程仓库检查和克隆时需要网络访问权限 ### 从 PyPI 安装 ``` python -m pip install explain-codebase ``` ### 隔离的 CLI 安装 ``` pipx install explain-codebase ``` ### 本地开发 ``` python -m pip install -e ".[dev]" ``` ## 用法 ### 常用命令 | 目标 | 命令 | | --- | --- | | 检查当前目录 | `explain-codebase .` | | 检查另一个本地目录 | `explain-codebase path/to/repository` | | 显示详细的架构视图 | `explain-codebase . --verbose` | | 专注于架构风险 | `explain-codebase . --deep` | | 将 JSON 输出到标准输出 | `explain-codebase . --json` | | 限制扫描文件的数量 | `explain-codebase . --max-files 500` | | 建议阅读顺序 | `explain-codebase onboarding .` | | 在仓库上下文中解释单个文件 | `explain-codebase file src/services/orders.py` | | 生成交互式依赖图 | `explain-codebase . --graph` | | 生成 HTML 架构报告 | `explain-codebase . --report` | | 检测到架构问题时返回失败状态 | `explain-codebase . --ci` | | 显示已安装的版本 | `explain-codebase --version` | `--verbose` 和 `--deep` 不能组合使用。 ### 图表视图 `--graph` 会生成 `dependency_graph.html` 文件。`--report` 会生成 `codebase_report.html` 文件。这两个文件都会写入到当前工作目录。 交互式图表从确定性的节点位置开始,具有克制的环境脉动和方向性边流。选择某个节点会高亮其直接依赖项,而不会重启布局,同时搜索和过滤会使其余节点保持在原位。 可以拖动节点以将其调整到更有用的排列方式。当一个放下的节点与另一个节点重叠时,有界的局部碰撞处理只会轻柔地分开涉及的附近节点;它永远不会重启全局布局物理。在普通点击期间的微小指针移动将被忽略。 | 标志 | 视图 | | --- | --- | | `--architecture` | 架构级别的依赖关系;这是默认的图表视图 | | `--full` | 完整的文件级依赖图 | | `--entrypoint` | 从可能的入口点开始的路径 | | `--risk` | 高连接度和有风险的文件 | | `--side-effects` | 可能存在外部副作用的文件 | 最多选择一个图表视图标志。图表视图标志需要配合 `--graph` 或 `--report` 使用。 示例: ``` explain-codebase . --graph --architecture explain-codebase . --graph --entrypoint explain-codebase . --report --risk explain-codebase . --graph --full ``` ## 支持的源码格式 | 语言 | 扩展名 | 主要信号 | | --- | --- | --- | | Python | `.py` | 语法树、导入、定义、调用和副作用 | | JavaScript | `.js`, `.jsx`, `.mjs`, `.cjs` | 静态导入、CommonJS 导入、调用和副作用 | | TypeScript | `.ts`, `.tsx`, `.mts`, `.cts` | 静态导入、调用和副作用 | 导入解析会考虑相对路径、包入口文件以及支持的扩展名变体(前提是这些关系可以在静态分析下确定)。 ## 扫描行为 对于本地目录,扫描器会: - 仅考虑受支持的源码扩展名 - 将解析后的文件路径保留在所选仓库内 - 遵守可选的文件数量限制和每个文件 1 MiB 的大小限制 - 跳过常见的依赖、缓存、构建、覆盖率和环境目录 - 遵守根目录的 `.gitignore` 文件 - 当可以读取 Git 元数据时,将 Git 工作树限制为跟踪的文件,如果 Git 不可用,则回退到文件系统扫描 - 安全处理无法读取的源文件,并跳过不受支持或超大文件 使用 `--max-files` 可降低文件数量限制,以实现更聚焦或更快的扫描。 ## 公共 GitHub 仓库 传入标准格式的公共仓库 URL: ``` explain-codebase https://github.com/owner/repository ``` CLI 会检查公共仓库元数据、请求确认、在临时目录中执行受限克隆、分析克隆内容,并在之后删除该临时目录。不支持私有仓库、其他托管服务商和任意的 Git URL。 远程检查需要交互式终端、Git 和网络访问权限。克隆超时可能会停止远程准备工作,并且在分析期间会跳过超大源文件。 ## 输出与自动化 ### 标准输出与错误输出 人类可读的输出和 JSON 会写入到标准输出。进度阶段、警告和错误会写入到标准错误。这使得 JSON 适合进行重定向: ``` explain-codebase . --json > architecture.json ``` ### CI 模式 ``` explain-codebase . --ci ``` 未发现架构问题时,CI 模式会以状态码 `0` 退出;检测到问题时,则以状态码 `1` 退出。当前的问题检查包括循环依赖和实用工具类的上帝模块。阈值内置在 CLI 中。 ### JSON JSON 输出包含仓库信息、入口点、核心模块、副作用文件、架构区域、大文件、热点、有风险的文件、架构问题、执行路径以及可选的 HTML 输出路径。 ## 工作原理 从宏观层面来看,`explain-codebase` 会: 1. 解析并验证目标 2. 在安全边界内选择受支持的源文件 3. 解析静态导入和源码级信号 4. 解析导入并构建依赖图 5. 对核心模块进行排名,并识别入口点、副作用、热点和架构问题 6. 渲染选定的 CLI、JSON、图表或报告输出 在分析过程中,不会导入或执行目标项目的源代码。 ## 局限性 - 动态导入、反射、运行时依赖注入和特定于框架的装配可能不可见。 - 自定义路径别名和构建工具转换可能会降低导入解析的准确性。 - 仅在单独的转换步骤后才有效的语法可能会被跳过。 - 压缩的、第三方复制的、镜像的或高度重复的代码可能会降低信号质量。 - 大型 monorepo 应使用 `--max-files` 或分析更窄范围的目录。 - 远程分析仅支持公共 GitHub 仓库。 - 浅层远程克隆仍然可能传输大文件,因为仓库总下载大小没有上限。 - 交互式 HTML 视图会从公共 CDN 加载版本固定且经过完整性校验的图表库,并且在打开时需要网络访问权限。 ## 开发 安装开发工具并运行检查: ``` python -m pip install -e ".[dev]" ruff check . pytest python -m build python -m twine check --strict dist/* ``` ## 项目信息 - [更新日志](https://github.com/danyasync/explain-codebase/blob/main/CHANGELOG.md) - [安全策略](https://github.com/danyasync/explain-codebase/blob/main/SECURITY.md) - [问题追踪器](https://github.com/danyasync/explain-codebase/issues) - [PyPI 包](https://pypi.org/project/explain-codebase/) ## 许可证 根据 [MIT 许可证](https://github.com/danyasync/explain-codebase/blob/main/LICENSE) 授权。
标签:Python, WebSocket, 云安全监控, 代码审查, 依赖分析, 文档结构分析, 无后门, 架构分析, 逆向工具, 静态分析