funlog 0.2.1

A procedural macro for tracing Rust function calls
Documentation
# Funlog 错误处理改进

本文档描述了 funlog 宏的错误处理改进,旨在提供更人性化的错误提示。

## 改进概述

### 1. 中文错误信息
- 所有错误信息都提供了中文描述
- 使用更友好的语言而不是技术术语

### 2. 具体的错误建议
- 每个错误都包含 💡 提示,告诉用户如何修复
- 提供正确的用法示例

### 3. 智能拼写建议
- 当用户输入错误的属性名时,系统会建议相似的正确属性
- 使用编辑距离算法来找到最相似的选项

### 4. 冲突检测
- 检测并报告配置冲突(如同时使用多个日志级别)
- 明确指出哪些选项不能同时使用

## 错误类型和示例

### 1. 重复配置错误

**错误代码:**
```rust
#[funlog(debug, info)]
fn test() {}
```

**错误信息:**
```
funlog 配置冲突: 'debug' 和 'info' 不能同时使用
💡 提示: 请选择其中一个选项
```

### 2. 无效参数错误

**错误代码:**
```rust
#[funlog(params(nonexistent))]
fn test(existing: i32) {}
```

**错误信息:**
```
funlog 参数错误: 参数 'nonexistent' 不存在
💡 提示: 可用的参数有: existing
   正确用法: #[funlog(params(existing))]
```

### 3. 拼写错误建议

**错误代码:**
```rust
#[funlog(debgu)]
fn test() {}
```

**错误信息:**
```
funlog 配置错误: 未知的配置选项 'debgu'
💡 提示: 你是想使用 'debug' 吗?
📖 可用的配置选项:
   日志级别: print, trace, debug, info, warn, error
   参数控制: all, none, params(参数名...)
   位置控制: onStart, onEnd, onStartEnd
   返回值: retVal
```

### 4. 参数配置冲突

**错误代码:**
```rust
#[funlog(all, none)]
fn test(a: i32) {}
```

**错误信息:**
```
funlog 配置冲突: 'all' 和 'none' 不能同时使用
💡 提示: 请选择其中一个选项
```

### 5. 语法错误建议

**错误代码:**
```rust
#[funlog(param(a))]
fn test(a: i32) {}
```

**错误信息:**
```
funlog 配置错误: 未知的配置选项 'param(...)'
💡 提示: 你是想使用 'params' 吗?
```

## 技术实现

### 1. 错误类型扩展
- 扩展了 `ConfigError` 枚举,添加了更多具体的错误类型
- 每个错误类型都包含必要的上下文信息

### 2. 智能建议算法
- 实现了编辑距离算法来计算字符串相似度
- 当用户输入错误时,自动建议最相似的正确选项

### 3. 冲突检测机制
- 在解析配置时跟踪所有设置的选项
- 检测并报告不兼容的配置组合

### 4. 上下文感知错误
- 错误信息包含函数的参数信息
- 根据具体情况提供定制化的建议

## 使用建议

### 对于用户
1. 仔细阅读错误信息中的 💡 提示
2. 参考提供的正确用法示例
3. 检查拼写是否正确
4. 避免使用冲突的配置选项

### 对于开发者
1. 错误信息设计要考虑用户体验
2. 提供具体的修复建议而不是模糊的描述
3. 使用用户熟悉的语言而不是技术术语
4. 在可能的情况下提供自动修复建议

## 测试

可以通过以下方式测试错误处理:

```bash
# 查看错误示例(会编译失败,这是预期的)
cargo check --example error_examples

# 运行正确的测试
cargo test error_message_tests
```

## 未来改进

1. **更智能的建议**:基于上下文提供更准确的建议
2. **自动修复**:在某些情况下提供自动修复选项
3. **多语言支持**:支持更多语言的错误信息
4. **IDE 集成**:提供更好的 IDE 集成和错误高亮