跳到主要内容

代码库检查

使用 pygount 检查和分析代码库,以统计代码行数 (LOC)、语言分布以及代码与注释的比例。当被要求检查代码行数、仓库大小、语言组成或代码库统计数据时使用此技能。

技能元数据

来源捆绑(默认安装)
路径skills/github/codebase-inspection
版本1.0.0
作者Hermes Agent
许可证MIT
标签LOC, Code Analysis, pygount, Codebase, Metrics, Repository
相关技能github-repo-management

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理看到的指令。

使用 pygount 进行代码库检查

使用 pygount 分析仓库的代码行数、语言分布、文件数量以及代码与注释的比例。

何时使用

  • 用户询问 LOC(代码行数)计数
  • 用户希望了解仓库的语言分布
  • 用户询问代码库的大小或组成
  • 用户希望获取代码与注释的比例
  • 一般的“这个仓库有多大”的问题

前提条件

pip install --break-system-packages pygount 2>/dev/null || pip install pygount

1. 基本摘要(最常见)

获取包含文件数量、代码行数和注释行数的完整语言分布:

cd /path/to/repo
pygount --format=summary \
--folders-to-skip=".git,node_modules,venv,.venv,__pycache__,.cache,dist,build,.next,.tox,.eggs,*.egg-info" \
.

重要: 始终使用 --folders-to-skip 排除依赖项/构建目录,否则 pygount 将遍历这些目录,导致耗时极长或挂起。

2. 常见文件夹排除

根据项目类型进行调整:

# Python projects
--folders-to-skip=".git,venv,.venv,__pycache__,.cache,dist,build,.tox,.eggs,.mypy_cache"

# JavaScript/TypeScript projects
--folders-to-skip=".git,node_modules,dist,build,.next,.cache,.turbo,coverage"

# General catch-all
--folders-to-skip=".git,node_modules,venv,.venv,__pycache__,.cache,dist,build,.next,.tox,vendor,third_party"

3. 按特定语言过滤

# Only count Python files
pygount --suffix=py --format=summary .

# Only count Python and YAML
pygount --suffix=py,yaml,yml --format=summary .

4. 详细的逐文件输出

# Default format shows per-file breakdown
pygount --folders-to-skip=".git,node_modules,venv" .

# Sort by code lines (pipe through sort)
pygount --folders-to-skip=".git,node_modules,venv" . | sort -t

## 5. 输出格式

```bash
# Summary table (default recommendation) \{#5-output-formats}
pygount --format=summary .

# JSON output for programmatic use \{#6-interpreting-results}
pygount --format=json .

# Pipe-friendly: Language, file count, code, docs, empty, string \{#pitfalls}
pygount --format=summary . 2>/dev/null

6. 解读结果

摘要表格列说明:

  • Language — 检测到的编程语言
  • Files — 该语言的文件数量
  • Code — 实际代码行数(可执行/声明性)
  • Comment — 注释或文档行数
  • % — 占总数的百分比

特殊伪语言:

  • __empty__ — 空文件
  • __binary__ — 二进制文件(图像、编译文件等)
  • __generated__ — 自动生成的文件(通过启发式方法检测)
  • __duplicate__ — 内容相同的文件
  • __unknown__ — 无法识别的文件类型

常见陷阱

  1. 始终排除 .git、node_modules、venv — 如果不使用 --folders-to-skip,pygount 将遍历所有内容,在大型依赖树上可能需要数分钟或挂起。
  2. Markdown 显示为 0 代码行 — pygount 将所有 Markdown 内容归类为注释,而非代码。这是预期行为。
  3. JSON 文件显示的代码行数较少 — pygount 可能会保守地计算 JSON 行数。如需准确的 JSON 行数,请直接使用 wc -l
  4. 大型单体仓库 — 对于非常大的仓库,考虑使用 --suffix 针对特定语言,而不是扫描所有内容。\t' -k1 -nr | head -20

## 5. 输出格式

```bash
# Summary table (default recommendation)
pygount --format=summary .

# JSON output for programmatic use
pygount --format=json .

# Pipe-friendly: Language, file count, code, docs, empty, string
pygount --format=summary . 2>/dev/null

6. 解读结果

摘要表格列说明:

  • Language — 检测到的编程语言
  • Files — 该语言的文件数量
  • Code — 实际代码行数(可执行/声明性)
  • Comment — 注释或文档行数
  • % — 占总数的百分比

特殊伪语言:

  • __empty__ — 空文件
  • __binary__ — 二进制文件(图像、编译文件等)
  • __generated__ — 自动生成的文件(通过启发式方法检测)
  • __duplicate__ — 内容相同的文件
  • __unknown__ — 无法识别的文件类型

常见陷阱

  1. 始终排除 .git、node_modules、venv — 如果不使用 --folders-to-skip,pygount 将遍历所有内容,在大型依赖树上可能需要数分钟或挂起。
  2. Markdown 显示为 0 代码行 — pygount 将所有 Markdown 内容归类为注释,而非代码。这是预期行为。
  3. JSON 文件显示的代码行数较少 — pygount 可能会保守地计算 JSON 行数。如需准确的 JSON 行数,请直接使用 wc -l
  4. 大型单体仓库 — 对于非常大的仓库,考虑使用 --suffix 针对特定语言,而不是扫描所有内容。