dap: support arrays as arguments
This commit is contained in:
parent
d6e8a44d85
commit
6aa9838ea6
2 changed files with 30 additions and 7 deletions
|
@ -104,13 +104,20 @@ pub enum DebugConfigCompletion {
|
||||||
Advanced(AdvancedCompletion),
|
Advanced(AdvancedCompletion),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum DebugArgumentValue {
|
||||||
|
String(String),
|
||||||
|
Array(Vec<String>),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
pub struct DebugTemplate {
|
pub struct DebugTemplate {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub request: String,
|
pub request: String,
|
||||||
pub completion: Vec<DebugConfigCompletion>,
|
pub completion: Vec<DebugConfigCompletion>,
|
||||||
pub args: HashMap<String, String>,
|
pub args: HashMap<String, DebugArgumentValue>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
||||||
|
|
|
@ -5,7 +5,10 @@ use crate::{
|
||||||
job::Callback,
|
job::Callback,
|
||||||
ui::{FilePicker, Prompt, PromptEvent},
|
ui::{FilePicker, Prompt, PromptEvent},
|
||||||
};
|
};
|
||||||
use helix_core::{syntax::DebugConfigCompletion, Selection};
|
use helix_core::{
|
||||||
|
syntax::{DebugArgumentValue, DebugConfigCompletion},
|
||||||
|
Selection,
|
||||||
|
};
|
||||||
use helix_dap::{self as dap, Client, ThreadId};
|
use helix_dap::{self as dap, Client, ThreadId};
|
||||||
use helix_lsp::block_on;
|
use helix_lsp::block_on;
|
||||||
|
|
||||||
|
@ -239,13 +242,26 @@ pub fn dap_start_impl(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// For param #0 replace {0} in args
|
// For param #0 replace {0} in args
|
||||||
value = value.replace(format!("{{{}}}", i).as_str(), ¶m);
|
value = match value {
|
||||||
|
DebugArgumentValue::String(v) => {
|
||||||
|
DebugArgumentValue::String(v.replace(format!("{{{}}}", i).as_str(), ¶m))
|
||||||
|
}
|
||||||
|
DebugArgumentValue::Array(arr) => DebugArgumentValue::Array(
|
||||||
|
arr.iter()
|
||||||
|
.map(|v| v.replace(format!("{{{}}}", i).as_str(), ¶m))
|
||||||
|
.collect(),
|
||||||
|
),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Ok(integer) = value.parse::<usize>() {
|
if let DebugArgumentValue::String(string) = value {
|
||||||
args.insert(k, Value::Number(serde_json::Number::from(integer)));
|
if let Ok(integer) = string.parse::<usize>() {
|
||||||
} else {
|
args.insert(k, to_value(integer).unwrap());
|
||||||
args.insert(k, Value::String(value));
|
} else {
|
||||||
|
args.insert(k, to_value(string).unwrap());
|
||||||
|
}
|
||||||
|
} else if let DebugArgumentValue::Array(arr) = value {
|
||||||
|
args.insert(k, to_value(arr).unwrap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue