diff options
author | Blaž Hrastnik | 2021-11-30 08:55:40 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-11-30 08:56:00 +0000 |
commit | 30ac5869dfc514696085063f5c84d4be1aebf781 (patch) | |
tree | f9d217bc5ce3b48967f56310834373f6d124472f | |
parent | 8ffafb826faa75c76f74af3350d73adceb24e81d (diff) |
dap: Extract diagnostics gutter into gutters.rs
-rw-r--r-- | helix-term/src/ui/editor.rs | 64 | ||||
-rw-r--r-- | helix-view/src/gutter.rs | 62 | ||||
-rw-r--r-- | helix-view/src/view.rs | 6 |
3 files changed, 67 insertions, 65 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index a3421991..aea384df 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -17,7 +17,7 @@ use helix_core::{ }; use helix_view::{ document::{Mode, SCRATCH_BUFFER_NAME}, - graphics::{Color, CursorKind, Modifier, Rect, Style}, + graphics::{CursorKind, Modifier, Rect, Style}, info::Info, input::KeyEvent, keyboard::{KeyCode, KeyModifiers}, @@ -419,68 +419,6 @@ impl EditorView { .map(|range| range.cursor_line(text)) .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; // if let Some(path) = doc.path() { // if let Some(debugger) = debugger { diff --git a/helix-view/src/gutter.rs b/helix-view/src/gutter.rs index 8dc243c3..ab5c6d16 100644 --- a/helix-view/src/gutter.rs +++ b/helix-view/src/gutter.rs @@ -1,6 +1,9 @@ use std::fmt::Write; -use crate::{graphics::Style, Document, Editor, Theme, View}; +use crate::{ + graphics::{Color, Modifier, Style}, + Document, Editor, Theme, View, +}; pub type GutterFn<'doc> = Box<dyn Fn(usize, bool, &mut String) -> Option<Style> + 'doc>; pub type Gutter = @@ -93,3 +96,60 @@ const fn abs_diff(a: usize, b: usize) -> usize { b - a } } + +pub fn breakpoints<'doc>( + editor: &'doc Editor, + doc: &'doc Document, + _view: &View, + theme: &Theme, + _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 + let sym = if breakpoint.verified { "▲" } else { "⊚" }; + write!(out, "{}", sym).unwrap(); + Some(style) + }) +} diff --git a/helix-view/src/view.rs b/helix-view/src/view.rs index 78b3eb24..7a2d255a 100644 --- a/helix-view/src/view.rs +++ b/helix-view/src/view.rs @@ -64,7 +64,11 @@ impl JumpList { } } -const GUTTERS: &[(Gutter, usize)] = &[(gutter::diagnostic, 1), (gutter::line_number, 5)]; +const GUTTERS: &[(Gutter, usize)] = &[ + (gutter::breakpoints, 1), + (gutter::diagnostic, 1), + (gutter::line_number, 5), +]; #[derive(Debug)] pub struct View { |