Skip to content

Commit

Permalink
Rollup merge of rust-lang#48546 - GuillaumeGomez:raw-string-error-not…
Browse files Browse the repository at this point in the history
…e, r=estebank

Raw string error note

Fixes rust-lang#48395.

I think this note should be helpful enough to solve the issue.
  • Loading branch information
GuillaumeGomez committed Mar 6, 2018
2 parents afb617a + 1c191b2 commit 90b38d5
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 8 deletions.
33 changes: 25 additions & 8 deletions src/libsyntax/parse/lexer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,18 @@ impl<'a> StringReader<'a> {
self.advance_token()?;
Ok(ret_val)
}

fn fail_unterminated_raw_string(&self, pos: BytePos, hash_count: usize) {
let mut err = self.struct_span_fatal(pos, pos, "unterminated raw string");
err.span_label(self.mk_sp(pos, pos), "unterminated raw string");
if hash_count > 0 {
err.note(&format!("this raw string should be terminated with `\"{}`",
"#".repeat(hash_count)));
}
err.emit();
FatalError.raise();
}

fn fatal(&self, m: &str) -> FatalError {
self.fatal_span(self.peek_span, m)
}
Expand Down Expand Up @@ -269,6 +281,15 @@ impl<'a> StringReader<'a> {
Self::push_escaped_char_for_msg(&mut m, c);
self.fatal_span_(from_pos, to_pos, &m[..])
}

fn struct_span_fatal(&self,
from_pos: BytePos,
to_pos: BytePos,
m: &str)
-> DiagnosticBuilder<'a> {
self.sess.span_diagnostic.struct_span_fatal(self.mk_sp(from_pos, to_pos), m)
}

fn struct_fatal_span_char(&self,
from_pos: BytePos,
to_pos: BytePos,
Expand Down Expand Up @@ -1404,8 +1425,7 @@ impl<'a> StringReader<'a> {
}

if self.is_eof() {
let last_bpos = self.pos;
self.fatal_span_(start_bpos, last_bpos, "unterminated raw string").raise();
self.fail_unterminated_raw_string(start_bpos, hash_count);
} else if !self.ch_is('"') {
let last_bpos = self.pos;
let curr_char = self.ch.unwrap();
Expand All @@ -1421,8 +1441,7 @@ impl<'a> StringReader<'a> {
let mut valid = true;
'outer: loop {
if self.is_eof() {
let last_bpos = self.pos;
self.fatal_span_(start_bpos, last_bpos, "unterminated raw string").raise();
self.fail_unterminated_raw_string(start_bpos, hash_count);
}
// if self.ch_is('"') {
// content_end_bpos = self.pos;
Expand Down Expand Up @@ -1636,8 +1655,7 @@ impl<'a> StringReader<'a> {
}

if self.is_eof() {
let pos = self.pos;
self.fatal_span_(start_bpos, pos, "unterminated raw string").raise();
self.fail_unterminated_raw_string(start_bpos, hash_count);
} else if !self.ch_is('"') {
let pos = self.pos;
let ch = self.ch.unwrap();
Expand All @@ -1653,8 +1671,7 @@ impl<'a> StringReader<'a> {
'outer: loop {
match self.ch {
None => {
let pos = self.pos;
self.fatal_span_(start_bpos, pos, "unterminated raw string").raise()
self.fail_unterminated_raw_string(start_bpos, hash_count);
}
Some('"') => {
content_end_bpos = self.pos;
Expand Down
14 changes: 14 additions & 0 deletions src/test/ui/raw_string.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

fn main() {
let x = r##"lol"#;
//~^ ERROR unterminated raw string
}
8 changes: 8 additions & 0 deletions src/test/ui/raw_string.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: unterminated raw string
--> $DIR/raw_string.rs:12:13
|
LL | let x = r##"lol"#;
| ^ unterminated raw string
|
= note: this raw string should be terminated with `"##`

0 comments on commit 90b38d5

Please sign in to comment.