on master help sign in
Customized completion for template parameters
commit94901b867796459f8dc3c1479eb896547877d769 authorDmitry Sharshakov <d3dx12.xx@gmail.com> dateSat 28 Aug 2021, 19:11 (5 years ago) parentef155e6
5 files changed+36−3
helix-dap/src/types.rs+1 helix-term/src/commands.rs+7 helix-term/src/ui/editor.rs+20−3 helix-view/src/editor.rs+2 languages.toml+6
helix-dap/src/types.rs+1
@@ -7,6 +7,7 @@ use std::{collections::HashMap, path::PathBuf};
77pub struct DebugTemplate {
88 pub name: String,
99 pub request: String,
10+ pub completion: Option<Vec<String>>,
1011 pub args: HashMap<String, String>,
1112}
1213
helix-term/src/commands.rs+7
@@ -4630,6 +4630,13 @@ fn dap_launch(cx: &mut Context) {
46304630 };
46314631
46324632 cx.editor.debug_config_picker = Some(config.templates.iter().map(|t| t.name.clone()).collect());
4633+ cx.editor.debug_config_completions = Some(
4634+ config
4635+ .templates
4636+ .iter()
4637+ .map(|t| t.completion.clone())
4638+ .collect(),
4639+ );
46334640}
46344641
46354642fn dap_toggle_breakpoint(cx: &mut Context) {
helix-term/src/ui/editor.rs+20−3
@@ -25,6 +25,7 @@ use helix_view::{
2525 keyboard::{KeyCode, KeyModifiers},
2626 Document, Editor, Theme, View,
2727};
28+use log::warn;
2829use std::borrow::Cow;
2930
3031use crossterm::event::{Event, MouseButton, MouseEvent, MouseEventKind};
@@ -729,14 +730,30 @@ impl EditorView {
729730 code: KeyCode::Char(char),
730731 ..
731732 } => {
732− let name = match picker.iter().find(|t| t.starts_with(char)) {
733− Some(n) => n.clone(),
733+ let (i, name) = match picker.iter().position(|t| t.starts_with(char)) {
734+ Some(pos) => (pos, picker.get(pos).unwrap().clone()),
734735 None => return None,
735736 };
737+ let completions = cxt.editor.debug_config_completions.clone().unwrap();
738+ let noop = |_input: &str| Vec::new();
739+ let completer = match completions.get(i) {
740+ Some(Some(completion)) => {
741+ match completion.get(0).and_then(|x| Some(x.as_str())) {
742+ Some("filename") => super::completers::filename,
743+ Some("directory") => super::completers::directory,
744+ Some(complete) => {
745+ warn!("Unknown debug config autocompleter: {}", complete);
746+ noop
747+ }
748+ None => noop,
749+ }
750+ }
751+ _ => noop,
752+ };
736753 let prompt = Prompt::new(
737754 "arg:".to_owned(),
738755 None,
739− super::completers::filename,
756+ completer,
740757 move |cx: &mut crate::compositor::Context,
741758 input: &str,
742759 event: PromptEvent| {
helix-view/src/editor.rs+2
@@ -77,6 +77,7 @@ pub struct Editor {
7777 pub debugger: Option<helix_dap::Client>,
7878 pub debugger_events: SelectAll<UnboundedReceiverStream<helix_dap::Payload>>,
7979 pub debug_config_picker: Option<Vec<String>>,
80+ pub debug_config_completions: Option<Vec<Option<Vec<String>>>>,
8081 pub variables: Option<Vec<String>>,
8182 pub variables_page: usize,
8283
@@ -120,6 +121,7 @@ impl Editor {
120121 debugger: None,
121122 debugger_events: SelectAll::new(),
122123 debug_config_picker: None,
124+ debug_config_completions: None,
123125 variables: None,
124126 variables_page: 0,
125127 syn_loader: config_loader,
languages.toml+6
@@ -30,6 +30,7 @@ port-arg = "-p {}"
3030[[language.debugger.templates]]
3131name = "binary"
3232request = "launch"
33+completion = [ "filename" ]
3334args = { console = "internalConsole", program = "{0}" }
3435
3536[[language.debugger.templates]]
@@ -97,6 +98,7 @@ port-arg = "-p {}"
9798[[language.debugger.templates]]
9899name = "binary"
99100request = "launch"
101+completion = [ "filename" ]
100102args = { console = "internalConsole", program = "{0}" }
101103
102104[[language.debugger.templates]]
@@ -125,6 +127,7 @@ port-arg = "-p {}"
125127[[language.debugger.templates]]
126128name = "binary"
127129request = "launch"
130+completion = [ "filename" ]
128131args = { console = "internalConsole", program = "{0}" }
129132
130133[[language.debugger.templates]]
@@ -155,16 +158,19 @@ port-arg = "-l 127.0.0.1:{}"
155158[[language.debugger.templates]]
156159name = "source"
157160request = "launch"
161+completion = [ "filename" ]
158162args = { mode = "debug", program = "{0}" }
159163
160164[[language.debugger.templates]]
161165name = "binary"
162166request = "launch"
167+completion = [ "filename" ]
163168args = { mode = "exec", program = "{0}" }
164169
165170[[language.debugger.templates]]
166171name = "test"
167172request = "launch"
173+completion = [ "directory" ]
168174args = { mode = "test", program = "{0}" }
169175
170176[[language.debugger.templates]]