use {
crate::{
TRACER,
database::PartitionWriteContextRef,
protocol::{
jsonrpc,
lsp::{
Command,
DynamicRegistrationClientCapabilities,
PartialResultParams,
Range,
TextDocumentIdentifier,
TextDocumentRegistrationOptions,
WorkDoneProgressParams,
},
},
scheduler::{
lanes::{
self,
Lane,
},
task::TaskContext,
},
},
serde::{
Deserialize,
Serialize,
},
serde_json::Value,
};
pub type CodeLensClientCapabilities = DynamicRegistrationClientCapabilities;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CodeLensOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub resolve_provider: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CodeLensParams {
pub text_document: TextDocumentIdentifier,
#[serde(flatten)]
pub work_done_progress_params: WorkDoneProgressParams,
#[serde(flatten)]
pub partial_result_params: PartialResultParams,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CodeLens {
pub range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub command: Option<Command>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CodeLensWorkspaceClientCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_support: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CodeLensRegistrationOptions {
#[serde(flatten)]
pub text_document_registration_options: TextDocumentRegistrationOptions,
#[serde(flatten)]
pub code_lens_options: CodeLensOptions,
}
pub trait CodeLensService<
P: crate::database::storage::Partitions,
T: crate::protocol::lsp::LanguageServer<P>,
>: Send + Sync + 'static
{
fn code_lens(
&self,
params: CodeLensParams,
ctx: &mut TaskContext<P, T>,
writer: &mut PartitionWriteContextRef<'_, P>,
) -> impl std::future::Future<Output = jsonrpc::Result<Option<Vec<CodeLens>>>> + Send
{
async move {
otel::span!(
"laburnum.lsp.code_lens",
"document.uri" = params.text_document.uri.to_string()
);
let _ = (params, ctx, writer);
Err(jsonrpc::Error::method_not_found())
}
}
const CODE_LENS_LANE: Lane = lanes::DEFAULT_LANE;
fn code_lens_resolve(
&self,
params: CodeLens,
ctx: &mut TaskContext<P, T>,
writer: &mut PartitionWriteContextRef<'_, P>,
) -> impl std::future::Future<Output = jsonrpc::Result<CodeLens>> + Send {
async move {
otel::span!("laburnum.lsp.code_lens_resolve");
let _ = (params, ctx, writer);
Err(jsonrpc::Error::method_not_found())
}
}
const CODE_LENS_RESOLVE_LANE: Lane = lanes::SYNC_LANE;
}