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 在 开发工具
每月862次 下载
31KB
564 行
rustc-tools
一些内部rustc工具可通过封装设置部分使其可访问
API文档可在 此处 查找。
版本号遵循官方Rust版本号。因此,版本 0.78
意味着它与Rust 1.78
相当。
我为什么需要这个crate?
如果您需要编写Rust编译器插件(clippy
和 rustdoc
是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开发者指南,并查看编译器文档(特别是TyCtxt
和Map
类型,它们都是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