mirror of
https://github.com/Dummi26/mers.git
synced 2025-03-10 14:13:52 +01:00
improve function type display
This commit is contained in:
parent
3b179ba2d4
commit
36e0f69d0c
@ -133,6 +133,11 @@ impl Display for Function {
|
|||||||
}
|
}
|
||||||
impl Display for FunctionT {
|
impl Display for FunctionT {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "Function")
|
match (self.0)(&Type::empty_tuple()) {
|
||||||
|
Ok(t) => write!(f, "Function /* () -> {t} */"),
|
||||||
|
Err(_) => {
|
||||||
|
write!(f, "Function",)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ pub struct CheckErrorHRConfig {
|
|||||||
}
|
}
|
||||||
pub struct CheckErrorDisplay<'a> {
|
pub struct CheckErrorDisplay<'a> {
|
||||||
e: &'a CheckError,
|
e: &'a CheckError,
|
||||||
src: &'a Source,
|
src: Option<&'a Source>,
|
||||||
}
|
}
|
||||||
impl Display for CheckErrorDisplay<'_> {
|
impl Display for CheckErrorDisplay<'_> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
@ -123,13 +123,19 @@ impl CheckError {
|
|||||||
self.add(CheckErrorComponent::Source(s))
|
self.add(CheckErrorComponent::Source(s))
|
||||||
}
|
}
|
||||||
pub fn display<'a>(&'a self, src: &'a Source) -> CheckErrorDisplay<'a> {
|
pub fn display<'a>(&'a self, src: &'a Source) -> CheckErrorDisplay<'a> {
|
||||||
CheckErrorDisplay { e: self, src }
|
CheckErrorDisplay {
|
||||||
|
e: self,
|
||||||
|
src: Some(src),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn display_no_src<'a>(&'a self) -> CheckErrorDisplay<'a> {
|
||||||
|
CheckErrorDisplay { e: self, src: None }
|
||||||
}
|
}
|
||||||
// will, unless empty, end in a newline
|
// will, unless empty, end in a newline
|
||||||
fn human_readable(
|
fn human_readable(
|
||||||
&self,
|
&self,
|
||||||
f: &mut std::fmt::Formatter<'_>,
|
f: &mut std::fmt::Formatter<'_>,
|
||||||
src: &Source,
|
src: Option<&Source>,
|
||||||
cfg: &CheckErrorHRConfig,
|
cfg: &CheckErrorHRConfig,
|
||||||
) -> std::fmt::Result {
|
) -> std::fmt::Result {
|
||||||
let len = self.0.len();
|
let len = self.0.len();
|
||||||
@ -155,6 +161,7 @@ impl CheckError {
|
|||||||
err.human_readable(f, src, &cfg)?;
|
err.human_readable(f, src, &cfg)?;
|
||||||
}
|
}
|
||||||
CheckErrorComponent::Source(highlights) => {
|
CheckErrorComponent::Source(highlights) => {
|
||||||
|
if let Some(src) = src {
|
||||||
let start = highlights.iter().map(|v| v.0.start.pos()).min();
|
let start = highlights.iter().map(|v| v.0.start.pos()).min();
|
||||||
let end = highlights.iter().map(|v| v.0.start.pos()).max();
|
let end = highlights.iter().map(|v| v.0.start.pos()).max();
|
||||||
if let (Some(start), Some(end)) = (start, end) {
|
if let (Some(start), Some(end)) = (start, end) {
|
||||||
@ -172,8 +179,10 @@ impl CheckError {
|
|||||||
if let Some(color) = color {
|
if let Some(color) = color {
|
||||||
let highlight_start = pos.start.pos() - start;
|
let highlight_start = pos.start.pos() - start;
|
||||||
let highlight_end = pos.end.pos() - start;
|
let highlight_end = pos.end.pos() - start;
|
||||||
if highlight_start < line_end && highlight_end > line_start {
|
if highlight_start < line_end && highlight_end > line_start
|
||||||
let hl_start = highlight_start.saturating_sub(line_start);
|
{
|
||||||
|
let hl_start =
|
||||||
|
highlight_start.saturating_sub(line_start);
|
||||||
if hl_start < right {
|
if hl_start < right {
|
||||||
right = 0;
|
right = 0;
|
||||||
writeln!(f)?;
|
writeln!(f)?;
|
||||||
@ -184,7 +193,8 @@ impl CheckError {
|
|||||||
let hl_space = hl_start - right;
|
let hl_space = hl_start - right;
|
||||||
let print_indent = right == 0;
|
let print_indent = right == 0;
|
||||||
right += hl_space + hl_len;
|
right += hl_space + hl_len;
|
||||||
let hl_len = hl_len.min(highlight_end - highlight_start);
|
let hl_len =
|
||||||
|
hl_len.min(highlight_end - highlight_start);
|
||||||
if print_indent && right != 0 {
|
if print_indent && right != 0 {
|
||||||
write!(f, "{} ", indent!())?;
|
write!(f, "{} ", indent!())?;
|
||||||
}
|
}
|
||||||
@ -205,6 +215,7 @@ impl CheckError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user