Skip to content

Commit a8120d6

Browse files
committed
Tweak incorrect escaped char diagnostic
1 parent 7cf074a commit a8120d6

10 files changed

+51
-72
lines changed

src/libsyntax/parse/lexer/mod.rs

+19-19
Original file line numberDiff line numberDiff line change
@@ -968,9 +968,10 @@ impl<'a> StringReader<'a> {
968968
} else {
969969
let span = self.mk_sp(start, self.pos);
970970
let mut suggestion = "\\u{".to_owned();
971+
let msg = "incorrect unicode escape sequence";
971972
let mut err = self.sess.span_diagnostic.struct_span_err(
972973
span,
973-
"incorrect unicode escape sequence",
974+
msg,
974975
);
975976
let mut i = 0;
976977
while let (Some(ch), true) = (self.ch, i < 6) {
@@ -991,8 +992,8 @@ impl<'a> StringReader<'a> {
991992
Applicability::MaybeIncorrect,
992993
);
993994
} else {
994-
err.span_help(
995-
span,
995+
err.span_label(span, msg);
996+
err.help(
996997
"format of unicode escape sequences is `\\u{...}`",
997998
);
998999
}
@@ -1018,25 +1019,24 @@ impl<'a> StringReader<'a> {
10181019
}
10191020
c => {
10201021
let pos = self.pos;
1021-
let mut err = self.struct_err_span_char(escaped_pos,
1022-
pos,
1023-
if ascii_only {
1024-
"unknown byte escape"
1025-
} else {
1026-
"unknown character \
1027-
escape"
1028-
},
1029-
c);
1022+
let msg = if ascii_only {
1023+
"unknown byte escape"
1024+
} else {
1025+
"unknown character escape"
1026+
};
1027+
let mut err = self.struct_err_span_char(escaped_pos, pos, msg, c);
1028+
err.span_label(self.mk_sp(escaped_pos, pos), msg);
10301029
if e == '\r' {
1031-
err.span_help(self.mk_sp(escaped_pos, pos),
1032-
"this is an isolated carriage return; consider \
1033-
checking your editor and version control \
1034-
settings");
1030+
err.help(
1031+
"this is an isolated carriage return; consider checking \
1032+
your editor and version control settings",
1033+
);
10351034
}
10361035
if (e == '{' || e == '}') && !ascii_only {
1037-
err.span_help(self.mk_sp(escaped_pos, pos),
1038-
"if used in a formatting string, curly braces \
1039-
are escaped with `{{` and `}}`");
1036+
err.help(
1037+
"if used in a formatting string, curly braces are escaped \
1038+
with `{{` and `}}`",
1039+
);
10401040
}
10411041
err.emit();
10421042
false

src/libsyntax/parse/parser.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -4229,19 +4229,24 @@ impl<'a> Parser<'a> {
42294229
fn parse_pat_list(&mut self) -> PResult<'a, (Vec<P<Pat>>, Option<usize>, bool)> {
42304230
let mut fields = Vec::new();
42314231
let mut ddpos = None;
4232+
let mut prev_dd_sp = None;
42324233
let mut trailing_comma = false;
42334234
loop {
42344235
if self.eat(&token::DotDot) {
42354236
if ddpos.is_none() {
42364237
ddpos = Some(fields.len());
4238+
prev_dd_sp = Some(self.prev_span);
42374239
} else {
42384240
// Emit a friendly error, ignore `..` and continue parsing
4239-
self.struct_span_err(
4241+
let mut err = self.struct_span_err(
42404242
self.prev_span,
42414243
"`..` can only be used once per tuple or tuple struct pattern",
4242-
)
4243-
.span_label(self.prev_span, "can only be used once per pattern")
4244-
.emit();
4244+
);
4245+
err.span_label(self.prev_span, "can only be used once per pattern");
4246+
if let Some(sp) = prev_dd_sp {
4247+
err.span_label(sp, "previously present here");
4248+
}
4249+
err.emit();
42454250
}
42464251
} else if !self.check(&token::CloseDelim(token::Paren)) {
42474252
fields.push(self.parse_pat(None)?);

src/test/ui/parser/byte-literals.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ error: unknown byte escape: f
22
--> $DIR/byte-literals.rs:6:21
33
|
44
LL | static FOO: u8 = b'/f';
5-
| ^
5+
| ^ unknown byte escape
66

77
error: unknown byte escape: f
88
--> $DIR/byte-literals.rs:9:8
99
|
1010
LL | b'/f';
11-
| ^
11+
| ^ unknown byte escape
1212

1313
error: invalid character in numeric character escape: Z
1414
--> $DIR/byte-literals.rs:10:10

src/test/ui/parser/byte-string-literals.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ error: unknown byte escape: f
22
--> $DIR/byte-string-literals.rs:6:32
33
|
44
LL | static FOO: &'static [u8] = b"/f";
5-
| ^
5+
| ^ unknown byte escape
66

77
error: unknown byte escape: f
88
--> $DIR/byte-string-literals.rs:9:8
99
|
1010
LL | b"/f";
11-
| ^
11+
| ^ unknown byte escape
1212

1313
error: invalid character in numeric character escape: Z
1414
--> $DIR/byte-string-literals.rs:10:10

src/test/ui/parser/issue-23620-invalid-escapes.stderr

+6-18
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,9 @@ error: incorrect unicode escape sequence
1414
--> $DIR/issue-23620-invalid-escapes.rs:10:15
1515
|
1616
LL | let _ = b'/u';
17-
| ^^
18-
|
19-
help: format of unicode escape sequences is `/u{...}`
20-
--> $DIR/issue-23620-invalid-escapes.rs:10:15
17+
| ^^ incorrect unicode escape sequence
2118
|
22-
LL | let _ = b'/u';
23-
| ^^
19+
= help: format of unicode escape sequences is `/u{...}`
2420

2521
error: unicode escape sequences cannot be used as a byte or in a byte string
2622
--> $DIR/issue-23620-invalid-escapes.rs:10:15
@@ -80,13 +76,9 @@ error: incorrect unicode escape sequence
8076
--> $DIR/issue-23620-invalid-escapes.rs:28:28
8177
|
8278
LL | let _ = b"/u{a4a4} /xf /u";
83-
| ^^
79+
| ^^ incorrect unicode escape sequence
8480
|
85-
help: format of unicode escape sequences is `/u{...}`
86-
--> $DIR/issue-23620-invalid-escapes.rs:28:28
87-
|
88-
LL | let _ = b"/u{a4a4} /xf /u";
89-
| ^^
81+
= help: format of unicode escape sequences is `/u{...}`
9082

9183
error: unicode escape sequences cannot be used as a byte or in a byte string
9284
--> $DIR/issue-23620-invalid-escapes.rs:28:28
@@ -110,13 +102,9 @@ error: incorrect unicode escape sequence
110102
--> $DIR/issue-23620-invalid-escapes.rs:34:18
111103
|
112104
LL | let _ = "/xf /u";
113-
| ^^
105+
| ^^ incorrect unicode escape sequence
114106
|
115-
help: format of unicode escape sequences is `/u{...}`
116-
--> $DIR/issue-23620-invalid-escapes.rs:34:18
117-
|
118-
LL | let _ = "/xf /u";
119-
| ^^
107+
= help: format of unicode escape sequences is `/u{...}`
120108

121109
error: incorrect unicode escape sequence
122110
--> $DIR/issue-23620-invalid-escapes.rs:39:14

src/test/ui/parser/lex-bad-char-literals-1.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ error: unknown character escape: /u{25cf}
1414
--> $DIR/lex-bad-char-literals-1.rs:11:7
1515
|
1616
LL | '/●'
17-
| ^
17+
| ^ unknown character escape
1818

1919
error: unknown character escape: /u{25cf}
2020
--> $DIR/lex-bad-char-literals-1.rs:15:7
2121
|
2222
LL | "/●"
23-
| ^
23+
| ^ unknown character escape
2424

2525
error: aborting due to 4 previous errors
2626

src/test/ui/parser/lex-bare-cr-string-literal-doc-comment.stderr

+2-6
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,9 @@ error: unknown character escape: /r
3838
--> $DIR/lex-bare-cr-string-literal-doc-comment.rs:27:19
3939
|
4040
LL | let _s = "foo/bar";
41-
| ^
41+
| ^ unknown character escape
4242
|
43-
help: this is an isolated carriage return; consider checking your editor and version control settings
44-
--> $DIR/lex-bare-cr-string-literal-doc-comment.rs:27:19
45-
|
46-
LL | let _s = "foo/bar";
47-
| ^
43+
= help: this is an isolated carriage return; consider checking your editor and version control settings
4844

4945
error: aborting due to 7 previous errors
5046

src/test/ui/parser/pat-tuple-3.stderr

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ error: `..` can only be used once per tuple or tuple struct pattern
22
--> $DIR/pat-tuple-3.rs:3:19
33
|
44
LL | (.., pat, ..) => {}
5-
| ^^ can only be used once per pattern
5+
| -- ^^ can only be used once per pattern
6+
| |
7+
| previously present here
68

79
error: aborting due to previous error
810

src/test/ui/parser/trailing-carriage-return-in-string.stderr

+2-6
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ error: unknown character escape: /r
22
--> $DIR/trailing-carriage-return-in-string.rs:10:25
33
|
44
LL | let bad = "This is / a test";
5-
| ^
5+
| ^ unknown character escape
66
|
7-
help: this is an isolated carriage return; consider checking your editor and version control settings
8-
--> $DIR/trailing-carriage-return-in-string.rs:10:25
9-
|
10-
LL | let bad = "This is / a test";
11-
| ^
7+
= help: this is an isolated carriage return; consider checking your editor and version control settings
128

139
error: aborting due to previous error
1410

src/test/ui/parser/wrong-escape-of-curly-braces.stderr

+4-12
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,17 @@ error: unknown character escape: {
22
--> $DIR/wrong-escape-of-curly-braces.rs:3:17
33
|
44
LL | let bad = "/{it is wrong/}";
5-
| ^
5+
| ^ unknown character escape
66
|
7-
help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
8-
--> $DIR/wrong-escape-of-curly-braces.rs:3:17
9-
|
10-
LL | let bad = "/{it is wrong/}";
11-
| ^
7+
= help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
128

139
error: unknown character escape: }
1410
--> $DIR/wrong-escape-of-curly-braces.rs:3:30
1511
|
1612
LL | let bad = "/{it is wrong/}";
17-
| ^
13+
| ^ unknown character escape
1814
|
19-
help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
20-
--> $DIR/wrong-escape-of-curly-braces.rs:3:30
21-
|
22-
LL | let bad = "/{it is wrong/}";
23-
| ^
15+
= help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
2416

2517
error: aborting due to 2 previous errors
2618

0 commit comments

Comments
 (0)