use serde::{Deserialize, Serialize}; use serde_json::Value; use url::Url; use crate::{ DynamicRegistrationClientCapabilities, PartialResultParams, Range, SymbolKind, SymbolTag, TextDocumentPositionParams, WorkDoneProgressOptions, WorkDoneProgressParams, }; pub type CallHierarchyClientCapabilities = DynamicRegistrationClientCapabilities; #[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyOptions { #[serde(flatten)] pub work_done_progress_options: WorkDoneProgressOptions, } #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(untagged)] pub enum CallHierarchyServerCapability { Simple(bool), Options(CallHierarchyOptions), } impl From for CallHierarchyServerCapability { fn from(from: CallHierarchyOptions) -> Self { Self::Options(from) } } impl From for CallHierarchyServerCapability { fn from(from: bool) -> Self { Self::Simple(from) } } #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyPrepareParams { #[serde(flatten)] pub text_document_position_params: TextDocumentPositionParams, #[serde(flatten)] pub work_done_progress_params: WorkDoneProgressParams, } #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyItem { /// The name of this item. pub name: String, /// The kind of this item. pub kind: SymbolKind, /// Tags for this item. #[serde(skip_serializing_if = "Option::is_none")] pub tags: Option>, /// More detail for this item, e.g. the signature of a function. #[serde(skip_serializing_if = "Option::is_none")] pub detail: Option, /// The resource identifier of this item. pub uri: Url, /// The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code. pub range: Range, /// The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. /// Must be contained by the [`range`](#CallHierarchyItem.range). pub selection_range: Range, /// A data entry field that is preserved between a call hierarchy prepare and incloming calls or outgoing calls requests. #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, } #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyIncomingCallsParams { pub item: CallHierarchyItem, #[serde(flatten)] pub work_done_progress_params: WorkDoneProgressParams, #[serde(flatten)] pub partial_result_params: PartialResultParams, } /// Represents an incoming call, e.g. a caller of a method or constructor. #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyIncomingCall { /// The item that makes the call. pub from: CallHierarchyItem, /// The range at which at which the calls appears. This is relative to the caller /// denoted by [`this.from`](#CallHierarchyIncomingCall.from). pub from_ranges: Vec, } #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyOutgoingCallsParams { pub item: CallHierarchyItem, #[serde(flatten)] pub work_done_progress_params: WorkDoneProgressParams, #[serde(flatten)] pub partial_result_params: PartialResultParams, } /// Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc. #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] #[serde(rename_all = "camelCase")] pub struct CallHierarchyOutgoingCall { /// The item that is called. pub to: CallHierarchyItem, /// The range at which this item is called. This is the range relative to the caller, e.g the item /// passed to [`provideCallHierarchyOutgoingCalls`](#CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls) /// and not [`this.to`](#CallHierarchyOutgoingCall.to). pub from_ranges: Vec, }