Skip to content

Commit

Permalink
Tweak incorrect escaped char diagnostic
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Mar 20, 2019
1 parent 7cf074a commit a8120d6
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 72 deletions.
38 changes: 19 additions & 19 deletions src/libsyntax/parse/lexer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -968,9 +968,10 @@ impl<'a> StringReader<'a> {
} else {
let span = self.mk_sp(start, self.pos);
let mut suggestion = "\\u{".to_owned();
let msg = "incorrect unicode escape sequence";
let mut err = self.sess.span_diagnostic.struct_span_err(
span,
"incorrect unicode escape sequence",
msg,
);
let mut i = 0;
while let (Some(ch), true) = (self.ch, i < 6) {
Expand All @@ -991,8 +992,8 @@ impl<'a> StringReader<'a> {
Applicability::MaybeIncorrect,
);
} else {
err.span_help(
span,
err.span_label(span, msg);
err.help(
"format of unicode escape sequences is `\\u{...}`",
);
}
Expand All @@ -1018,25 +1019,24 @@ impl<'a> StringReader<'a> {
}
c => {
let pos = self.pos;
let mut err = self.struct_err_span_char(escaped_pos,
pos,
if ascii_only {
"unknown byte escape"
} else {
"unknown character \
escape"
},
c);
let msg = if ascii_only {
"unknown byte escape"
} else {
"unknown character escape"
};
let mut err = self.struct_err_span_char(escaped_pos, pos, msg, c);
err.span_label(self.mk_sp(escaped_pos, pos), msg);
if e == '\r' {
err.span_help(self.mk_sp(escaped_pos, pos),
"this is an isolated carriage return; consider \
checking your editor and version control \
settings");
err.help(
"this is an isolated carriage return; consider checking \
your editor and version control settings",
);
}
if (e == '{' || e == '}') && !ascii_only {
err.span_help(self.mk_sp(escaped_pos, pos),
"if used in a formatting string, curly braces \
are escaped with `{{` and `}}`");
err.help(
"if used in a formatting string, curly braces are escaped \
with `{{` and `}}`",
);
}
err.emit();
false
Expand Down
13 changes: 9 additions & 4 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4229,19 +4229,24 @@ impl<'a> Parser<'a> {
fn parse_pat_list(&mut self) -> PResult<'a, (Vec<P<Pat>>, Option<usize>, bool)> {
let mut fields = Vec::new();
let mut ddpos = None;
let mut prev_dd_sp = None;
let mut trailing_comma = false;
loop {
if self.eat(&token::DotDot) {
if ddpos.is_none() {
ddpos = Some(fields.len());
prev_dd_sp = Some(self.prev_span);
} else {
// Emit a friendly error, ignore `..` and continue parsing
self.struct_span_err(
let mut err = self.struct_span_err(
self.prev_span,
"`..` can only be used once per tuple or tuple struct pattern",
)
.span_label(self.prev_span, "can only be used once per pattern")
.emit();
);
err.span_label(self.prev_span, "can only be used once per pattern");
if let Some(sp) = prev_dd_sp {
err.span_label(sp, "previously present here");
}
err.emit();
}
} else if !self.check(&token::CloseDelim(token::Paren)) {
fields.push(self.parse_pat(None)?);
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/parser/byte-literals.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ error: unknown byte escape: f
--> $DIR/byte-literals.rs:6:21
|
LL | static FOO: u8 = b'/f';
| ^
| ^ unknown byte escape

error: unknown byte escape: f
--> $DIR/byte-literals.rs:9:8
|
LL | b'/f';
| ^
| ^ unknown byte escape

error: invalid character in numeric character escape: Z
--> $DIR/byte-literals.rs:10:10
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/parser/byte-string-literals.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ error: unknown byte escape: f
--> $DIR/byte-string-literals.rs:6:32
|
LL | static FOO: &'static [u8] = b"/f";
| ^
| ^ unknown byte escape

error: unknown byte escape: f
--> $DIR/byte-string-literals.rs:9:8
|
LL | b"/f";
| ^
| ^ unknown byte escape

error: invalid character in numeric character escape: Z
--> $DIR/byte-string-literals.rs:10:10
Expand Down
24 changes: 6 additions & 18 deletions src/test/ui/parser/issue-23620-invalid-escapes.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,9 @@ error: incorrect unicode escape sequence
--> $DIR/issue-23620-invalid-escapes.rs:10:15
|
LL | let _ = b'/u';
| ^^
|
help: format of unicode escape sequences is `/u{...}`
--> $DIR/issue-23620-invalid-escapes.rs:10:15
| ^^ incorrect unicode escape sequence
|
LL | let _ = b'/u';
| ^^
= help: format of unicode escape sequences is `/u{...}`

error: unicode escape sequences cannot be used as a byte or in a byte string
--> $DIR/issue-23620-invalid-escapes.rs:10:15
Expand Down Expand Up @@ -80,13 +76,9 @@ error: incorrect unicode escape sequence
--> $DIR/issue-23620-invalid-escapes.rs:28:28
|
LL | let _ = b"/u{a4a4} /xf /u";
| ^^
| ^^ incorrect unicode escape sequence
|
help: format of unicode escape sequences is `/u{...}`
--> $DIR/issue-23620-invalid-escapes.rs:28:28
|
LL | let _ = b"/u{a4a4} /xf /u";
| ^^
= help: format of unicode escape sequences is `/u{...}`

error: unicode escape sequences cannot be used as a byte or in a byte string
--> $DIR/issue-23620-invalid-escapes.rs:28:28
Expand All @@ -110,13 +102,9 @@ error: incorrect unicode escape sequence
--> $DIR/issue-23620-invalid-escapes.rs:34:18
|
LL | let _ = "/xf /u";
| ^^
| ^^ incorrect unicode escape sequence
|
help: format of unicode escape sequences is `/u{...}`
--> $DIR/issue-23620-invalid-escapes.rs:34:18
|
LL | let _ = "/xf /u";
| ^^
= help: format of unicode escape sequences is `/u{...}`

error: incorrect unicode escape sequence
--> $DIR/issue-23620-invalid-escapes.rs:39:14
Expand Down
4 changes: 2 additions & 2 deletions src/test/ui/parser/lex-bad-char-literals-1.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ error: unknown character escape: /u{25cf}
--> $DIR/lex-bad-char-literals-1.rs:11:7
|
LL | '/●'
| ^
| ^ unknown character escape

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

error: aborting due to 4 previous errors

Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,9 @@ error: unknown character escape: /r
--> $DIR/lex-bare-cr-string-literal-doc-comment.rs:27:19
|
LL | let _s = "foo/bar";
| ^
| ^ unknown character escape
|
help: this is an isolated carriage return; consider checking your editor and version control settings
--> $DIR/lex-bare-cr-string-literal-doc-comment.rs:27:19
|
LL | let _s = "foo/bar";
| ^
= help: this is an isolated carriage return; consider checking your editor and version control settings

error: aborting due to 7 previous errors

Expand Down
4 changes: 3 additions & 1 deletion src/test/ui/parser/pat-tuple-3.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ error: `..` can only be used once per tuple or tuple struct pattern
--> $DIR/pat-tuple-3.rs:3:19
|
LL | (.., pat, ..) => {}
| ^^ can only be used once per pattern
| -- ^^ can only be used once per pattern
| |
| previously present here

error: aborting due to previous error

8 changes: 2 additions & 6 deletions src/test/ui/parser/trailing-carriage-return-in-string.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,9 @@ error: unknown character escape: /r
--> $DIR/trailing-carriage-return-in-string.rs:10:25
|
LL | let bad = "This is / a test";
| ^
| ^ unknown character escape
|
help: this is an isolated carriage return; consider checking your editor and version control settings
--> $DIR/trailing-carriage-return-in-string.rs:10:25
|
LL | let bad = "This is / a test";
| ^
= help: this is an isolated carriage return; consider checking your editor and version control settings

error: aborting due to previous error

Expand Down
16 changes: 4 additions & 12 deletions src/test/ui/parser/wrong-escape-of-curly-braces.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,17 @@ error: unknown character escape: {
--> $DIR/wrong-escape-of-curly-braces.rs:3:17
|
LL | let bad = "/{it is wrong/}";
| ^
| ^ unknown character escape
|
help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
--> $DIR/wrong-escape-of-curly-braces.rs:3:17
|
LL | let bad = "/{it is wrong/}";
| ^
= help: if used in a formatting string, curly braces are escaped with `{{` and `}}`

error: unknown character escape: }
--> $DIR/wrong-escape-of-curly-braces.rs:3:30
|
LL | let bad = "/{it is wrong/}";
| ^
| ^ unknown character escape
|
help: if used in a formatting string, curly braces are escaped with `{{` and `}}`
--> $DIR/wrong-escape-of-curly-braces.rs:3:30
|
LL | let bad = "/{it is wrong/}";
| ^
= help: if used in a formatting string, curly braces are escaped with `{{` and `}}`

error: aborting due to 2 previous errors

0 comments on commit a8120d6

Please sign in to comment.