142 个版本 (89 个稳定版)
1.0.89 | 2024 年 7 月 31 日 |
---|---|
1.0.85 | 2024 年 4 月 19 日 |
1.0.81 | 2024 年 3 月 29 日 |
1.0.78 | 2023 年 12 月 30 日 |
0.1.2 | 2016 年 6 月 9 日 |
在 Cargo 插件 中排名 26
每月下载量 48,155 次
在 4 个 crate 中使用
54KB
1K SLoC
cargo-expand
安装后,以下命令将打印出当前 crate 应用的宏展开和 #[derive]
展开的结果。
$ cargo expand
这是对更冗长的编译器命令的包装
$ cargo rustc --profile=check -- -Zunpretty=expanded
安装
使用 cargo install cargo-expand
安装。
此命令可选地使用 rustfmt 格式化展开后的输出。结果代码通常比编译器生成的代码更易读。如果 rustfmt 不可用,则展开的代码不会格式化。使用 rustup component add rustfmt
安装 rustfmt。
Cargo expand 依赖于不稳定的编译器标志,因此需要安装 nightly 工具链,尽管不需要将其作为默认工具链或执行 cargo expand 的工具链。如果默认工具链不是 nightly,运行 cargo expand
也会找到并使用 nightly。
示例
$ cat src/main.rs
#[derive(Debug)]
struct S;
fn main() {
println!("{:?}", S);
}
$cargo expand
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std;
struct S;
#[automatically_derived]
#[allow(unused_qualifications)]
impl ::core::fmt::Debug for S {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match *self {
S => {
let mut debug_trait_builder = f.debug_tuple("S");
debug_trait_builder.finish()
}
}
}
}
fn main() {
{
::std::io::_print(::core::fmt::Arguments::new_v1(
&["", "\n"],
&match (&S,) {
(arg0,) => [::core::fmt::ArgumentV1::new(arg0, ::core::fmt::Debug::fmt)],
},
));
};
}
选项
查看 cargo expand --help
以获取完整的选项列表,其中大多数与其他 Cargo 子命令保持一致。以下是一些在 cargo expand 上下文中常用的选项。
展开特定的测试目标
$cargo expand --测试测试_something
不使用rustfmt进行展开
$cargo expand --难看
仅展开特定的模块、类型或函数
$cargo expand path::to::module
配置
cargo expand 命令会读取 $CARGO_HOME/config.toml 文件中的 [expand] 部分(通常是 ~/.cargo/config.toml),如果存在的话。
使用 theme
设置来设置默认的语法高亮主题
[expand]
theme = "TwoDark"
运行 cargo expand --themes
来打印可用主题列表。使用 theme = "none"
来禁用颜色。
使用 color
设置来更改默认的颜色显示设置(通常是 auto
)
[expand]
color = "always"
使用 pager
设置来启用输出分页
[expand]
pager = true
免责声明
请注意,宏展开到文本是一个有损的过程。这仅是一个调试辅助工具。不应期望展开后的代码能够成功编译,或者如果编译成功,则其行为与原始代码相同。
例如,以下函数在通过Rust常规编译时返回 3
,但展开后的代码编译并返回 4
。
fn f() -> i32 {
let x = 1;
macro_rules! first_x {
() => { x }
}
let x = 2;
x + first_x!()
}
有关宏卫生的更多考虑,请参阅《The Book》。
许可
根据您的选择,此软件受Apache License, Version 2.0或MIT许可的许可。除非您明确声明,否则根据Apache-2.0许可证定义,您提交给此crate的任何有意贡献都应如上所述双许可,不附加任何额外条款或条件。
依赖
~17–29MB
~456K SLoC