File tree Expand file tree Collapse file tree 3 files changed +36
-7
lines changed Expand file tree Collapse file tree 3 files changed +36
-7
lines changed Original file line number Diff line number Diff line change @@ -191,7 +191,7 @@ impl Name {
191
191
// FIXME: Remove this in favor of `display`, see fixme on `as_str`
192
192
#[ doc( hidden) ]
193
193
pub fn display_no_db ( & self , edition : Edition ) -> impl fmt:: Display + ' _ {
194
- Display { name : self , needs_escaping : is_raw_identifier ( self . symbol . as_str ( ) , edition) }
194
+ Display { name : self , edition }
195
195
}
196
196
197
197
pub fn symbol ( & self ) -> & Symbol {
@@ -201,15 +201,28 @@ impl Name {
201
201
202
202
struct Display < ' a > {
203
203
name : & ' a Name ,
204
- needs_escaping : bool ,
204
+ edition : Edition ,
205
205
}
206
206
207
207
impl fmt:: Display for Display < ' _ > {
208
208
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
209
- if self . needs_escaping {
210
- write ! ( f, "r#" ) ?;
209
+ let mut symbol = self . name . symbol . as_str ( ) ;
210
+
211
+ if symbol == "'static" {
212
+ // FIXME: '`static` can also be a label, and there it does need escaping.
213
+ // But knowing where it is will require adding a parameter to `display()`,
214
+ // and that is an infectious change.
215
+ return f. write_str ( symbol) ;
216
+ }
217
+
218
+ if let Some ( s) = symbol. strip_prefix ( '\'' ) {
219
+ f. write_str ( "'" ) ?;
220
+ symbol = s;
221
+ }
222
+ if is_raw_identifier ( symbol, self . edition ) {
223
+ f. write_str ( "r#" ) ?;
211
224
}
212
- fmt :: Display :: fmt ( self . name . symbol . as_str ( ) , f )
225
+ f . write_str ( symbol )
213
226
}
214
227
}
215
228
Original file line number Diff line number Diff line change @@ -116,13 +116,13 @@ fn foo<'lifetime>(foo: &'a$0) {}
116
116
check (
117
117
r#"
118
118
struct Foo;
119
- impl<'impl> Foo {
119
+ impl<'r# impl> Foo {
120
120
fn foo<'func>(&'a$0 self) {}
121
121
}
122
122
"# ,
123
123
expect ! [ [ r#"
124
124
lt 'func
125
- lt 'impl
125
+ lt 'r# impl
126
126
lt 'static
127
127
"# ] ] ,
128
128
) ;
Original file line number Diff line number Diff line change @@ -2110,3 +2110,19 @@ fn foo() {
2110
2110
"# ] ] ,
2111
2111
) ;
2112
2112
}
2113
+
2114
+ #[ test]
2115
+ fn escaped_label ( ) {
2116
+ check (
2117
+ r#"
2118
+ fn main() {
2119
+ 'r#break: {
2120
+ break '$0;
2121
+ }
2122
+ }
2123
+ "# ,
2124
+ expect ! [ [ r#"
2125
+ lb 'r#break
2126
+ "# ] ] ,
2127
+ ) ;
2128
+ }
You can’t perform that action at this time.
0 commit comments