laburnum 1.17.0

An LSP framework for building language servers and compilers, powered by an incremental query tree with content-addressed storage, task-based dataflow, and parallel queries.
Documentation
// Copyright Two Neutron Stars Incorporated and contributors
// SPDX-License-Identifier: BlueOak-1.0.0

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;
}