From dfd499f5a98de9d7c9e8fa977016e6f3bec1ec70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Wed, 1 Dec 2021 12:56:50 +0900 Subject: [PATCH] dap: Highlight line of current stack frame --- helix-term/src/ui/editor.rs | 89 ++++++++++++++----------------------- 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index adea078e..ac11d298 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -72,6 +72,40 @@ impl EditorView { let area = view.area; let theme = &editor.theme; + // DAP: Highlight current stack frame position + let stack_frame = editor.debugger.as_ref().and_then(|debugger| { + if let (Some(frame), Some(thread_id)) = (debugger.active_frame, debugger.thread_id) { + debugger + .stack_frames + .get(&thread_id) + .and_then(|bt| bt.get(frame)) + } else { + None + } + }); + if let Some(frame) = stack_frame { + if doc.path().is_some() + && frame + .source + .as_ref() + .and_then(|source| source.path.as_ref()) + == doc.path() + { + let line = frame.line - 1; // convert to 0-indexing + if line >= view.offset.row && line < view.offset.row + area.height as usize { + surface.set_style( + Rect::new( + area.x, + area.y + (line - view.offset.row) as u16, + area.width, + 1, + ), + theme.get("ui.highlight"), + ); + } + } + } + let highlights = Self::doc_syntax_highlights(doc, view.offset, inner.height, theme, &editor.syn_loader); let highlights = syntax::merge(highlights, Self::doc_diagnostics_highlights(doc, theme)); @@ -417,38 +451,6 @@ impl EditorView { .map(|range| range.cursor_line(text)) .collect(); - // let mut stack_frame: Option<&StackFrame> = None; - // if let Some(path) = doc.path() { - // if let Some(debugger) = debugger { - // // if we have a frame, and the frame path matches document - // if let (Some(frame), Some(thread_id)) = (debugger.active_frame, debugger.thread_id) - // { - // let frame = debugger - // .stack_frames - // .get(&thread_id) - // .and_then(|bt| bt.get(frame)); // TODO: drop the clone.. - // if let Some(StackFrame { - // source: Some(source), - // .. - // }) = &frame - // { - // if source.path.as_ref() == Some(path) { - // stack_frame = frame; - // } - // }; - // }; - // } - // } - // if let Some(frame) = stack_frame { - // if frame.line - 1 == line { - // surface.set_style( - // Rect::new(viewport.x, viewport.y + i as u16, 6, 1), - // helix_view::graphics::Style::default() - // .bg(helix_view::graphics::Color::LightYellow), - // ); - // } - // } - let mut offset = 0; // avoid lots of small allocations by reusing a text buffer for each line @@ -520,29 +522,6 @@ impl EditorView { lines.extend(text.lines); } - // let line = doc.text().char_to_line(cursor); - // let breakpoint = doc - // .path() - // .and_then(|path| all_breakpoints.get(path)) - // .and_then(|breakpoints| { - // breakpoints - // .iter() - // .find(|breakpoint| breakpoint.line == line) - // }); - - // if let Some(breakpoint) = breakpoint { - // if let Some(condition) = &breakpoint.condition { - // lines.extend( - // Text::styled(condition, warning.add_modifier(Modifier::UNDERLINED)).lines, - // ); - // } - // if let Some(log_message) = &breakpoint.log_message { - // lines.extend( - // Text::styled(log_message, info.add_modifier(Modifier::UNDERLINED)).lines, - // ); - // } - // } - let paragraph = Paragraph::new(lines) .alignment(Alignment::Right) .wrap(Wrap { trim: true });