paline 0.4.2

一个用 Rust 编写的代码行数统计命令行工具。递归扫描目录,按编程语言统计行数,并以彩色横向条形图在终端中可视化展示。
<div align="center">
  <img src="docs/assets/icon.png" alt="paline " width="200">
</div>

# <center> paline </center>

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![rustc](https://img.shields.io/badge/rustc-1.90+-blue.svg)](https://www.rust-lang.org)

> 一个快速统计代码行数的命令行工具。递归扫描目录,按编程语言统计行数,并在终端中以彩色横向条形图直观展示各语言的行数占比。

<img src="docs/assets/运行示例.gif" alt="运行示例">

## 特性

- 递归扫描目录,自动跳过 `.gitignore` 中忽略的文件与隐藏文件
- 根据扩展名识别多种常见编程语言 / 标记语言(C/C++、Python、Java、Go、Rust、JS/TS、Shell 等)
- 基于 `rayon` 并行统计,大项目速度快
- 彩色条形图 + 语言图例,占比一目了然
- 支持 `-vv` 逐文件调试日志


## 快速开始
```bash
git clone https://github.com/luxpapilio/paline.git
cd paline && cargo build --release
```

### 使用

```bash
# 统计当前目录(默认)
paline stats

# 统计指定目录
paline stats -p /path/to/project

# 输出调试日志(-vv 显示逐文件追踪)
paline stats -vv

# 统计当前 git 仓库某个 Commit
paline stats -c eaece83c2369440d9a321080deb034acf08cd115

# 对比 base commit 与当前工作树的净变化
paline diff --base eaece83c2369440d9a321080deb034acf08cd115

# 对比两个 commit 的净变化
paline diff --base eaece83c2369440d9a321080deb034acf08cd115 --target b87ed48c2369440d9a321080deb034acf08cd115
```

### 命令行参数

| 参数 | 说明 |
| --- | --- |
| `stats [OPTIONS]` | 统计目录或指定 commit 的行数 `-c --commit <commit hash>` 参数表示要统计的 commit 的 hash |
| `diff --base <commit> [--target <commit\|WORKTREE>]` | 对比 `base` commit 与 `target` 的净变化,`target` 默认为 `WORKTREE`(当前工作树),也可以是另一个 commit hash |
| `-p, --path <PATH>` | 要统计的文件或目录,默认为 `.`(当前目录) |
| `-v, --verbose` | 输出 debug 日志,`-vv` 显示逐文件追踪 |
| `-h, --help` | 显示帮助信息 |
| `-V, --version` | 显示版本号 |

## 行数统计规则

> - 按换行符 `\n` 计数  
> - 文件末尾缺少换行符时补计一行  
> - 空文件计 0 行

## 贡献
欢迎提交 Issue 和 Pull Request!  
请确保代码通过 `cargo fmt`。

## 许可

MIT ,详见 [LICENSE](LICENSE)。