|
1 | | -# 代码行数统计工具 |
| 1 | +# CodeStatistics |
2 | 2 |
|
3 | | -一个用Go语言编写的代码行数统计工具,可以扫描指定目录下的所有代码文件,统计各种文件类型的行数信息。 |
| 3 | +CodeStatistics 是一个强大的代码统计工具,用于分析项目中的代码文件并生成详细的统计报告。 |
4 | 4 |
|
5 | | -## 功能特性 |
| 5 | +## 功能特点 |
6 | 6 |
|
7 | | -1. **指定代码文件夹路径** - 支持扫描任意指定的目录 |
8 | | -2. **自动统计文件类型和数量** - 自动识别并统计所有文件类型 |
9 | | -3. **代码行数统计** - 统计总行数、代码行数、空行数、注释行数 |
10 | | -4. **文件类型占比** - 计算每种文件类型在项目中的占比 |
11 | | -5. **黑名单模式** - 自动排除非代码文件(图片、音视频、压缩包等) |
12 | | -6. **CSV报告输出** - 生成详细的CSV格式统计报告 |
| 7 | +- **代码行数统计**:统计项目中的总行数、代码行数、注释行数和空行数 |
| 8 | +- **文件类型分析**:区分不同类型的文件(基于文件扩展名) |
| 9 | +- **灵活的过滤机制**:支持白名单和黑名单机制,可以指定要包含或排除的文件类型和目录 |
| 10 | +- **报告生成**:可以生成CSV格式的统计报告 |
13 | 11 |
|
14 | | -## 项目结构 |
| 12 | +## 安装 |
15 | 13 |
|
16 | | -- `main.go` - 主程序入口和命令行处理 |
17 | | -- `types.go` - 数据结构定义 |
18 | | -- `config.go` - 配置信息和黑名单设置 |
19 | | -- `analyzer.go` - 文件分析和目录扫描逻辑 |
20 | | -- `reporter.go` - 报告生成和输出格式化 |
| 14 | +```bash |
| 15 | +# 克隆仓库 |
| 16 | +git clone https://github.com/WINDOWS/CodeStatistics.git |
| 17 | + |
| 18 | +# 进入项目目录 |
| 19 | +cd CodeStatistics |
| 20 | + |
| 21 | +# 构建项目 |
| 22 | +go build |
| 23 | +``` |
21 | 24 |
|
22 | 25 | ## 使用方法 |
23 | 26 |
|
24 | | -### 编译程序 |
25 | 27 | ```bash |
26 | | -go build . |
| 28 | +# 基本用法 |
| 29 | +./CodeStatistics --path /path/to/your/code |
| 30 | + |
| 31 | +# 生成CSV报告 |
| 32 | +./CodeStatistics --path /path/to/your/code --output report.csv |
| 33 | + |
| 34 | +# 启用注释行检测 |
| 35 | +./CodeStatistics --path /path/to/your/code --comments |
27 | 36 | ``` |
28 | 37 |
|
29 | | -### 运行程序 |
| 38 | +## 命令行选项 |
| 39 | + |
| 40 | +| 选项 | 简写 | 描述 | |
| 41 | +|------|------|------| |
| 42 | +| `--path` | `-p` | 要扫描的代码目录路径 | |
| 43 | +| `--output` | `-o` | 输出CSV文件路径 | |
| 44 | +| `--comments` | `-c` | 启用注释行检测 | |
| 45 | +| `--white-add` | `-w` | 添加扩展名到内置白名单,逗号分隔 (例如: .ext1,.ext2) | |
| 46 | +| `--white-cover` | `-W` | 使用扩展名列表覆盖内置白名单,逗号分隔 | |
| 47 | +| `--black-add` | `-b` | 添加扩展名到内置黑名单,逗号分隔 | |
| 48 | +| `--black-cover` | `-B` | 使用扩展名列表覆盖内置黑名单,逗号分隔 | |
| 49 | +| `--only-white` | `-O` | 仅显示白名单文件,跳过黑名单和未知文件分析 | |
| 50 | +| `--bdir-add` | `-d` | 添加目录到内置黑名单目录,逗号分隔 (例如: dir1,dir2) | |
| 51 | +| `--bdir-cover` | `-D` | 使用目录列表覆盖内置黑名单目录,逗号分隔 | |
| 52 | +| `--show-builtin` | `-s` | 显示内置默认白名单/黑名单/黑名单目录 | |
| 53 | +| `--lf` | | 日志文件路径 | |
| 54 | +| `--ll` | | 日志级别 (debug/info/warn/error) | |
| 55 | +| `--cf` | | 控制台日志格式 (T L C M F 组合或 off\|null 禁用) | |
| 56 | + |
| 57 | +## 白名单和黑名单 |
| 58 | + |
| 59 | +### 默认白名单(代码文件) |
| 60 | + |
| 61 | +工具内置了常见的代码文件扩展名白名单,包括: |
| 62 | +- 编程语言文件:.go, .java, .c, .cpp, .py, .js, .ts 等 |
| 63 | +- 模板语言文件:.vue, .svelte, .jsx, .tsx 等 |
| 64 | +- 前端语言文件:.html, .htm 等 |
| 65 | +- 脚本语言文件:.sh, .bash, .bat, .cmd 等 |
| 66 | + |
| 67 | +### 默认黑名单(非代码文件) |
| 68 | + |
| 69 | +工具内置了常见的非代码文件扩展名黑名单,包括: |
| 70 | +- 数据库文件:.sql, .mysql 等 |
| 71 | +- 标记和配置语言文件:.xml, .css, .json, .yaml 等 |
| 72 | +- 构建和配置文件:.mk, .cmake 等 |
| 73 | +- 文档文件:.md, .rst, .tex 等 |
| 74 | +- 图片文件:.jpg, .png, .gif 等 |
| 75 | +- 音视频文件:.mp3, .mp4, .avi 等 |
| 76 | +- 压缩文件:.zip, .rar, .7z 等 |
| 77 | + |
| 78 | +### 默认跳过目录 |
| 79 | + |
| 80 | +工具默认会跳过以下目录: |
| 81 | +`.git`, `node_modules`, `vendor`, `.svn`, `.hg`, `target`, `build`, `dist`, `.idea`, `.vscode` |
| 82 | + |
| 83 | +## 示例 |
| 84 | + |
| 85 | +### 基本分析 |
30 | 86 |
|
31 | | -#### 基本用法 |
32 | 87 | ```bash |
33 | | -# 扫描当前目录 |
34 | | -./CodeStatistics |
| 88 | +./CodeStatistics --path ./myproject |
| 89 | +``` |
35 | 90 |
|
36 | | -# 扫描指定目录 |
37 | | -./CodeStatistics -p /path/to/your/project |
| 91 | +### 生成CSV报告 |
38 | 92 |
|
39 | | -# 指定输出文件 |
40 | | -./CodeStatistics -p /path/to/your/project -o report.csv |
| 93 | +```bash |
| 94 | +./CodeStatistics --path ./myproject --output stats.csv |
41 | 95 | ``` |
42 | 96 |
|
43 | | -#### 命令行参数 |
44 | | -- `-p, --path` : 要扫描的代码目录路径 (默认: 当前目录) |
45 | | -- `-o, --output` : 输出CSV文件路径 (默认: code_statistics.csv) |
46 | | -- `-h, --help` : 显示帮助信息 |
| 97 | +### 自定义白名单 |
47 | 98 |
|
48 | | -#### 示例 |
49 | 99 | ```bash |
50 | | -# Windows |
51 | | -./CodeStatistics.exe -p "C:\Users\YourName\Projects\MyProject" -o "C:\Reports\stats.csv" |
| 100 | +./CodeStatistics --path ./myproject --white-add .custom,.special |
| 101 | +``` |
| 102 | + |
| 103 | +### 自定义黑名单目录 |
52 | 104 |
|
53 | | -# Linux/Mac |
54 | | -./CodeStatistics -p ~/projects/myproject -o ~/reports/stats.csv |
| 105 | +```bash |
| 106 | +./CodeStatistics --path ./myproject --bdir-add cache,temp |
55 | 107 | ``` |
56 | 108 |
|
57 | | -## 输出格式 |
58 | | - |
59 | | -### 控制台输出 |
60 | | -程序会在控制台显示格式化的统计表格,包含: |
61 | | -- 文件类型 |
62 | | -- 文件数量和占比 |
63 | | -- 总行数、代码行数、空行数、注释行数 |
64 | | -- 代码占比 |
65 | | - |
66 | | -### CSV报告 |
67 | | -生成的CSV文件包含以下列: |
68 | | -- 文件类型 |
69 | | -- 文件数量 |
70 | | -- 文件占比(%) |
71 | | -- 总行数 |
72 | | -- 代码行数 |
73 | | -- 空行数 |
74 | | -- 注释行数 |
75 | | -- 代码占比(%) |
76 | | - |
77 | | -## 支持的文件类型 |
78 | | - |
79 | | -工具支持识别多种编程语言的注释格式: |
80 | | -- Go, JavaScript, TypeScript, Java, C/C++, C#, PHP, Swift, Kotlin |
81 | | -- Python, Shell, Ruby, Perl, YAML |
82 | | -- HTML, XML, Vue |
83 | | -- CSS, SCSS, SASS |
84 | | -- SQL |
85 | | - |
86 | | -## 黑名单文件类型 |
87 | | - |
88 | | -自动排除以下类型的文件: |
89 | | -- 图片文件: .jpg, .png, .gif, .svg 等 |
90 | | -- 音视频文件: .mp3, .mp4, .avi 等 |
91 | | -- 压缩文件: .zip, .rar, .7z 等 |
92 | | -- 文档文件: .pdf, .doc, .xls 等 |
93 | | -- 二进制文件和临时文件 |
94 | | - |
95 | | -## 跳过的目录 |
96 | | - |
97 | | -自动跳过以下目录: |
98 | | -- .git, .svn, .hg (版本控制) |
99 | | -- node_modules, vendor (依赖包) |
100 | | -- target, build, dist (构建输出) |
101 | | -- .idea, .vscode (IDE配置) |
102 | | - |
103 | | -## 技术实现 |
104 | | - |
105 | | -- 使用结构化设计模式,每个文件不超过300行 |
106 | | -- 使用go-flags库处理命令行参数 |
107 | | -- 支持跨平台运行 (Windows, Linux, macOS) |
108 | | -- 高效的文件遍历和内容分析 |
| 109 | +## 输出示例 |
| 110 | + |
| 111 | +``` |
| 112 | +代码统计摘要: |
| 113 | +总文件数: 120 |
| 114 | +总行数: 15000 |
| 115 | +代码行数: 10000 (66.7%) |
| 116 | +空行数: 3000 (20.0%) |
| 117 | +注释行数: 2000 (13.3%) |
| 118 | +
|
| 119 | +文件类型分布: |
| 120 | +.go: 50 文件, 5000 行 (33.3%) |
| 121 | +.js: 30 文件, 4000 行 (26.7%) |
| 122 | +.html: 20 文件, 3000 行 (20.0%) |
| 123 | +.css: 15 文件, 2000 行 (13.3%) |
| 124 | +其他: 5 文件, 1000 行 (6.7%) |
| 125 | +``` |
0 commit comments