add _ wildcard for type definitions

and make line/file indicators in errors
gray instead of fully white
This commit is contained in:
Mark 2024-06-12 20:11:22 +02:00
parent 945e19e10a
commit 1e2f0cb63c
3 changed files with 40 additions and 17 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "mers_lib"
version = "0.8.3"
version = "0.8.4"
edition = "2021"
license = "MIT OR Apache-2.0"
description = "library to use the mers language in other projects"

View File

@ -276,20 +276,28 @@ impl CheckError {
if first_line_nr == last_line_nr {
writeln!(
f,
"{}",
format!(
"{}Line {first_line_nr} ({}..{}){}",
indent!(true, false),
start_with_comments + 1 - first_line_start,
end_with_comments - last_line_start,
src_from,
)
.bright_black()
)?;
} else {
writeln!(
f,
"{}",
format!(
"{}Lines {first_line_nr}-{last_line_nr} ({}..{}){}",
indent!(true, false),
start_with_comments + 1 - first_line_start,
end_with_comments - last_line_start,
src_from,
)
.bright_black()
)?;
}
let lines = if cfg.show_comments {

View File

@ -1,5 +1,7 @@
use std::{fmt::Debug, sync::Arc};
use colored::Colorize;
use crate::{
data::{Data, Type},
errors::{CheckError, SourceRange},
@ -33,12 +35,25 @@ impl MersStatement for CustomType {
if init_to.is_some() {
return Err("can't init to `type` statement".to_string().into());
}
let t = (self.source)(info)?;
let t = (self.source)(info);
if self.name != "_" {
info.scopes
.last_mut()
.unwrap()
.types
.insert(self.name.clone(), t);
.insert(self.name.clone(), t?);
} else {
if let Err(e) = t {
return Err(CheckError::new()
.msg(format!(
" {} {} {} (`[[_] := ...]` indicates that `...` must be type-correct)",
"<<".bright_red(),
"Custom type-test failed!".bright_red(),
">>".bright_red(),
))
.err(e));
}
}
Ok(Type::empty_tuple())
}
fn run_custom(&self, _info: &mut Info) -> Data {