Skip to content

Commit 1d71237

Browse files
authoredJun 2, 2022
Rollup merge of #97636 - nnethercote:revert-96682, r=dtolnay
Revert #96682. The change was "Show invisible delimiters (within comments) when pretty printing". It's useful to show these delimiters, but is a breaking change for some proc macros. Fixes #97608. r? ``@petrochenkov``
2 parents f95e2d3 + 77e1069 commit 1d71237

17 files changed

+68
-110
lines changed
 

‎compiler/rustc_ast/src/token.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,11 @@ pub enum Delimiter {
5050
Brace,
5151
/// `[ ... ]`
5252
Bracket,
53-
/// `/*«*/ ... /*»*/`
53+
/// `Ø ... Ø`
5454
/// An invisible delimiter, that may, for example, appear around tokens coming from a
5555
/// "macro variable" `$var`. It is important to preserve operator priorities in cases like
5656
/// `$var * 3` where `$var` is `1 + 2`.
57-
/// Invisible delimiters are not directly writable in normal Rust code except as comments.
58-
/// Therefore, they might not survive a roundtrip of a token stream through a string.
57+
/// Invisible delimiters might not survive roundtrip of a token stream through a string.
5958
Invisible,
6059
}
6160

‎compiler/rustc_ast_pretty/src/pprust/state.rs

+5-18
Original file line numberDiff line numberDiff line change
@@ -590,28 +590,14 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
590590
self.nbsp();
591591
}
592592
self.word("{");
593-
let empty = tts.is_empty();
594-
if !empty {
593+
if !tts.is_empty() {
595594
self.space();
596595
}
597596
self.ibox(0);
598597
self.print_tts(tts, convert_dollar_crate);
599598
self.end();
600-
self.bclose(span, empty);
601-
}
602-
Some(Delimiter::Invisible) => {
603-
self.word("/*«*/");
604599
let empty = tts.is_empty();
605-
if !empty {
606-
self.space();
607-
}
608-
self.ibox(0);
609-
self.print_tts(tts, convert_dollar_crate);
610-
self.end();
611-
if !empty {
612-
self.space();
613-
}
614-
self.word("/*»*/");
600+
self.bclose(span, empty);
615601
}
616602
Some(delim) => {
617603
let token_str = self.token_kind_to_string(&token::OpenDelim(delim));
@@ -786,8 +772,9 @@ pub trait PrintState<'a>: std::ops::Deref<Target = pp::Printer> + std::ops::Dere
786772
token::CloseDelim(Delimiter::Bracket) => "]".into(),
787773
token::OpenDelim(Delimiter::Brace) => "{".into(),
788774
token::CloseDelim(Delimiter::Brace) => "}".into(),
789-
token::OpenDelim(Delimiter::Invisible) => "/*«*/".into(),
790-
token::CloseDelim(Delimiter::Invisible) => "/*»*/".into(),
775+
token::OpenDelim(Delimiter::Invisible) | token::CloseDelim(Delimiter::Invisible) => {
776+
"".into()
777+
}
791778
token::Pound => "#".into(),
792779
token::Dollar => "$".into(),
793780
token::Question => "?".into(),

‎library/proc_macro/src/lib.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -703,12 +703,11 @@ pub enum Delimiter {
703703
/// `[ ... ]`
704704
#[stable(feature = "proc_macro_lib2", since = "1.29.0")]
705705
Bracket,
706-
/// `/*«*/ ... /*»*/`
706+
/// `Ø ... Ø`
707707
/// An invisible delimiter, that may, for example, appear around tokens coming from a
708708
/// "macro variable" `$var`. It is important to preserve operator priorities in cases like
709709
/// `$var * 3` where `$var` is `1 + 2`.
710-
/// Invisible delimiters are not directly writable in normal Rust code except as comments.
711-
/// Therefore, they might not survive a roundtrip of a token stream through a string.
710+
/// Invisible delimiters might not survive roundtrip of a token stream through a string.
712711
#[stable(feature = "proc_macro_lib2", since = "1.29.0")]
713712
None,
714713
}

‎src/test/ui/proc-macro/auxiliary/expand-expr.rs

+8-21
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,6 @@ use std::str::FromStr;
1212

1313
#[proc_macro]
1414
pub fn expand_expr_is(input: TokenStream) -> TokenStream {
15-
expand_expr_is_inner(input, false)
16-
}
17-
18-
#[proc_macro]
19-
pub fn expand_expr_is_trim(input: TokenStream) -> TokenStream {
20-
expand_expr_is_inner(input, true)
21-
}
22-
23-
fn expand_expr_is_inner(input: TokenStream, trim_invisible: bool) -> TokenStream {
2415
let mut iter = input.into_iter();
2516
let mut expected_tts = Vec::new();
2617
loop {
@@ -31,18 +22,14 @@ fn expand_expr_is_inner(input: TokenStream, trim_invisible: bool) -> TokenStream
3122
}
3223
}
3324

34-
// If requested, trim the "invisible" delimiters at the start and end.
35-
let expected = expected_tts.into_iter().collect::<TokenStream>().to_string();
36-
let expected = if trim_invisible {
37-
let len1 = "/*«*/ ".len();
38-
let len2 = " /*»*/".len();
39-
&expected[len1..expected.len() - len2]
40-
} else {
41-
&expected[..]
42-
};
43-
let expanded = iter.collect::<TokenStream>().expand_expr().unwrap().to_string();
44-
45-
assert_eq!(expected, expanded);
25+
let expected = expected_tts.into_iter().collect::<TokenStream>();
26+
let expanded = iter.collect::<TokenStream>().expand_expr().expect("expand_expr failed");
27+
assert!(
28+
expected.to_string() == expanded.to_string(),
29+
"assert failed\nexpected: `{}`\nexpanded: `{}`",
30+
expected.to_string(),
31+
expanded.to_string()
32+
);
4633

4734
TokenStream::new()
4835
}

‎src/test/ui/proc-macro/capture-macro-rules-invoke.stdout

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
PRINT-BANG INPUT (DISPLAY): self
2-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ self /*»*/
32
PRINT-BANG INPUT (DEBUG): TokenStream [
43
Group {
54
delimiter: None,
@@ -14,10 +13,8 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
1413
]
1514
PRINT-BANG INPUT (DISPLAY): 1 + 1, { "a" }, let a = 1;, String, my_name, 'a, my_val = 30,
1615
std::option::Option, pub(in some::path) , [a b c], -30
17-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ 1 + 1 /*»*/, /*«*/ { "a" } /*»*/, /*«*/ let a = 1 /*»*/, /*«*/
18-
String /*»*/, my_name, /*«*/ 'a /*»*/, /*«*/ my_val = 30 /*»*/, /*«*/
19-
std :: option :: Option /*»*/, /*«*/ pub(in some :: path) /*»*/, [a b c],
20-
/*«*/ - 30 /*»*/
16+
PRINT-BANG RE-COLLECTED (DISPLAY): 1 + 1, { "a" }, let a = 1, String, my_name, 'a, my_val = 30,
17+
std :: option :: Option, pub(in some :: path), [a b c], - 30
2118
PRINT-BANG INPUT (DEBUG): TokenStream [
2219
Group {
2320
delimiter: None,
@@ -298,7 +295,6 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
298295
},
299296
]
300297
PRINT-BANG INPUT (DISPLAY): (a, b)
301-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ (a, b) /*»*/
302298
PRINT-BANG INPUT (DEBUG): TokenStream [
303299
Group {
304300
delimiter: None,

‎src/test/ui/proc-macro/capture-unglued-token.stdout

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PRINT-BANG INPUT (DISPLAY): Vec<u8>
2-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ Vec < u8 > /*»*/
2+
PRINT-BANG RE-COLLECTED (DISPLAY): Vec < u8 >
33
PRINT-BANG INPUT (DEBUG): TokenStream [
44
Group {
55
delimiter: None,

‎src/test/ui/proc-macro/expand-expr.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
extern crate expand_expr;
44

5-
use expand_expr::{check_expand_expr_file, echo_pm, expand_expr_fail, expand_expr_is};
6-
use expand_expr::{expand_expr_is_trim, recursive_expand};
7-
5+
use expand_expr::{
6+
check_expand_expr_file, echo_pm, expand_expr_fail, expand_expr_is, recursive_expand,
7+
};
88

99
// Check builtin macros can be expanded.
1010

@@ -47,21 +47,21 @@ macro_rules! echo_expr {
4747

4848
macro_rules! simple_lit {
4949
($l:literal) => {
50-
expand_expr_is_trim!($l, $l);
51-
expand_expr_is_trim!($l, echo_lit!($l));
52-
expand_expr_is_trim!($l, echo_expr!($l));
53-
expand_expr_is_trim!($l, echo_tts!($l));
54-
expand_expr_is_trim!($l, echo_pm!($l));
50+
expand_expr_is!($l, $l);
51+
expand_expr_is!($l, echo_lit!($l));
52+
expand_expr_is!($l, echo_expr!($l));
53+
expand_expr_is!($l, echo_tts!($l));
54+
expand_expr_is!($l, echo_pm!($l));
5555
const _: () = {
5656
macro_rules! mac {
5757
() => {
5858
$l
5959
};
6060
}
61-
expand_expr_is_trim!($l, mac!());
62-
expand_expr_is_trim!($l, echo_expr!(mac!()));
63-
expand_expr_is_trim!($l, echo_tts!(mac!()));
64-
expand_expr_is_trim!($l, echo_pm!(mac!()));
61+
expand_expr_is!($l, mac!());
62+
expand_expr_is!($l, echo_expr!(mac!()));
63+
expand_expr_is!($l, echo_tts!(mac!()));
64+
expand_expr_is!($l, echo_pm!(mac!()));
6565
};
6666
};
6767
}

‎src/test/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = #[allow(warnings)] 0 ; 0 }, }
2-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E
3-
{ V = { let _ = /*«*/ #[allow(warnings)] #[allow(warnings)] 0 /*»*/ ; 0 }, }
2+
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = #[allow(warnings)] #[allow(warnings)] 0 ; 0 }, }
43
PRINT-DERIVE INPUT (DEBUG): TokenStream [
54
Ident {
65
ident: "enum",
@@ -124,7 +123,7 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
124123
},
125124
]
126125
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = { 0; } ; 0 }, }
127-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { /*«*/ 0 /*»*/ } ; 0 }, }
126+
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { 0 } ; 0 }, }
128127
PRINT-DERIVE INPUT (DEBUG): TokenStream [
129128
Ident {
130129
ident: "enum",
@@ -204,7 +203,6 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
204203
},
205204
]
206205
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = { {} } ; 0 }, }
207-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { /*«*/ {} /*»*/ } ; 0 }, }
208206
PRINT-DERIVE INPUT (DEBUG): TokenStream [
209207
Ident {
210208
ident: "enum",
@@ -283,7 +281,7 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
283281
},
284282
]
285283
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = { PATH; } ; 0 }, }
286-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { /*«*/ PATH /*»*/ } ; 0 }, }
284+
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { PATH } ; 0 }, }
287285
PRINT-DERIVE INPUT (DEBUG): TokenStream [
288286
Ident {
289287
ident: "enum",
@@ -361,7 +359,7 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
361359
},
362360
]
363361
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = { 0 + 1; } ; 0 }, }
364-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { /*«*/ 0 + 1 /*»*/ } ; 0 }, }
362+
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { 0 + 1 } ; 0 }, }
365363
PRINT-DERIVE INPUT (DEBUG): TokenStream [
366364
Ident {
367365
ident: "enum",
@@ -452,7 +450,7 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
452450
},
453451
]
454452
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = { PATH + 1; } ; 0 }, }
455-
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { /*«*/ PATH + 1 /*»*/ } ; 0 }, }
453+
PRINT-DERIVE DEEP-RE-COLLECTED (DISPLAY): enum E { V = { let _ = { PATH + 1 } ; 0 }, }
456454
PRINT-DERIVE INPUT (DEBUG): TokenStream [
457455
Ident {
458456
ident: "enum",

‎src/test/ui/proc-macro/issue-75734-pp-paren.stdout

-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
9696
},
9797
]
9898
PRINT-BANG INPUT (DISPLAY): 1 + 1 * 2
99-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ 1 + 1 /*»*/ * 2
10099
PRINT-BANG INPUT (DEBUG): TokenStream [
101100
Group {
102101
delimiter: None,

‎src/test/ui/proc-macro/issue-78675-captured-inner-attrs.stdout

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PRINT-BANG INPUT (DISPLAY): foo! { #[fake_attr] mod bar {
22
#![doc = r" Foo"]
33
} }
4-
PRINT-BANG DEEP-RE-COLLECTED (DISPLAY): foo! { #[fake_attr] /*«*/ mod bar { #! [doc = r" Foo"] } /*»*/ }
4+
PRINT-BANG DEEP-RE-COLLECTED (DISPLAY): foo! { #[fake_attr] mod bar { #! [doc = r" Foo"] } }
55
PRINT-BANG INPUT (DEBUG): TokenStream [
66
Ident {
77
ident: "foo",

‎src/test/ui/proc-macro/issue-80760-empty-stmt.stdout

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
PRINT-BANG INPUT (DISPLAY): ;
2-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ ; /*»*/
32
PRINT-BANG INPUT (DEBUG): TokenStream [
43
Group {
54
delimiter: None,

‎src/test/ui/proc-macro/nested-nonterminal-tokens.stdout

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
PRINT-BANG INPUT (DISPLAY): 0 + 1 + 2 + 3
2-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ 0 + 1 + 2 /*»*/ + 3
3-
PRINT-BANG DEEP-RE-COLLECTED (DISPLAY): /*«*/ /*«*/ /*«*/ 0 /*»*/ + 1 /*»*/ + 2 /*»*/ + 3
42
PRINT-BANG INPUT (DEBUG): TokenStream [
53
Group {
64
delimiter: None,

‎src/test/ui/proc-macro/nodelim-groups.stdout

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
PRINT-BANG INPUT (DISPLAY): "hi" 1 + (25) + 1 (1 + 1)
2-
PRINT-BANG RE-COLLECTED (DISPLAY): "hi" /*«*/ 1 + (25) + 1 /*»*/ (1 + 1)
32
PRINT-BANG INPUT (DEBUG): TokenStream [
43
Literal {
54
kind: Str,
@@ -72,9 +71,6 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
7271
},
7372
]
7473
PRINT-BANG INPUT (DISPLAY): "hi" "hello".len() + "world".len() (1 + 1)
75-
PRINT-BANG RE-COLLECTED (DISPLAY): "hi" /*«*/ "hello".len() + "world".len() /*»*/ (1 + 1)
76-
PRINT-BANG DEEP-RE-COLLECTED (DISPLAY): "hi" /*«*/ /*«*/ "hello".len() /*»*/ + /*«*/ "world".len() /*»*/ /*»*/
77-
(1 + 1)
7874
PRINT-BANG INPUT (DEBUG): TokenStream [
7975
Literal {
8076
kind: Str,

‎src/test/ui/proc-macro/nonterminal-expansion.stdout

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PRINT-ATTR_ARGS INPUT (DISPLAY): a, line!(), b
2-
PRINT-ATTR_ARGS RE-COLLECTED (DISPLAY): a, /*«*/ line! () /*»*/, b
2+
PRINT-ATTR_ARGS RE-COLLECTED (DISPLAY): a, line! (), b
33
PRINT-ATTR_ARGS INPUT (DEBUG): TokenStream [
44
Ident {
55
ident: "a",

‎src/test/ui/proc-macro/nonterminal-token-hygiene.stdout

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PRINT-BANG INPUT (DISPLAY): struct S;
2-
PRINT-BANG RE-COLLECTED (DISPLAY): /*«*/ struct S ; /*»*/
2+
PRINT-BANG RE-COLLECTED (DISPLAY): struct S ;
33
PRINT-BANG INPUT (DEBUG): TokenStream [
44
Group {
55
delimiter: None,

‎src/test/ui/proc-macro/parent-source-spans.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ use parent_source_spans::parent_source_spans;
88

99
macro one($a:expr, $b:expr) {
1010
two!($a, $b);
11-
//~^ ERROR first parent: /*«*/ "hello" /*»*/
12-
//~| ERROR second parent: /*«*/ "world" /*»*/
11+
//~^ ERROR first parent: "hello"
12+
//~| ERROR second parent: "world"
1313
}
1414

1515
macro two($a:expr, $b:expr) {
1616
three!($a, $b);
17-
//~^ ERROR first final: /*«*/ "hello" /*»*/
18-
//~| ERROR second final: /*«*/ "world" /*»*/
19-
//~| ERROR first final: /*«*/ "yay" /*»*/
20-
//~| ERROR second final: /*«*/ "rust" /*»*/
17+
//~^ ERROR first final: "hello"
18+
//~| ERROR second final: "world"
19+
//~| ERROR first final: "yay"
20+
//~| ERROR second final: "rust"
2121
}
2222

2323
// forwarding tokens directly doesn't create a new source chain
@@ -34,16 +34,16 @@ macro four($($tokens:tt)*) {
3434

3535
fn main() {
3636
one!("hello", "world");
37-
//~^ ERROR first grandparent: /*«*/ "hello" /*»*/
38-
//~| ERROR second grandparent: /*«*/ "world" /*»*/
39-
//~| ERROR first source: /*«*/ "hello" /*»*/
40-
//~| ERROR second source: /*«*/ "world" /*»*/
37+
//~^ ERROR first grandparent: "hello"
38+
//~| ERROR second grandparent: "world"
39+
//~| ERROR first source: "hello"
40+
//~| ERROR second source: "world"
4141

4242
two!("yay", "rust");
43-
//~^ ERROR first parent: /*«*/ "yay" /*»*/
44-
//~| ERROR second parent: /*«*/ "rust" /*»*/
45-
//~| ERROR first source: /*«*/ "yay" /*»*/
46-
//~| ERROR second source: /*«*/ "rust" /*»*/
43+
//~^ ERROR first parent: "yay"
44+
//~| ERROR second parent: "rust"
45+
//~| ERROR first source: "yay"
46+
//~| ERROR second source: "rust"
4747

4848
three!("hip", "hop");
4949
//~^ ERROR first final: "hip"

0 commit comments

Comments
 (0)
Please sign in to comment.