mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 06:14:46 +00:00
add error under/side lines
This commit is contained in:
parent
2b4b63a8eb
commit
48832ffa84
2 changed files with 60 additions and 24 deletions
|
@ -320,12 +320,11 @@ impl ReportText {
|
||||||
buf.push_str(" ".repeat(max_line_number_length).as_str());
|
buf.push_str(" ".repeat(max_line_number_length).as_str());
|
||||||
buf.push_str(" ┆");
|
buf.push_str(" ┆");
|
||||||
|
|
||||||
let spaces = std::iter::repeat(" ").take(region.start_col as usize + 2);
|
buf.push_str(" ".repeat(region.start_col as usize + 2).as_str());
|
||||||
let carets =
|
buf.push_str(
|
||||||
std::iter::repeat("^").take((region.end_col - region.start_col) as usize);
|
"^".repeat((region.end_col - region.start_col) as usize)
|
||||||
|
.as_str(),
|
||||||
let line = spaces.chain(carets).collect::<String>();
|
);
|
||||||
buf.push_str(&*line);
|
|
||||||
} else {
|
} else {
|
||||||
for i in region.start_line..=region.end_line {
|
for i in region.start_line..=region.end_line {
|
||||||
let i_one_indexed = i + 1;
|
let i_one_indexed = i + 1;
|
||||||
|
@ -339,7 +338,7 @@ impl ReportText {
|
||||||
.as_str(),
|
.as_str(),
|
||||||
);
|
);
|
||||||
buf.push_str(line_number);
|
buf.push_str(line_number);
|
||||||
buf.push_str(" ┆");
|
buf.push_str(" ┆>");
|
||||||
|
|
||||||
let line = src_lines[i as usize];
|
let line = src_lines[i as usize];
|
||||||
|
|
||||||
|
@ -431,9 +430,13 @@ impl ReportText {
|
||||||
// newline before snippet
|
// newline before snippet
|
||||||
buf.push('\n');
|
buf.push('\n');
|
||||||
buf.push('\n');
|
buf.push('\n');
|
||||||
let max_line_number_length = region.end_line.to_string().len();
|
|
||||||
|
|
||||||
for i in region.start_line..=region.end_line {
|
// the widest line number that is rendered
|
||||||
|
let max_line_number_length = (region.end_line + 1).to_string().len();
|
||||||
|
|
||||||
|
if region.start_line == region.end_line {
|
||||||
|
// single line
|
||||||
|
let i = region.start_line;
|
||||||
let i_one_indexed = i + 1;
|
let i_one_indexed = i + 1;
|
||||||
|
|
||||||
let line_number_string = i_one_indexed.to_string();
|
let line_number_string = i_one_indexed.to_string();
|
||||||
|
@ -454,8 +457,41 @@ impl ReportText {
|
||||||
buf.push_str(&palette.code_block.render(src_lines[i as usize]));
|
buf.push_str(&palette.code_block.render(src_lines[i as usize]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if i != region.end_line {
|
buf.push('\n');
|
||||||
buf.push('\n');
|
buf.push_str(" ".repeat(max_line_number_length).as_str());
|
||||||
|
buf.push_str(&palette.gutter_bar.render(" ┆"));
|
||||||
|
|
||||||
|
buf.push_str(" ".repeat(region.start_col as usize + 2).as_str());
|
||||||
|
let carets = "^".repeat((region.end_col - region.start_col) as usize);
|
||||||
|
buf.push_str(&palette.error.render(carets.as_str()));
|
||||||
|
} else {
|
||||||
|
// multiline
|
||||||
|
|
||||||
|
for i in region.start_line..=region.end_line {
|
||||||
|
let i_one_indexed = i + 1;
|
||||||
|
|
||||||
|
let line_number_string = i_one_indexed.to_string();
|
||||||
|
let line_number = line_number_string.as_str();
|
||||||
|
let this_line_number_length = line_number.len();
|
||||||
|
|
||||||
|
buf.push_str(
|
||||||
|
" ".repeat(max_line_number_length - this_line_number_length)
|
||||||
|
.as_str(),
|
||||||
|
);
|
||||||
|
buf.push_str(&palette.line_number.render(line_number));
|
||||||
|
buf.push_str(&palette.gutter_bar.render(" ┆"));
|
||||||
|
buf.push_str(&palette.error.render(">"));
|
||||||
|
|
||||||
|
let line = src_lines[i as usize];
|
||||||
|
|
||||||
|
if !line.trim().is_empty() {
|
||||||
|
buf.push_str(" ");
|
||||||
|
buf.push_str(&palette.code_block.render(src_lines[i as usize]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if i != region.end_line {
|
||||||
|
buf.push('\n');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -373,9 +373,9 @@ mod test_reporting {
|
||||||
r#"
|
r#"
|
||||||
You cannot mix (!=) and (==) without parentheses
|
You cannot mix (!=) and (==) without parentheses
|
||||||
|
|
||||||
2 ┆ 1
|
2 ┆> 1
|
||||||
3 ┆ != 2
|
3 ┆> != 2
|
||||||
4 ┆ == 3
|
4 ┆> == 3
|
||||||
|
|
||||||
"#
|
"#
|
||||||
),
|
),
|
||||||
|
@ -581,10 +581,10 @@ mod test_reporting {
|
||||||
r#"
|
r#"
|
||||||
|
|
||||||
|
|
||||||
<cyan>1<reset><magenta> ┆<reset> <white>isDisabled = \user -> user.isAdmin<reset>
|
<cyan>1<reset><magenta> ┆<reset><red>><reset> <white>isDisabled = \user -> user.isAdmin<reset>
|
||||||
<cyan>2<reset><magenta> ┆<reset>
|
<cyan>2<reset><magenta> ┆<reset><red>><reset>
|
||||||
<cyan>3<reset><magenta> ┆<reset> <white>theAdmin<reset>
|
<cyan>3<reset><magenta> ┆<reset><red>><reset> <white>theAdmin<reset>
|
||||||
<cyan>4<reset><magenta> ┆<reset> <white> |> isDisabled<reset>
|
<cyan>4<reset><magenta> ┆<reset><red>><reset> <white> |> isDisabled<reset>
|
||||||
|
|
||||||
"#
|
"#
|
||||||
),
|
),
|
||||||
|
@ -613,9 +613,9 @@ mod test_reporting {
|
||||||
r#"
|
r#"
|
||||||
|
|
||||||
|
|
||||||
2 ┆ y = 2
|
2 ┆> y = 2
|
||||||
3 ┆ f = \a -> a + 4
|
3 ┆> f = \a -> a + 4
|
||||||
4 ┆
|
4 ┆>
|
||||||
|
|
||||||
"#
|
"#
|
||||||
),
|
),
|
||||||
|
@ -652,9 +652,9 @@ mod test_reporting {
|
||||||
r#"
|
r#"
|
||||||
|
|
||||||
|
|
||||||
9 ┆
|
9 ┆>
|
||||||
10 ┆ y = 2
|
10 ┆> y = 2
|
||||||
11 ┆ f = \a -> a + 4
|
11 ┆> f = \a -> a + 4
|
||||||
|
|
||||||
"#
|
"#
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue