mirror of
https://github.com/Dummi26/mers.git
synced 2025-03-10 14:13:52 +01:00
error display underline now includes a.f(b) (b) part
This commit is contained in:
parent
cfa5a5e43e
commit
577ef510ce
@ -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(),
|
||||
});
|
||||
}
|
||||
|
@ -25,4 +25,7 @@ impl MersStatement for AssignTo {
|
||||
source: self.source.compile(info, comp)?,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -28,4 +28,7 @@ impl MersStatement for Block {
|
||||
.collect::<Result<Vec<_>, _>>()?,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -24,4 +24,7 @@ impl MersStatement for Chain {
|
||||
chained: self.chained.compile(info, comp)?,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -47,4 +47,7 @@ impl MersStatement for Function {
|
||||
},
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -30,4 +30,7 @@ impl MersStatement for If {
|
||||
},
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -30,4 +30,7 @@ impl MersStatement for InitTo {
|
||||
source,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -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)]
|
||||
|
@ -28,4 +28,7 @@ impl MersStatement for Tuple {
|
||||
.collect::<Result<Vec<_>, _>>()?,
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -23,4 +23,7 @@ impl MersStatement for Value {
|
||||
val: self.data.clone(),
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -41,4 +41,7 @@ impl MersStatement for Variable {
|
||||
},
|
||||
}))
|
||||
}
|
||||
fn source_range(&self) -> SourceRange {
|
||||
self.pos_in_src
|
||||
}
|
||||
}
|
||||
|
@ -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)]
|
||||
|
Loading…
Reference in New Issue
Block a user