merge-code 0.1.0

A CLI tool for merging multiple code files into a signle file
# me: Merge My Code

## 功能特性

- **多目录支持**:同时合并多个目录中的文件
- **智能过滤**:按扩展名、文件大小进行筛选
- **多种输出格式**:支持纯文本、Markdown、JSON格式
- **预览模式**:查看将要处理的文件列表而不实际合并
- **灵活配置**:支持严格大小写匹配、符号链接跟随
- **详细日志**:多级别日志输出,方便调试
- **可选功能**:支持排除模式、十六进制输出等可选特性

## 安装

### 从 Cargo 安装(推荐)

```bash
cargo install me
```

### 从源码安装

```bash
git clone https://github.com/YOUR_USERNAME/me.git
cd me
cargo install --path .
```

## 快速开始

### 基础用法

```bash
# 合并当前目录下所有支持的文件到 result.txt
me .

# 合并多个目录
me ./src,./tests,./examples

# 指定输出文件名
me . -o combined.txt
```

### 预览模式(不实际合并)

```bash
# 查看将要处理的文件列表
me . --preview

# 预览多个目录
me ./src,./tests --preview
```

## 高级用法

### 文件过滤

```bash
# 只合并特定扩展名的文件
me . -e rs,toml,md

# 启用严格大小写匹配
me . -e RS,Toml --strict-case

# 限制文件大小(KB)
me . --max-file-size 1024  # 只处理小于1MB的文件
```

### 输出格式

```bash
# Markdown 格式(适合文档生成)
me . --format markdown -o code.md

# JSON 格式(适合程序处理)
me . --format json -o metadata.json

# 纯文本格式(默认)
me . --format plain-text -o code.txt
```

### 符号链接处理

```bash
# 跟随符号链接
me . --follow-links
```

### 详细输出

```bash
# 不同级别的详细输出
me . -v      # 警告级别日志
me . -vv     # 信息级别日志
me . -vvv    # 调试级别日志
me . -vvvv   # 跟踪级别日志(包含文件名和行号)
```

## 输出示例

### Markdown 格式输出

```markdown
## ./src/main.rs
```rust
use clap::Parser;

mod cli;
mod merge;

fn main() {
    // ...
}
```

### JSON 格式输出

```json
[
  {
    "path": "./src/main.rs",
    "content": [
        "use clap::Parser;",
        "",
        "mod cli;",
        "mod merge;",
        "",
        "fn main() {",
        "    // ...",
        "}",
    ]
  }
]
```

### 纯文本格式输出

```
FILE: ./src/main.rs
============================================================
use clap::Parser;

mod cli;
mod merge;

fn main() {
    // ...
}
```

## 命令行选项

```
USAGE:
    me [OPTIONS] <DIRECTORIES>...

ARGS:
    <DIRECTORIES>...
            要处理的目录(逗号分隔或重复指定)
            例如: me ./src 或 me ./src,./tests

OPTIONS:
    -e, --extensions <EXTENSIONS>
            包含的文件扩展名(逗号分隔) [默认值: rs,toml,html,css,js,json,yaml,yml,xml]
            可以多次使用: -e rs,toml -e md,json

    -f, --format <FORMAT>
            输出格式 [默认值: plain-text] [可选值: plain-text, markdown, json]

    -h, --help
            显示帮助信息

    -o, --output <OUTPUT>
            输出文件路径 [默认值: result.txt]

    -p, --preview
            预览模式:只显示将要处理的文件列表,不实际合并

    -v, --verbose...
            增加详细程度(使用多次以获得更多细节)
            -v: 警告级别 -vv: 信息级别 -vvv: 调试级别 -vvvv: 跟踪级别

    -V, --version
            显示版本信息

        --strict-case
            严格匹配文件扩展名的大小写

        --max-file-size <MAX_FILE_SIZE>
            最大文件大小限制(KB,0表示无限制) [默认值: 0]

        --follow-links
            跟随符号链接

        --allow-hex <ALLOW_HEX>    [可选功能]
            将二进制文件转换为十六进制字符串(值表示每行最大长度,0表示不限制)
```

## 故障排除

### 常见问题

1. **文件编码问题**
   ```
   警告:不是 UTF-8 编码的文件
   ```
   该警告表示文件可能包含非文本内容或使用不同的编码。使用 `--allow-hex` 特性可以处理这类文件。

2. **文件大小限制**
   使用 `--max-file-size` 参数限制处理的最大文件大小,避免处理过大的文件。

3. **权限问题**
   确保对要读取的目录和文件有适当的读取权限。

### 调试信息

使用不同级别的 `-v` 标志获取更多调试信息:

```bash
# 查看详细的处理过程
me . -vvv

# 查看最详细的跟踪信息(包括文件名和行号)
me . -vvvv
```

## 贡献

欢迎贡献代码!请遵循以下步骤:

1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 打开 Pull Request

---

**提示**:使用 `me --help` 查看完整的命令行选项和用法说明。