#rustc #setup #documentation #accessible #version

nightly rustc-tools

一些内部rustc工具可通过封装设置部分使其可访问

12个不稳定版本 (4个破坏性更新)

0.80.0 2024年8月7日
0.78.1 2024年6月29日
0.3.3 2024年1月17日
0.3.1 2023年11月23日
0.1.2 2023年3月9日

#639开发工具

Download history 93/week @ 2024-05-27 55/week @ 2024-06-03 7/week @ 2024-06-10 213/week @ 2024-06-24 51/week @ 2024-07-01 34/week @ 2024-07-08 163/week @ 2024-07-15 208/week @ 2024-07-22 300/week @ 2024-07-29 250/week @ 2024-08-05 96/week @ 2024-08-12

每月862次 下载

MIT 许可证

31KB
564

rustc-tools

一些内部rustc工具可通过封装设置部分使其可访问

API文档可在 此处 查找。

版本号遵循官方Rust版本号。因此,版本 0.78 意味着它与Rust 1.78 相当。

我为什么需要这个crate?

如果您需要编写Rust编译器插件(clippyrustdoc 是Rust插件可以实现功能的良好示例),则需要许多设置才能使用其API。此crate旨在消除这个痛点,这样您就可以花更多时间在插件上。

如何使用它?

因为它提供并使用 rustc API,所以它只适用于Rust编译器的特定nightly版本。将 rust-toolchain 文件复制到您的项目中。

还需要另一件事:您需要在您的crate中添加 #![feature(rustc_private),以便能够使用 rustc_tools

完成这些后,就完成了!

全局说明

在Rust编译器中,有多种级别来处理API。您越往底层走,您拥有的信息就越多。以下是非常简化的解释

首先,您有 lexer。它是一个迭代器,遍历一个字符串(源代码文件)并尝试将其解析为Rust代码。它不做其他任何事情,比如尝试遵循模块声明或任何其他内容,它只生成语法信息。

然后,你有更详细信息的 ast,它对您正在阅读的内容进行分类。例如,您不再只有标记,而是有。在这个级别,您可以开始使用访问者,因为您已经有了一些很好的信息,如属性、可见性等。查看 examples/ast.rs 以查看示例。

本库覆盖的最终级别是 HIR(高级中间表示)。在宏展开和名称解析之后,您可以获得它。它旨在成为编译器友好的AST。因此,您可以使用它开始使用内部Rust编译器查询系统。

如果您想了解更多关于这些信息,我强烈建议您阅读rustc开发者指南,并查看编译器文档(特别是TyCtxtMap类型,它们都是HIR级别的中心)。

运行示例

examples文件夹中提供了一些示例。要运行它们

$ cargo run --example ast -- asset/example_file.rs
$ cargo run --example hir -- asset/example_file.rs
$ cargo run --example lint -- asset/example_file.rs

一个与cargo集成的更完整的示例在这里:这里

依赖项

~1.2–2.4MB
~46K SLoC