Bugfix: Fix error message pointing to wrong character. (#3164)
This commit is contained in:
parent
a7f186424e
commit
139320bdde
1 changed files with 38 additions and 3 deletions
|
@ -149,7 +149,10 @@ impl fmt::Display for Snippet {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
// extra spacing for the line number
|
// extra spacing for the line number
|
||||||
let spacing = self.location.line.ilog10() as usize + 1;
|
let spacing = self.location.line.ilog10() as usize + 1;
|
||||||
writeln!(f, "{:>spacing$} |", "")?;
|
for _ in 0..spacing {
|
||||||
|
f.write_str(" ")?;
|
||||||
|
}
|
||||||
|
f.write_str(" |\n")?;
|
||||||
write!(f, "{:>spacing$} | ", self.location.line)?;
|
write!(f, "{:>spacing$} | ", self.location.line)?;
|
||||||
match self.truncation {
|
match self.truncation {
|
||||||
Truncation::None => {
|
Truncation::None => {
|
||||||
|
@ -172,7 +175,13 @@ impl fmt::Display for Snippet {
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
write!(f, "{:>spacing$} | {:>error_offset$} ", "", "",)?;
|
for _ in 0..spacing {
|
||||||
|
f.write_str(" ")?;
|
||||||
|
}
|
||||||
|
f.write_str(" | ")?;
|
||||||
|
for _ in 0..error_offset {
|
||||||
|
f.write_str(" ")?;
|
||||||
|
}
|
||||||
for _ in 0..self.length {
|
for _ in 0..self.length {
|
||||||
write!(f, "^")?;
|
write!(f, "^")?;
|
||||||
}
|
}
|
||||||
|
@ -186,7 +195,7 @@ impl fmt::Display for Snippet {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::{Snippet, Truncation};
|
use super::{RenderedError, Snippet, Truncation};
|
||||||
use crate::syn::common::Location;
|
use crate::syn::common::Location;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -250,4 +259,30 @@ mod test {
|
||||||
"aaaaaaaaa $ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
"aaaaaaaaa $ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn render() {
|
||||||
|
let error = RenderedError {
|
||||||
|
text: "some_error".to_string(),
|
||||||
|
snippets: vec![Snippet {
|
||||||
|
source: "hallo error".to_owned(),
|
||||||
|
truncation: Truncation::Both,
|
||||||
|
location: Location {
|
||||||
|
line: 4,
|
||||||
|
column: 10,
|
||||||
|
},
|
||||||
|
offset: 6,
|
||||||
|
length: 5,
|
||||||
|
explain: Some("this is wrong".to_owned()),
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
|
||||||
|
let error_string = format!("{}", error);
|
||||||
|
let expected = r#"some_error
|
||||||
|
|
|
||||||
|
4 | ...hallo error...
|
||||||
|
| ^^^^^ this is wrong
|
||||||
|
"#;
|
||||||
|
assert_eq!(error_string, expected)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue