diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-05-17 01:51:30 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-17 01:51:30 +0200 |
| commit | fc91043d243ec98cc9d5fb028a14f77a7d90f92b (patch) | |
| tree | 60fa0fe1c882d18e698150cd1f4af8e9ec2b6772 /src/libproc_macro | |
| parent | dd927a5b0f29342f7ad919fb52ca29510d2e7362 (diff) | |
| parent | bea2c59ea56cb3daa7e3bacabd7c95f002f9aca0 (diff) | |
| download | rust-fc91043d243ec98cc9d5fb028a14f77a7d90f92b.tar.gz rust-fc91043d243ec98cc9d5fb028a14f77a7d90f92b.zip | |
Rollup merge of #72233 - dtolnay:literal, r=petrochenkov
Fix {:#?} representation of proc_macro::Literal
Before:
```rust
TokenStream [
Ident {
ident: "name",
span: #0 bytes(37..41),
},
Punct {
ch: '=',
spacing: Alone,
span: #0 bytes(42..43),
},
Literal { lit: Lit { kind: Str, symbol: "SNPP", suffix: None }, span: Span { lo: BytePos(44), hi: BytePos(50), ctxt: #0 } },
Punct {
ch: ',',
spacing: Alone,
span: #0 bytes(50..51),
},
Ident {
ident: "owner",
span: #0 bytes(56..61),
},
Punct {
ch: '=',
spacing: Alone,
span: #0 bytes(62..63),
},
Literal { lit: Lit { kind: Str, symbol: "Canary M Burns", suffix: None }, span: Span { lo: BytePos(64), hi: BytePos(80), ctxt: #0 } },
]
```
After:
```rust
TokenStream [
Ident {
ident: "name",
span: #0 bytes(37..41),
},
Punct {
ch: '=',
spacing: Alone,
span: #0 bytes(42..43),
},
Literal {
kind: Str,
symbol: "SNPP",
suffix: None,
span: #0 bytes(44..50),
},
Punct {
ch: ',',
spacing: Alone,
span: #0 bytes(50..51),
},
Ident {
ident: "owner",
span: #0 bytes(56..61),
},
Punct {
ch: '=',
spacing: Alone,
span: #0 bytes(62..63),
},
Literal {
kind: Str,
symbol: "Canary M Burns",
suffix: None,
span: #0 bytes(64..80),
},
]
```
Diffstat (limited to 'src/libproc_macro')
| -rw-r--r-- | src/libproc_macro/bridge/client.rs | 10 | ||||
| -rw-r--r-- | src/libproc_macro/bridge/mod.rs | 5 | ||||
| -rw-r--r-- | src/libproc_macro/lib.rs | 1 |
3 files changed, 11 insertions, 5 deletions
diff --git a/src/libproc_macro/bridge/client.rs b/src/libproc_macro/bridge/client.rs index d2222d12623..283aa25b0ea 100644 --- a/src/libproc_macro/bridge/client.rs +++ b/src/libproc_macro/bridge/client.rs @@ -202,10 +202,16 @@ impl Clone for Literal { } } -// FIXME(eddyb) `Literal` should not expose internal `Debug` impls. impl fmt::Debug for Literal { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(&self.debug()) + f.debug_struct("Literal") + // format the kind without quotes, as in `kind: Float` + .field("kind", &format_args!("{}", &self.debug_kind())) + .field("symbol", &self.symbol()) + // format `Some("...")` on one line even in {:#?} mode + .field("suffix", &format_args!("{:?}", &self.suffix())) + .field("span", &self.span()) + .finish() } } diff --git a/src/libproc_macro/bridge/mod.rs b/src/libproc_macro/bridge/mod.rs index a0e7d90f497..bf0d8fcee5b 100644 --- a/src/libproc_macro/bridge/mod.rs +++ b/src/libproc_macro/bridge/mod.rs @@ -103,8 +103,9 @@ macro_rules! with_api { Literal { fn drop($self: $S::Literal); fn clone($self: &$S::Literal) -> $S::Literal; - // FIXME(eddyb) `Literal` should not expose internal `Debug` impls. - fn debug($self: &$S::Literal) -> String; + fn debug_kind($self: &$S::Literal) -> String; + fn symbol($self: &$S::Literal) -> String; + fn suffix($self: &$S::Literal) -> Option<String>; fn integer(n: &str) -> $S::Literal; fn typed_integer(n: &str, kind: &str) -> $S::Literal; fn float(n: &str) -> $S::Literal; diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs index b6544341fa9..f11401b5a0c 100644 --- a/src/libproc_macro/lib.rs +++ b/src/libproc_macro/lib.rs @@ -1141,7 +1141,6 @@ impl fmt::Display for Literal { #[stable(feature = "proc_macro_lib2", since = "1.29.0")] impl fmt::Debug for Literal { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - // FIXME(eddyb) `Literal` should not expose internal `Debug` impls. self.0.fmt(f) } } |
