Skip to content

Commit

Permalink
Add option for including context before and after a label
Browse files Browse the repository at this point in the history
  • Loading branch information
elkowar committed Aug 2, 2021
1 parent 12dc87d commit fa4d5f8
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
10 changes: 10 additions & 0 deletions codespan-reporting/src/term/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ pub struct Config {
///
/// [`Label`]: crate::diagnostic::Label
pub end_context_lines: usize,
/// The minimum number of lines before a label that should be included for context.
///
/// Defaults to: `0`.
pub before_label_lines: usize,
/// The minimum number of lines after a label that should be included for context.
///
/// Defaults to: `0`.
pub after_label_lines: usize,
}

impl Default for Config {
Expand All @@ -40,6 +48,8 @@ impl Default for Config {
chars: Chars::default(),
start_context_lines: 3,
end_context_lines: 1,
before_label_lines: 0,
after_label_lines: 0,
}
}
}
Expand Down
28 changes: 28 additions & 0 deletions codespan-reporting/src/term/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,34 @@ where
}
};

let lines_before = usize::min(start_line_index, self.config.before_label_lines);
for offset in (1..lines_before + 1).rev() {
let range = files.line_range(label.file_id, start_line_index - offset);
if let Ok(range) = range {
let line = labeled_file.get_or_insert_line(
start_line_index - offset,
range,
start_line_number - offset,
);
line.must_render = true;
} else {
break;
}
}
for offset in 1..lines_before + 1 {
let range = files.line_range(label.file_id, start_line_index + offset);
if let Ok(range) = range {
let line = labeled_file.get_or_insert_line(
end_line_index + offset,
range,
end_line_number + offset,
);
line.must_render = true;
} else {
break;
}
}

if start_line_index == end_line_index {
// Single line
//
Expand Down

0 comments on commit fa4d5f8

Please sign in to comment.