lsp_types/
call_hierarchy.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use url::Url;
4
5use crate::{
6    DynamicRegistrationClientCapabilities, PartialResultParams, Range, SymbolKind, SymbolTag,
7    TextDocumentPositionParams, WorkDoneProgressOptions, WorkDoneProgressParams,
8};
9
10pub type CallHierarchyClientCapabilities = DynamicRegistrationClientCapabilities;
11
12#[derive(Debug, Eq, PartialEq, Clone, Default, Deserialize, Serialize, Copy)]
13#[serde(rename_all = "camelCase")]
14pub struct CallHierarchyOptions {
15    #[serde(flatten)]
16    pub work_done_progress_options: WorkDoneProgressOptions,
17}
18
19#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize, Copy)]
20#[serde(untagged)]
21pub enum CallHierarchyServerCapability {
22    Simple(bool),
23    Options(CallHierarchyOptions),
24}
25
26impl From<CallHierarchyOptions> for CallHierarchyServerCapability {
27    fn from(from: CallHierarchyOptions) -> Self {
28        Self::Options(from)
29    }
30}
31
32impl From<bool> for CallHierarchyServerCapability {
33    fn from(from: bool) -> Self {
34        Self::Simple(from)
35    }
36}
37
38#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct CallHierarchyPrepareParams {
41    #[serde(flatten)]
42    pub text_document_position_params: TextDocumentPositionParams,
43
44    #[serde(flatten)]
45    pub work_done_progress_params: WorkDoneProgressParams,
46}
47
48#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
49#[serde(rename_all = "camelCase")]
50pub struct CallHierarchyItem {
51    /// The name of this item.
52    pub name: String,
53
54    /// The kind of this item.
55    pub kind: SymbolKind,
56
57    /// Tags for this item.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub tags: Option<Vec<SymbolTag>>,
60
61    /// More detail for this item, e.g. the signature of a function.
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub detail: Option<String>,
64
65    /// The resource identifier of this item.
66    pub uri: Url,
67
68    /// The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code.
69    pub range: Range,
70
71    /// The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function.
72    /// Must be contained by the [`range`](#CallHierarchyItem.range).
73    pub selection_range: Range,
74
75    /// A data entry field that is preserved between a call hierarchy prepare and incoming calls or outgoing calls requests.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub data: Option<Value>,
78}
79
80#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
81#[serde(rename_all = "camelCase")]
82pub struct CallHierarchyIncomingCallsParams {
83    pub item: CallHierarchyItem,
84
85    #[serde(flatten)]
86    pub work_done_progress_params: WorkDoneProgressParams,
87
88    #[serde(flatten)]
89    pub partial_result_params: PartialResultParams,
90}
91
92/// Represents an incoming call, e.g. a caller of a method or constructor.
93#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
94#[serde(rename_all = "camelCase")]
95pub struct CallHierarchyIncomingCall {
96    /// The item that makes the call.
97    pub from: CallHierarchyItem,
98
99    /// The range at which at which the calls appears. This is relative to the caller
100    /// denoted by [`this.from`](#CallHierarchyIncomingCall.from).
101    pub from_ranges: Vec<Range>,
102}
103
104#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
105#[serde(rename_all = "camelCase")]
106pub struct CallHierarchyOutgoingCallsParams {
107    pub item: CallHierarchyItem,
108
109    #[serde(flatten)]
110    pub work_done_progress_params: WorkDoneProgressParams,
111
112    #[serde(flatten)]
113    pub partial_result_params: PartialResultParams,
114}
115
116/// Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc.
117#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
118#[serde(rename_all = "camelCase")]
119pub struct CallHierarchyOutgoingCall {
120    /// The item that is called.
121    pub to: CallHierarchyItem,
122
123    /// The range at which this item is called. This is the range relative to the caller, e.g the item
124    /// passed to [`provideCallHierarchyOutgoingCalls`](#CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls)
125    /// and not [`this.to`](#CallHierarchyOutgoingCall.to).
126    pub from_ranges: Vec<Range>,
127}