Project Icon

ariadne

Rust编译器诊断库 提升开发效率

Ariadne是一个Rust编译器诊断库,支持多行标签、多文件错误处理和自定义跨度。该库提供彩色标签、高亮显示和标签优先级功能,能够处理变宽字符。Ariadne包含紧凑模式和重叠处理算法,与concolor库集成,为开发者提供实用的错误报告工具。

Ariadne

crates.io crates.io 许可证 actions-徽章

一个精美的编译器诊断crate。

示例

Ariadne支持任意多行跨度
fn main() {
    use ariadne::{Color, ColorGenerator, Fmt, Label, Report, ReportKind, Source};

    let mut colors = ColorGenerator::new();

    // 为每个元素生成并选择一些颜色
    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!("类型不兼容"))
        .with_label(
            Label::new(("sample.tao", 32..33))
                .with_message(format!("这是 {} 类型", "Nat".fg(a)))
                .with_color(a),
        )
        .with_label(
            Label::new(("sample.tao", 42..45))
                .with_message(format!("这是 {} 类型", "Str".fg(b)))
                .with_color(b),
        )
        .with_label(
            Label::new(("sample.tao", 11..48))
                .with_message(format!(
                    "这些值是此 {} 表达式的输出",
                    "match".fg(out),
                ))
                .with_color(out),
        )
        .with_note(format!(
            "{} 表达式的输出必须强制转换为相同的类型",
            "match".fg(out)
        ))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}

更多示例请参见 examples/

使用方法

对于每个你想要报告的错误:

  • 调用 Report::build() 创建一个 ReportBuilder
  • 使用各种方法为错误分配适当的细节,然后调用 finish 方法得到一个 Report
  • 对于每个 Report,调用 printeprint 直接将报告写入 stdoutstderr。或者,你可以使用 write 将报告发送到任何其他 Write 目标(如文件)。

关于

ariadnechumsky 的姐妹项目。它们互不依赖,但我同时在开发这两个项目,并认为它们的功能相辅相成。如果你正考虑使用 ariadne 处理编译器的输出,为什么不尝试使用 chumsky 来处理输入呢?

特性

  • 能够处理任意跨度配置的内联和多行标签
  • 多文件错误处理
  • 适用于自定义跨度和文件缓存的泛型
  • 提供多种字符集选择以确保兼容性
  • 带有8位和24位颜色支持的彩色标签和高亮(感谢 yansi
  • 标签优先级和排序
  • 用于较小诊断的紧凑模式
  • 正确处理变宽字符,如制表符
  • ColorGenerator 类型,用于为视觉元素生成不同的颜色
  • 大量其他选项(制表符宽度、标签附着点、下划线等)
  • 内置的排序/重叠启发式算法,找出避免重叠和标签交叉的最佳方式

Cargo 特性

  • "concolor" 启用与 concolor crate 的集成,用于全局控制应用程序的颜色输出
  • "auto-color" 启用 concolor"auto" 特性,用于自动颜色控制

concolor 的特性应由顶层二进制 crate 定义,但如果不启用任何特性,concolor 不会执行任何操作。如果 ariadne 是你唯一使用 concolor 的依赖项,那么 "auto-color" 提供了一个方便的方式来启用 concolor 的自动颜色支持检测,即:

[dependencies]
ariadne = { version = "...", features = ["auto-color"] }

等同于:

[dependencies]
ariadne = { version = "...", features = ["concolor"] }
concolor = { version = "...", features = ["auto"] }

计划中的特性

  • 改进布局规划和空间利用
  • 非ANSI终端支持
  • 更多无障碍选项(屏幕阅读器友好模式、作为颜色替代的纹理高亮等)
  • 更多颜色选项
  • 更好地支持布局限制(例如,最大终端宽度)

稳定性

API(应该)遵循 semver。然而,这不适用于最终错误消息的布局。对内部布局启发式算法的微小调整通常会导致错误消息的确切格式发生变化,标签可能会略有移动。如果你遇到了你认为是退化的布局变化(变化不正确,或使你的诊断更难阅读),请开一个 issue。

致谢

感谢:

  • @brendanzab 为他们美丽的 codespan crate,它激发了我尝试推动错误诊断的极限。

  • @estebank 通过他们在 Rust 上的工作,向无数人展示了编译器诊断可以有多好。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号