error display underline now includes a.f(b) (b) part

This commit is contained in:
Mark 2023-10-27 19:57:45 +02:00
parent cfa5a5e43e
commit 577ef510ce
12 changed files with 39 additions and 2 deletions

View File

@ -51,11 +51,10 @@ pub fn parse(src: &mut Source) -> Result<Option<Box<dyn program::parsed::MersSta
let chained = parse_no_chain(src)?.expect("err: EOF instead of chain");
// allow a.f(b, c) syntax (but not f(a, b, c))
if let Some('(') = src.peek_char() {
let pos_in_src = src.get_pos();
src.next_char();
let elems = parse_multiple(src, ")")?;
first = Box::new(program::parsed::tuple::Tuple {
pos_in_src: (pos_in_src, src.get_pos()).into(),
pos_in_src: (first.source_range().start(), src.get_pos()).into(),
elems: [first].into_iter().chain(elems).collect(),
});
}

View File

@ -25,4 +25,7 @@ impl MersStatement for AssignTo {
source: self.source.compile(info, comp)?,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -28,4 +28,7 @@ impl MersStatement for Block {
.collect::<Result<Vec<_>, _>>()?,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -24,4 +24,7 @@ impl MersStatement for Chain {
chained: self.chained.compile(info, comp)?,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -47,4 +47,7 @@ impl MersStatement for Function {
},
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -30,4 +30,7 @@ impl MersStatement for If {
},
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -30,4 +30,7 @@ impl MersStatement for InitTo {
source,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -2,6 +2,8 @@ use std::{collections::HashMap, fmt::Debug};
use crate::info;
use super::run::SourceRange;
#[cfg(feature = "parse")]
pub mod assign_to;
#[cfg(feature = "parse")]
@ -42,6 +44,7 @@ pub trait MersStatement: Debug + Send + Sync {
}
o
}
fn source_range(&self) -> SourceRange;
}
#[derive(Clone, Copy)]

View File

@ -28,4 +28,7 @@ impl MersStatement for Tuple {
.collect::<Result<Vec<_>, _>>()?,
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -23,4 +23,7 @@ impl MersStatement for Value {
val: self.data.clone(),
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -41,4 +41,7 @@ impl MersStatement for Variable {
},
}))
}
fn source_range(&self) -> SourceRange {
self.pos_in_src
}
}

View File

@ -74,6 +74,14 @@ impl From<(SourcePos, SourcePos)> for SourceRange {
}
}
}
impl SourceRange {
pub fn start(&self) -> SourcePos {
self.start
}
pub fn end(&self) -> SourcePos {
self.end
}
}
#[derive(Clone, Debug)]
pub struct CheckError(Vec<CheckErrorComponent>);
#[derive(Clone, Debug)]