返回列表

xiaokeer-gen-project-tree

Python 命令行工具,将项目目录结构转换为带跳转链接的 Markdown 文档,支持 .gitignore 规则解析。

PythonCLIMarkdownGitpathspec

项目简介

xiaokeer-gen-project-tree 是一个 Python 命令行工具,核心功能是将任意项目的目录结构转换为带有可点击跳转链接的 Markdown 格式文档。项目支持 .gitignore 规则自动解析,适用于项目文档自动化生成、代码仓库结构展示、开发者快速了解项目架构等场景。

主要特性

  • 📁 目录结构可视化:将项目目录转换为 Markdown 格式的树形结构
  • 🔗 可点击跳转链接:每个文件/文件夹生成对应的相对路径链接
  • 🚫 .gitignore 规则支持:自动解析并应用 .gitignore 排除规则
  • ⚙️ 灵活配置:支持 JSON 配置文件自定义排除规则
  • 🌐 跨平台兼容:正确处理 Windows/Unix 路径差异
  • 📝 完善的日志系统:支持 INFO/DEBUG 多级别日志输出

技术栈

类别技术
编程语言Python 3.x
路径处理pathlib
配置解析json
命令行argparse
日志系统logging
数据结构dataclasses
文件匹配fnmatch, pathspec
测试框架unittest

技术亮点

亮点一:pathspec 库的 GitIgnoreSpec 应用

使用 pathspec v1.0+ 新增的 GitIgnoreSpec 类,完整支持 Git 的 .gitignore 语义:

from pathspec import GitIgnoreSpec
spec = GitIgnoreSpec.from_lines(patterns)

优势

  • 完整支持 .gitignore 的所有语法特性
  • 正确处理否定模式(!pattern
  • 正确处理目录匹配(foo/
  • 支持双星号通配符(**/node_modules

亮点二:模块化设计 - 单一职责原则

每个模块职责清晰,耦合度低:

main.py              # 主入口 - 命令行参数解析与流程编排
config.py            # 配置管理 - 配置文件读取与验证
scanner.py           # 目录扫描 - 递归遍历与排除规则应用
gitignore_parser.py  # .gitignore解析 - 规则解析与文件匹配
generator.py         # 文档生成 - Markdown格式化输出

亮点三:数据类(dataclass)应用

使用 Python 3.7+ 的 dataclass 定义 TreeNode,代码简洁且类型安全:

@dataclass
class TreeNode:
    name: str                    # 文件/文件夹名称
    path: Path                   # 绝对路径
    is_dir: bool                 # 是否为目录
    relative_path: str           # 相对路径
    children: List['TreeNode']   # 子节点列表

亮点四:多编码 Fallback 机制

处理不同编码的 .gitignore 文件:

def _read_with_fallback_encoding(path: Path) -> List[str]:
    encodings = ['utf-8', 'gbk', 'gb2312', 'latin-1']
    for encoding in encodings:
        try:
            content = path.read_text(encoding=encoding)
            return content.splitlines()
        except UnicodeDecodeError:
            continue
    return []

亮点五:自定义异常体系

设计了带错误码的异常类,便于错误定位和处理:

错误码含义
1配置文件错误
2项目路径不存在
3项目路径无效
4输出权限错误
99未知错误

亮点六:完整的单元测试覆盖

测试文件覆盖所有核心模块:

测试文件测试数量覆盖场景
test_config.py15个配置验证、错误处理、中文路径
test_scanner.py14个目录扫描、排除规则、.gitignore解析
test_generator.py16个文档生成、格式验证、特殊字符

相关链接