use {
crate::{
TRACER,
database::PartitionWriteContextRef,
protocol::{
jsonrpc,
lsp::LSPAny,
},
scheduler::task::TaskContext,
},
serde::{
Deserialize,
Serialize,
},
};
pub type ExecuteCommandClientCapabilities =
crate::protocol::lsp::DynamicRegistrationClientCapabilities;
#[derive(Debug, Default, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct ExecuteCommandOptions {
pub commands: Vec<String>,
#[serde(flatten)]
pub work_done_progress_options: crate::protocol::lsp::WorkDoneProgressOptions,
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct ExecuteCommandParams {
pub command: String,
#[serde(default)]
pub arguments: Vec<serde_json::Value>,
#[serde(flatten)]
pub work_done_progress_params: crate::protocol::lsp::WorkDoneProgressParams,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct ExecuteCommandRegistrationOptions {
pub commands: Vec<String>,
#[serde(flatten)]
pub execute_command_options: ExecuteCommandOptions,
}
pub trait ExecuteCommandService<
P: crate::database::storage::Partitions,
T: crate::protocol::lsp::LanguageServer<P>,
>: Send + Sync + 'static
{
fn execute_command(
&self,
params: ExecuteCommandParams,
ctx: &mut TaskContext<P, T>,
writer: &mut PartitionWriteContextRef<'_, P>,
) -> impl std::future::Future<Output = jsonrpc::Result<Option<LSPAny>>> + Send
{
async move {
otel::span!(
"laburnum.lsp.execute_command",
"command" = params.command.to_string(),
"arguments.count" = params.arguments.len() as i64
);
let _ = params;
Err(jsonrpc::Error::method_not_found())
}
}
const EXECUTE_COMMAND_LANE: crate::scheduler::lanes::Lane =
crate::scheduler::lanes::DEFAULT_LANE;
}