on master help sign in
dap: Extract a macro that fetches a debugger or returns
d8351d3Blaž Hrastnik
helix-term/src/commands/dap.rs+24−56
@@ -21,6 +21,16 @@ use std::path::PathBuf;
21
21
22use anyhow::{anyhow, bail};
22use anyhow::{anyhow, bail};
23
23
24+#[macro_export]
25+macro_rules! debugger {
26+ ($editor:expr) => {{
27+ match &mut $editor.debugger {
28+ Some(debugger) => debugger,
29+ None => return,
30+ }
31+ }};
32+}
33+
24// general utils:
34// general utils:
25pub fn dap_pos_to_pos(doc: &helix_core::Rope, line: usize, column: usize) -> Option<usize> {
35pub fn dap_pos_to_pos(doc: &helix_core::Rope, line: usize, column: usize) -> Option<usize> {
26 // 1-indexing to 0 indexing
36 // 1-indexing to 0 indexing
@@ -42,10 +52,7 @@ pub fn resume_application(debugger: &mut Client) {
42}
52}
43
53
44pub async fn select_thread_id(editor: &mut Editor, thread_id: ThreadId, force: bool) {
54pub async fn select_thread_id(editor: &mut Editor, thread_id: ThreadId, force: bool) {
45− let debugger = match &mut editor.debugger {
55+ let debugger = debugger!(editor);
46− Some(debugger) => debugger,
47− None => return,
48− };
49
56
50 if !force && debugger.thread_id.is_some() {
57 if !force && debugger.thread_id.is_some() {
51 return;
58 return;
@@ -103,10 +110,7 @@ fn thread_picker(
103 cx: &mut Context,
110 cx: &mut Context,
104 callback_fn: impl Fn(&mut Editor, &dap::Thread) + Send + 'static,
111 callback_fn: impl Fn(&mut Editor, &dap::Thread) + Send + 'static,
105) {
112) {
106− let debugger = match &mut cx.editor.debugger {
113+ let debugger = debugger!(cx.editor);
107− Some(debugger) => debugger,
108− None => return,
109− };
110
114
111 let future = debugger.threads();
115 let future = debugger.threads();
112 dap_callback(
116 dap_callback(
@@ -505,10 +509,7 @@ pub fn dap_toggle_breakpoint_impl(cx: &mut Context, path: PathBuf, line: usize)
505 });
509 });
506 }
510 }
507
511
508− let debugger = match &mut cx.editor.debugger {
512+ let debugger = debugger!(cx.editor);
509− Some(debugger) => debugger,
510− None => return,
511− };
512
513
513 if let Err(e) = breakpoints_changed(debugger, path, breakpoints) {
514 if let Err(e) = breakpoints_changed(debugger, path, breakpoints) {
514 cx.editor
515 cx.editor
@@ -517,10 +518,7 @@ pub fn dap_toggle_breakpoint_impl(cx: &mut Context, path: PathBuf, line: usize)
517}
518}
518
519
519pub fn dap_continue(cx: &mut Context) {
520pub fn dap_continue(cx: &mut Context) {
520− let debugger = match &mut cx.editor.debugger {
521+ let debugger = debugger!(cx.editor);
521− Some(debugger) => debugger,
522− None => return,
523− };
524
522
525 if let Some(thread_id) = debugger.thread_id {
523 if let Some(thread_id) = debugger.thread_id {
526 let request = debugger.continue_thread(thread_id);
524 let request = debugger.continue_thread(thread_id);
@@ -550,10 +548,7 @@ pub fn dap_pause(cx: &mut Context) {
550}
548}
551
549
552pub fn dap_step_in(cx: &mut Context) {
550pub fn dap_step_in(cx: &mut Context) {
553− let debugger = match &mut cx.editor.debugger {
551+ let debugger = debugger!(cx.editor);
554− Some(debugger) => debugger,
555− None => return,
556− };
557
552
558 if let Some(thread_id) = debugger.thread_id {
553 if let Some(thread_id) = debugger.thread_id {
559 let request = debugger.step_in(thread_id);
554 let request = debugger.step_in(thread_id);
@@ -569,10 +564,7 @@ pub fn dap_step_in(cx: &mut Context) {
569}
564}
570
565
571pub fn dap_step_out(cx: &mut Context) {
566pub fn dap_step_out(cx: &mut Context) {
572− let debugger = match &mut cx.editor.debugger {
567+ let debugger = debugger!(cx.editor);
573− Some(debugger) => debugger,
574− None => return,
575− };
576
568
577 if let Some(thread_id) = debugger.thread_id {
569 if let Some(thread_id) = debugger.thread_id {
578 let request = debugger.step_out(thread_id);
570 let request = debugger.step_out(thread_id);
@@ -588,10 +580,7 @@ pub fn dap_step_out(cx: &mut Context) {
588}
580}
589
581
590pub fn dap_next(cx: &mut Context) {
582pub fn dap_next(cx: &mut Context) {
591− let debugger = match &mut cx.editor.debugger {
583+ let debugger = debugger!(cx.editor);
592− Some(debugger) => debugger,
593− None => return,
594− };
595
584
596 if let Some(thread_id) = debugger.thread_id {
585 if let Some(thread_id) = debugger.thread_id {
597 let request = debugger.next(thread_id);
586 let request = debugger.next(thread_id);
@@ -607,10 +596,7 @@ pub fn dap_next(cx: &mut Context) {
607}
596}
608
597
609pub fn dap_variables(cx: &mut Context) {
598pub fn dap_variables(cx: &mut Context) {
610− let debugger = match &mut cx.editor.debugger {
599+ let debugger = debugger!(cx.editor);
611− Some(debugger) => debugger,
612− None => return,
613− };
614
600
615 if debugger.thread_id.is_none() {
601 if debugger.thread_id.is_none() {
616 cx.editor
602 cx.editor
@@ -657,10 +643,7 @@ pub fn dap_variables(cx: &mut Context) {
657}
643}
658
644
659pub fn dap_terminate(cx: &mut Context) {
645pub fn dap_terminate(cx: &mut Context) {
660− let debugger = match &mut cx.editor.debugger {
646+ let debugger = debugger!(cx.editor);
661− Some(debugger) => debugger,
662− None => return,
663− };
664
647
665 let request = debugger.disconnect();
648 let request = debugger.disconnect();
666 if let Err(e) = block_on(request) {
649 if let Err(e) = block_on(request) {
@@ -671,10 +654,7 @@ pub fn dap_terminate(cx: &mut Context) {
671}
654}
672
655
673pub fn dap_enable_exceptions(cx: &mut Context) {
656pub fn dap_enable_exceptions(cx: &mut Context) {
674− let debugger = match &mut cx.editor.debugger {
657+ let debugger = debugger!(cx.editor);
675− Some(debugger) => debugger,
676− None => return,
677− };
678
658
679 let filters = match &debugger.capabilities().exception_breakpoint_filters {
659 let filters = match &debugger.capabilities().exception_breakpoint_filters {
680 Some(filters) => filters.iter().map(|f| f.filter.clone()).collect(),
660 Some(filters) => filters.iter().map(|f| f.filter.clone()).collect(),
@@ -688,10 +668,7 @@ pub fn dap_enable_exceptions(cx: &mut Context) {
688}
668}
689
669
690pub fn dap_disable_exceptions(cx: &mut Context) {
670pub fn dap_disable_exceptions(cx: &mut Context) {
691− let debugger = match &mut cx.editor.debugger {
671+ let debugger = debugger!(cx.editor);
692− Some(debugger) => debugger,
693− None => return,
694− };
695
672
696 if let Err(e) = block_on(debugger.set_exception_breakpoints(vec![])) {
673 if let Err(e) = block_on(debugger.set_exception_breakpoints(vec![])) {
697 cx.editor
674 cx.editor
@@ -724,10 +701,7 @@ pub fn dap_edit_condition(cx: &mut Context) {
724 input => Some(input.to_owned()),
701 input => Some(input.to_owned()),
725 };
702 };
726
703
727− let debugger = match &mut cx.editor.debugger {
704+ let debugger = debugger!(cx.editor);
728− Some(debugger) => debugger,
729− None => return,
730− };
731
705
732 if let Err(e) = breakpoints_changed(debugger, path.clone(), breakpoints)
706 if let Err(e) = breakpoints_changed(debugger, path.clone(), breakpoints)
733 {
707 {
@@ -771,10 +745,7 @@ pub fn dap_edit_log(cx: &mut Context) {
771 input => Some(input.to_owned()),
745 input => Some(input.to_owned()),
772 };
746 };
773
747
774− let debugger = match &mut cx.editor.debugger {
748+ let debugger = debugger!(cx.editor);
775− Some(debugger) => debugger,
776− None => return,
777− };
778 if let Err(e) = breakpoints_changed(debugger, path.clone(), breakpoints)
749 if let Err(e) = breakpoints_changed(debugger, path.clone(), breakpoints)
779 {
750 {
780 cx.editor
751 cx.editor
@@ -799,10 +770,7 @@ pub fn dap_switch_thread(cx: &mut Context) {
799 })
770 })
800}
771}
801pub fn dap_switch_stack_frame(cx: &mut Context) {
772pub fn dap_switch_stack_frame(cx: &mut Context) {
802− let debugger = match &mut cx.editor.debugger {
773+ let debugger = debugger!(cx.editor);
803− Some(debugger) => debugger,
804− None => return,
805− };
806
774
807 let thread_id = match debugger.thread_id {
775 let thread_id = match debugger.thread_id {
808 Some(thread_id) => thread_id,
776 Some(thread_id) => thread_id,