Skip to content

Commit b861fa3

Browse files
committed
fix: Use correct line numbers for error diagnostics
1 parent 89b55c0 commit b861fa3

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/diagnostics.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,32 @@ pub fn run(maybe_files: Option<&[PathBuf]>) -> Result<(), ()> {
7373
&format!("{}", diagnostic.message),
7474
);
7575
let range = diagnostic.range;
76+
let padding_arrow = range.end.line.to_string().len();
7677
eprintln!(
77-
"{} {}:{}:{}",
78-
style(" -->").bold().blue(),
78+
"{}{} {}:{}:{}",
79+
" ".repeat(padding_arrow),
80+
style("-->").bold().blue(),
7981
path.display(),
8082
range.start.line,
8183
range.start.character
8284
);
8385

86+
let line_start = usize::max(1, range.start.line as usize) - 1;
8487
let lines = {
85-
let start = rope.line_to_char(usize::max(1, range.start.line as usize) - 1);
88+
let start = rope.line_to_char(line_start);
8689
let end = rope.line_to_char(range.end.line as usize) + range.end.character as usize;
8790
rope.slice(start..end)
8891
};
89-
let width = range.end.line.to_string().len() + 1;
92+
let width = padding_arrow + 1;
93+
for (i, line) in lines.lines().enumerate() {
94+
eprint!(
95+
"{} {}",
96+
style(format!("{:<width$}|", line_start + i)).blue().bold(),
97+
line
98+
);
99+
}
100+
eprintln!();
101+
90102
let width_message = u32::max(
91103
1,
92104
if range.end.character > range.start.character {
@@ -95,10 +107,6 @@ pub fn run(maybe_files: Option<&[PathBuf]>) -> Result<(), ()> {
95107
range.start.character - range.end.character
96108
},
97109
);
98-
for (i, line) in lines.lines().enumerate() {
99-
eprint!("{} {}", style(format!("{i:<width$}|")).blue().bold(), line);
100-
}
101-
eprintln!();
102110
eprintln!(
103111
"{}{} {}",
104112
" ".repeat(width),

0 commit comments

Comments
 (0)