Fix caret diagnostics for mutiple lines

This commit is contained in:
Aviv Palivoda 2019-11-29 11:32:45 +02:00
parent 28fbdffdc8
commit aff1a6d53c

View file

@ -91,20 +91,19 @@ impl fmt::Display for CompileError {
CompileErrorType::InvalidYield => "'yield' outside function".to_string(), CompileErrorType::InvalidYield => "'yield' outside function".to_string(),
}; };
if self.statement.is_some() && self.location.column() > 0 { if let Some(statement) = &self.statement {
if self.location.column() > 0 {
if let Some(line) = statement.lines().nth(self.location.row() - 1) {
// visualize the error, when location and statement are provided // visualize the error, when location and statement are provided
write!( return write!(f, "\n{}\n{}", line, self.location.visualize(&error_desc));
f, }
"\n{}\n{}", }
self.statement.clone().unwrap(), }
self.location.visualize(&error_desc)
)
} else {
// print line number // print line number
write!(f, "{} at {}", error_desc, self.location) write!(f, "{} at {}", error_desc, self.location)
} }
} }
}
impl Error for CompileError { impl Error for CompileError {
fn source(&self) -> Option<&(dyn Error + 'static)> { fn source(&self) -> Option<&(dyn Error + 'static)> {