This is a wrapper around cargo rustc -- --pretty=expanded
. Once installed, the
command cargo expand
prints out the result of macro expansion and #[derive]
expansion applied to the current crate.
Install with cargo install cargo-expand
.
This command optionally uses
rustfmt
to format the expanded output. If rustfmt
is not available, the expanded code
is not formatted. Install rustfmt
with cargo install rustfmt
. (Note:
rustfmt
is temporarily disabled due to
rust-lang/rust#38016.)
$ cat src/main.rs
rust fn main() { println!("Hello, world!"); }
$ cargo expand
```rust
![feature(prelude_import)]
use std::prelude::v1::*;
extern crate std as std; fn main() { ::std::io::print(::std::fmt::Arguments::newv1({ static _STATICFMTSTR: &'static [&'static str] = &["Hello, world!\n"]; _STATICFMTSTR }, &match () { () => [], })); } ```
To expand a particular test target:
$ cargo expand --test test_something
To expand with rustfmt
different from the one in $PATH
:
$ RUSTFMT=/path/to/rustfmt cargo expand
To expand without rustfmt
even though it is available in $PATH
:
$ RUSTFMT= cargo expand
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in cargo-expand by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.