|
|
@ -17,7 +17,7 @@ use helix_core::{
|
|
|
|
};
|
|
|
|
};
|
|
|
|
use helix_view::{
|
|
|
|
use helix_view::{
|
|
|
|
document::{Mode, SCRATCH_BUFFER_NAME},
|
|
|
|
document::{Mode, SCRATCH_BUFFER_NAME},
|
|
|
|
graphics::{Color, CursorKind, Modifier, Rect, Style},
|
|
|
|
graphics::{CursorKind, Modifier, Rect, Style},
|
|
|
|
info::Info,
|
|
|
|
info::Info,
|
|
|
|
input::KeyEvent,
|
|
|
|
input::KeyEvent,
|
|
|
|
keyboard::{KeyCode, KeyModifiers},
|
|
|
|
keyboard::{KeyCode, KeyModifiers},
|
|
|
@ -419,68 +419,6 @@ impl EditorView {
|
|
|
|
.map(|range| range.cursor_line(text))
|
|
|
|
.map(|range| range.cursor_line(text))
|
|
|
|
.collect();
|
|
|
|
.collect();
|
|
|
|
|
|
|
|
|
|
|
|
use helix_view::editor::Config;
|
|
|
|
|
|
|
|
use helix_view::gutter::GutterFn;
|
|
|
|
|
|
|
|
fn breakpoints<'doc>(
|
|
|
|
|
|
|
|
editor: &'doc Editor,
|
|
|
|
|
|
|
|
doc: &'doc Document,
|
|
|
|
|
|
|
|
_view: &View,
|
|
|
|
|
|
|
|
theme: &Theme,
|
|
|
|
|
|
|
|
_config: &Config,
|
|
|
|
|
|
|
|
_is_focused: bool,
|
|
|
|
|
|
|
|
_width: usize,
|
|
|
|
|
|
|
|
) -> GutterFn<'doc> {
|
|
|
|
|
|
|
|
let warning = theme.get("warning");
|
|
|
|
|
|
|
|
let error = theme.get("error");
|
|
|
|
|
|
|
|
let info = theme.get("info");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let breakpoints = doc
|
|
|
|
|
|
|
|
.path()
|
|
|
|
|
|
|
|
.and_then(|path| editor.breakpoints.get(path))
|
|
|
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Box::new(move |line: usize, _selected: bool, out: &mut String| {
|
|
|
|
|
|
|
|
let breakpoint = breakpoints
|
|
|
|
|
|
|
|
.iter()
|
|
|
|
|
|
|
|
.find(|breakpoint| breakpoint.line == line);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let breakpoint = match breakpoint {
|
|
|
|
|
|
|
|
Some(b) => b,
|
|
|
|
|
|
|
|
None => return None,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let mut style =
|
|
|
|
|
|
|
|
if breakpoint.condition.is_some() && breakpoint.log_message.is_some() {
|
|
|
|
|
|
|
|
error.add_modifier(Modifier::UNDERLINED)
|
|
|
|
|
|
|
|
} else if breakpoint.condition.is_some() {
|
|
|
|
|
|
|
|
error
|
|
|
|
|
|
|
|
} else if breakpoint.log_message.is_some() {
|
|
|
|
|
|
|
|
info
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
warning
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if !breakpoint.verified {
|
|
|
|
|
|
|
|
// Faded colors
|
|
|
|
|
|
|
|
style = if let Some(Color::Rgb(r, g, b)) = style.fg {
|
|
|
|
|
|
|
|
style.fg(Color::Rgb(
|
|
|
|
|
|
|
|
((r as f32) * 0.4).floor() as u8,
|
|
|
|
|
|
|
|
((g as f32) * 0.4).floor() as u8,
|
|
|
|
|
|
|
|
((b as f32) * 0.4).floor() as u8,
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
style.fg(Color::Gray)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: also handle breakpoints only present in the user struct
|
|
|
|
|
|
|
|
use std::fmt::Write;
|
|
|
|
|
|
|
|
let sym = if breakpoint.verified { "▲" } else { "⊚" };
|
|
|
|
|
|
|
|
write!(out, "{}", sym).unwrap();
|
|
|
|
|
|
|
|
Some(style)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let mut stack_frame: Option<&StackFrame> = None;
|
|
|
|
// let mut stack_frame: Option<&StackFrame> = None;
|
|
|
|
// if let Some(path) = doc.path() {
|
|
|
|
// if let Some(path) = doc.path() {
|
|
|
|
// if let Some(debugger) = debugger {
|
|
|
|
// if let Some(debugger) = debugger {
|
|
|
|