diff options
author | bors <bors@rust-lang.org> | 2023-03-16 13:46:52 +0000 |
---|---|---|
committer | bors <bors@rust-lang.org> | 2023-03-16 13:46:52 +0000 |
commit | 1203e0866e6c3659775efcb8aecad21dc13ef38b (patch) | |
tree | 649280a25f8efd4058120de4a4e104959b83e3f4 /tests/codegen/src-hash-algorithm/src-hash-algorithm-sha1.rs | |
parent | 7ac4b82ddd596a218cac8cd6b88a91b54fcdcf13 (diff) | |
parent | a08016514847d39ae3096ff41f98759abf59bee8 (diff) | |
download | rust-1203e0866e6c3659775efcb8aecad21dc13ef38b.tar.gz |
Auto merge of #106824 - m-ou-se:format-args-flatten, r=oli-obk
Flatten/inline format_args!() and (string and int) literal arguments into format_args!()
Implements https://github.com/rust-lang/rust/issues/78356
Gated behind `-Zflatten-format-args=yes`.
Part of #99012
This change inlines string literals, integer literals and nested format_args!() into format_args!() during ast lowering, making all of the following pairs result in equivalent hir:
```rust
println!("Hello, {}!", "World");
println!("Hello, World!");
```
```rust
println!("[info] {}", format_args!("error"));
println!("[info] error");
```
```rust
println!("[{}] {}", status, format_args!("error: {}", msg));
println!("[{}] error: {}", status, msg);
```
```rust
println!("{} + {} = {}", 1, 2, 1 + 2);
println!("1 + 2 = {}", 1 + 2);
```
And so on.
This is useful for macros. E.g. a `log::info!()` macro could just pass the tokens from the user directly into a `format_args!()` that gets efficiently flattened/inlined into a `format_args!("info: {}")`.
It also means that `dbg!(x)` will have its file, line, and expression name inlined:
```rust
eprintln!("[{}:{}] {} = {:#?}", file!(), line!(), stringify!(x), x); // before
eprintln!("[example.rs:1] x = {:#?}", x); // after
```
Which can be nice in some cases, but also means a lot more unique static strings than before if dbg!() is used a lot.
Diffstat (limited to 'tests/codegen/src-hash-algorithm/src-hash-algorithm-sha1.rs')
0 files changed, 0 insertions, 0 deletions