coldhighsun/Sloc

GitHub: coldhighsun/Sloc

Sloc 是一个 .NET 全局命令行工具,用于统计源代码行数并按语言聚合,区分代码行、注释行和空行,同时提供注释健康度指标。

Stars: 1 | Forks: 0

# Sloc [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/coldhighsun/Sloc/actions/workflows/ci.yml) [![NuGet Version](https://img.shields.io/nuget/v/Sloc)](https://www.nuget.org/packages/Sloc) [![NuGet Downloads](https://img.shields.io/nuget/dt/Sloc?label=nuget%20downloads)](https://www.nuget.org/packages/Sloc) [![GitHub All Releases](https://img.shields.io/github/downloads/coldhighsun/Sloc/total?label=release%20downloads)](https://github.com/coldhighsun/Sloc/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) Sloc(**S**ource **L**ines **O**f **C**ode)是一个用于统计源代码行数的 .NET 全局命令行工具。它会逐文件分析代码,区分**代码行**、**注释行**和**空行**,并按编程语言进行聚合汇总。它支持自动检测 23 种语言、三种输出格式(表格、JSON、HTML)、逐文件明细视图以及注释健康度指标。 ## 功能特性 - 统计代码行 / 注释行 / 空行 / 总行数 - 正确处理单行注释、块注释以及跨多行的块注释 - 内置 23 种常见语言的注释规则(按文件扩展名自动检测) - 递归扫描目录,支持 `--include` / `--exclude` glob 过滤 - 默认自动排除 `bin`、`obj`、`artifacts`、`.git`、`.vs`、`.vscode`、`.idea`、`node_modules` 等类似目录 - 三种输出格式:彩色表格(默认)、JSON 与 HTML - 表格输出中包含注释健康度列,显示注释密度指标(无 / 低 / 一般 / 良好 / 较高 / 过密) - 未指定 `--format` 时,可根据 `--output` 文件扩展名自动推断格式(`.json` → JSON,`.html` / `.htm` → HTML) - 无法读取的文件或目录会被自动跳过,并在最后显示跳过的路径及原因汇总 ## 安装 作为 .NET 全局工具安装(需要 .NET 8 SDK): ``` dotnet tool install --global Sloc ``` 更新或卸载: ``` dotnet tool update --global Sloc dotnet tool uninstall --global Sloc ``` ## 使用方法 ``` sloc [options] ``` ### 示例 ``` # Count 当前目录(递归) sloc # Count 特定目录 sloc ./src # Count 单个文件 sloc ./src/Program.cs # 仅 Count C# 文件 sloc ./src --include "**/*.cs" # 排除 test 目录 sloc . --exclude "**/tests/**" # 显示每个文件的详细信息 sloc ./src --by-file # 输出为 JSON sloc ./src --format json # 将结果保存为 HTML 报告(在浏览器中打开) sloc ./src --format html --output report.html # 根据文件扩展名自动检测格式 sloc ./src --output sloc-report.json # 包含未知扩展名的文件 sloc . --all # 不要递归到子目录 sloc ./src --no-recursive ``` ### 选项 | 选项 | 简写 | 说明 | | --- | --- | --- | | `path`(参数) | | 要分析的文件或目录,默认为当前目录 `.` | | `--include` | `-i` | 要包含的文件 glob 模式,可多次指定 | | `--exclude` | `-e` | 要排除的文件 glob 模式,可多次指定 | | `--format` | `-f` | 输出格式:`Table`(默认)、`Json` 或 `Html` | | `--output` | `-o` | `Json` / `Html` 格式的输出文件路径;未指定 `--format` 时根据文件扩展名自动推断格式 | | `--no-recursive` | | 不递归进入子目录 | | `--no-health` | | 隐藏注释健康度列及百分比明细 | | `--by-file` | | 在语言汇总之外额外显示逐文件明细 | | `--paged` | `-p` | 显示分页输出 | | `--all` | | 包含扩展名未知的文件(归入 `Other`) | | `--help` | `-h` | 显示帮助 | | `--version` | | 显示版本 | ### 输出示例 ``` ╭──────────────┬───────┬─────────────┬─────────────┬─────────────┬───────┬────────────────╮ │ Language │ Files │ Code │ Comment │ Blank │ Total │ Comment Health │ ├──────────────┼───────┼─────────────┼─────────────┼─────────────┼───────┼────────────────┤ │ C# │ 12 │ 840 ( 75%) │ 120 ( 11%) │ 160 ( 14%) │ 1,120 │ ■ Good │ │ XML │ 3 │ 45 ( 76%) │ 6 ( 10%) │ 8 ( 14%) │ 59 │ — │ │ │ │ │ │ │ │ │ │ Total │ 15 │ 885 ( 75%) │ 126 ( 11%) │ 168 ( 14%) │ 1,179 │ — │ ╰──────────────┴───────┴─────────────┴─────────────┴─────────────┴───────┴────────────────╯ ``` 使用 `--by-file`(按文件树形展示): ``` ╭───────────────────────────┬──────────┬─────────────┬─────────────┬─────────────┬───────┬────────────────╮ │ File │ Language │ Code │ Comment │ Blank │ Total │ Comment Health │ ├───────────────────────────┼──────────┼─────────────┼─────────────┼─────────────┼───────┼────────────────┤ │ ├── 📁 Cli │ │ │ │ │ │ │ │ │ ├── AnalyzeHandler.cs │ C# │ 68 ( 76%) │ 12 ( 13%) │ 9 ( 10%) │ 89 │ ■ Good │ │ │ └── Program.cs │ C# │ 34 ( 83%) │ 3 ( 7%) │ 4 ( 10%) │ 41 │ ■ Fair │ │ └── 📁 Core │ │ │ │ │ │ │ │ ├── Analyzer.cs │ C# │ 120 ( 75%) │ 20 ( 13%) │ 20 ( 13%) │ 160 │ ■ Good │ │ └── Models.cs │ C# │ 80 ( 74%) │ 12 ( 11%) │ 16 ( 15%) │ 108 │ ■ Good │ │ │ │ │ │ │ │ │ │ Total │ 4 │ 302 ( 76%) │ 47 ( 12%) │ 49 ( 12%) │ 398 │ — │ ╰───────────────────────────┴──────────┴─────────────┴─────────────┴─────────────┴───────┴────────────────╯ ``` ## 支持的语言 C#、C/C++、Java、Kotlin、Swift、JavaScript、TypeScript、Python、Go、Rust、PHP、Ruby、F#、Visual Basic、SQL、PowerShell、Shell、YAML、JSON、HTML、XML、CSS、SCSS/Less。 ## 从源码构建 ``` # Restore 和 build dotnet build # 运行 tests dotnet test # 打包为 NuGet tool package(输出到 ./nupkg) dotnet pack src/Sloc.Cli/Sloc.Cli.csproj -c Release -o ./nupkg # 从本地 package 安装并验证 dotnet tool install --global --add-source ./nupkg Sloc sloc ./src ``` ## 已知限制 - 不解析字符串字面量,因此出现在字符串内部的注释符号(例如 `"// not a comment"`)可能会被误判。 - 行的分类基于注释符号的文本匹配,没有进行完整的词法分析。 ## 许可证 本项目基于 [MIT 许可证](https://opensource.org/licenses/MIT) 发布。 # Sloc [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/coldhighsun/Sloc/actions/workflows/ci.yml) [![NuGet Version](https://img.shields.io/nuget/v/Sloc)](https://www.nuget.org/packages/Sloc) [![NuGet Downloads](https://img.shields.io/nuget/dt/Sloc)](https://www.nuget.org/packages/Sloc) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) Sloc(**S**ource **L**ines **O**f **C**ode)是一个用于统计源代码行数的 .NET 全局命令行工具。它会逐文件分析代码,区分**代码行**、**注释行**和**空行**,并按编程语言进行聚合汇总,支持 23 种语言自动识别、三种输出格式(表格、JSON、HTML)、逐文件明细视图以及注释健康度指标。 ## 功能特性 - 统计代码行 / 注释行 / 空行 / 总行数 - 正确处理单行注释、块注释以及跨多行的块注释 - 内置 23 种常见语言的注释规则(按文件扩展名自动识别) - 递归扫描目录,支持 `--include` / `--exclude` glob 过滤 - 默认排除 `bin`、`obj`、`artifacts`、`.git`、`.vs`、`.vscode`、`.idea`、`node_modules` 等目录 - 三种输出格式:彩色表格(默认)、JSON 与 HTML - 表格输出新增注释健康度列,显示注释密度指标(无 / 低 / 一般 / 良好 / 较高 / 过密) - 未指定 `--format` 时,可根据 `--output` 文件扩展名自动推断格式(`.json` → JSON,`.html` / `.htm` → HTML) - 无法读取的文件或目录会被自动跳过,并在最终结果中列出所有跳过的路径及原因 ## 安装 作为 .NET 全局工具安装(需要 .NET 8 SDK): ``` dotnet tool install --global Sloc ``` 更新或卸载: ``` dotnet tool update --global Sloc dotnet tool uninstall --global Sloc ``` ## 使用方法 ``` sloc [options] ``` ### 示例 ``` # 统计当前目录(递归) sloc # 统计指定目录 sloc ./src # 统计单个文件 sloc ./src/Program.cs # 仅统计 C# 文件 sloc ./src --include "**/*.cs" # 排除测试目录 sloc . --exclude "**/tests/**" # 显示逐文件明细 sloc ./src --by-file # 以 JSON 格式输出 sloc ./src --format json # 保存为 HTML 报告(可在浏览器中打开) sloc ./src --format html --output report.html # 根据文件扩展名自动推断格式 sloc ./src --output sloc-report.json # 包含未知扩展名的文件 sloc . --all # 不递归子目录 sloc ./src --no-recursive ``` ### 选项 | 选项 | 简写 | 说明 | | --- | --- | --- | | `path`(参数) | | 要分析的文件或目录,默认为当前目录 `.` | | `--include` | `-i` | 要包含的文件 glob 模式,可多次指定 | | `--exclude` | `-e` | 要排除的文件 glob 模式,可多次指定 | | `--format` | `-f` | 输出格式:`Table`(默认)、`Json` 或 `Html` | | `--output` | `-o` | `Json` / `Html` 格式的输出文件路径;未指定 `--format` 时根据文件扩展名自动推断格式 | | `--no-recursive` | | 不递归扫描子目录 | | `--no-health` | | 隐藏注释健康度列及百分比数据 | | `--by-file` | | 在语言汇总之外额外显示逐文件明细 | | `--paged` | `-p` | 显示分页输出 | | `--all` | | 包含扩展名未知的文件(归入 `Other`) | | `--help` | `-h` | 显示帮助 | | `--version` | | 显示版本 | ### 输出示例 ``` ╭──────────────┬───────┬─────────────┬─────────────┬─────────────┬───────┬────────────────╮ │ Language │ Files │ Code │ Comment │ Blank │ Total │ Comment Health │ ├──────────────┼───────┼─────────────┼─────────────┼─────────────┼───────┼────────────────┤ │ C# │ 12 │ 840 ( 75%) │ 120 ( 11%) │ 160 ( 14%) │ 1,120 │ ■ Good │ │ XML │ 3 │ 45 ( 76%) │ 6 ( 10%) │ 8 ( 14%) │ 59 │ — │ │ │ │ │ │ │ │ │ │ Total │ 15 │ 885 ( 75%) │ 126 ( 11%) │ 168 ( 14%) │ 1,179 │ — │ ╰──────────────┴───────┴─────────────┴─────────────┴─────────────┴───────┴────────────────╯ ``` 使用 `--by-file` 选项(按文件树形展示): ``` ╭───────────────────────────┬──────────┬─────────────┬─────────────┬─────────────┬───────┬────────────────╮ │ File │ Language │ Code │ Comment │ Blank │ Total │ Comment Health │ ├───────────────────────────┼──────────┼─────────────┼─────────────┼─────────────┼───────┼────────────────┤ │ ├── 📁 Cli │ │ │ │ │ │ │ │ │ ├── AnalyzeHandler.cs │ C# │ 68 ( 76%) │ 12 ( 13%) │ 9 ( 10%) │ 89 │ ■ Good │ │ │ └── Program.cs │ C# │ 34 ( 83%) │ 3 ( 7%) │ 4 ( 10%) │ 41 │ ■ Fair │ │ └── 📁 Core │ │ │ │ │ │ │ │ ├── Analyzer.cs │ C# │ 120 ( 75%) │ 20 ( 13%) │ 20 ( 13%) │ 160 │ ■ Good │ │ └── Models.cs │ C# │ 80 ( 74%) │ 12 ( 11%) │ 16 ( 15%) │ 108 │ ■ Good │ │ │ │ │ │ │ │ │ │ Total │ 4 │ 302 ( 76%) │ 47 ( 12%) │ 49 ( 12%) │ 398 │ — │ ╰───────────────────────────┴──────────┴─────────────┴─────────────┴─────────────┴───────┴────────────────╯ ``` ## 支持的语言 C#、C/C++、Java、Kotlin、Swift、JavaScript、TypeScript、Python、Go、Rust、PHP、Ruby、F#、Visual Basic、SQL、PowerShell、Shell、YAML、JSON、HTML、XML、CSS、SCSS/Less。 ## 从源码构建 ``` # 还原与构建 dotnet build # 运行测试 dotnet test # 打包为 NuGet 工具包(输出到 ./nupkg) dotnet pack src/Sloc.Cli/Sloc.Cli.csproj -c Release -o ./nupkg # 从本地包安装并验证 dotnet tool install --global --add-source ./nupkg Sloc sloc ./src ``` ## 已知限制 - 不解析字符串字面量,因此出现在字符串内部的注释符号(例如 `"// 这不是注释"`)可能被误判。 - 行的分类基于注释符号的文本匹配,不进行完整的词法分析。 ## 许可证 本项目基于 [MIT 许可证](https://opensource.org/licenses/MIT) 发布。
标签:SOC Prime, 云安全监控, 代码统计, 代码质量分析, 开发工具, 文档结构分析, 静态分析