11个版本
2.0.0 |
|
---|---|
0.4.1 | 2024年4月25日 |
0.4.0 | 2024年1月1日 |
0.3.0 | 2023年6月7日 |
0.1.3 | 2021年7月29日 |
#4 in 编程语言
每月 77,863 次下载
用于 170 个 库(81 个直接使用)
105KB
2K SLoC
阿里阿德涅
一个华丽的编译器诊断库。
示例
fn main() {
use ariadne::{Color, ColorGenerator, Fmt, Label, Report, ReportKind, Source};
let mut colors = ColorGenerator::new();
// Generate & choose some colours for each of our elements
let a = colors.next();
let b = colors.next();
let out = Color::Fixed(81);
Report::build(ReportKind::Error, "sample.tao", 12)
.with_code(3)
.with_message(format!("Incompatible types"))
.with_label(
Label::new(("sample.tao", 32..33))
.with_message(format!("This is of type {}", "Nat".fg(a)))
.with_color(a),
)
.with_label(
Label::new(("sample.tao", 42..45))
.with_message(format!("This is of type {}", "Str".fg(b)))
.with_color(b),
)
.with_label(
Label::new(("sample.tao", 11..48))
.with_message(format!(
"The values are outputs of this {} expression",
"match".fg(out),
))
.with_color(out),
)
.with_note(format!(
"Outputs of {} expressions must coerce to the same type",
"match".fg(out)
))
.finish()
.print(("sample.tao", Source::from(include_str!("sample.tao"))))
.unwrap();
}
更多示例,请参阅 examples/
。
使用方法
对于您希望报告的每个错误
- 调用
Report::build()
创建一个ReportBuilder
。 - 使用各种方法分配适当的错误细节,然后调用
finish
方法以获取一个Report
。 - 对于每个
Report
,调用print
或eprint
将报告直接写入stdout
或stderr
。或者,您可以使用write
将报告发送到任何其他Write
目的地(例如文件)。
关于
ariadne
是 chumsky
的姐妹项目。两者互不依赖,但我正在同时进行这两个项目,并希望它们的特性能够互补。如果您打算使用 ariadne
来处理编译器的输出,为什么不尝试使用 chumsky
来处理其输入呢?
特性
- 支持任意跨度配置的内联和多行标签
- 支持多文件错误
- 通用于自定义跨度和文件缓存
- 可选字符集以确保兼容性
- 支持8位和24位颜色的彩色标签和突出显示(感谢
yansi
) - 标签优先级和排序
- 紧凑模式以减小诊断的大小
- 正确处理可变宽度字符,如制表符
- 一个
ColorGenerator
类型,用于为视觉元素生成不同的颜色。 - 其他许多选项(制表符宽度、标签附着点、下划线等)
- 内置的排序/重叠启发式算法,以最佳方式避免重叠和标签交叉
货物特性
"concolor"
允许与concolor
包集成,以实现应用程序全局颜色输出的控制"auto-color"
启用concolor
的"auto"
功能,实现自动颜色控制
concolor
的功能应由顶级二进制包定义,但如果没有启用任何功能,concolor
不会做任何事情。如果 ariadne
是您唯一使用 concolor
的依赖项,则 "auto-color"
提供了启用 concolor
自动颜色支持检测的便利性,即这
[dependencies]
ariadne = { version = "...", features = ["auto-color"] }
等同于这
[dependencies]
ariadne = { version = "...", features = ["concolor"] }
concolor = { version = "...", features = ["auto"] }
计划中的功能
- 改进布局规划和空间使用
- 非 ANSI 终端支持
- 更多可访问性选项(屏幕阅读器友好模式、作为颜色替代的纹理高亮等)
- 更多颜色选项
- 更好地支持布局限制(例如最大终端宽度)
稳定性
API(应该)遵循 semver。然而,这并不适用于最终错误消息的布局。对内部布局启发式算法的微小调整通常会随着标签的轻微移动而导致错误消息的确切格式发生变化。如果您遇到认为是回归的布局更改(更改是不正确的,或者使您的诊断更难阅读),请提出问题。
信用
感谢
-
@brendanzab
提供了他们美丽的codespan
包,这启发我尝试推动错误诊断的极限。 -
@estebank
通过他们在 Rust 上的工作,向无数人展示了编译器诊断可以有多好。
依赖关系
~470KB