use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Position2D {
pub line: u32,
pub character: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Range {
pub start: Position2D,
pub end: Position2D,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub uri: String,
pub range: Range,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HoverResult {
pub contents: String,
pub range: Option<Range>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefinitionResult {
pub locations: Vec<Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReferencesResult {
pub locations: Vec<Location>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DiagnosticSeverity {
Error,
Warning,
Information,
Hint,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Diagnostic {
pub range: Range,
pub severity: DiagnosticSeverity,
pub message: String,
pub code: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiagnosticsResult {
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TextEdit {
pub range: Range,
pub new_text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentChanges {
pub uri: String,
pub edits: Vec<TextEdit>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RenameResult {
pub changes: Vec<DocumentChanges>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Completion {
pub label: String,
pub kind: Option<String>,
pub detail: Option<String>,
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionsResult {
pub items: Vec<Completion>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Symbol {
pub name: String,
pub kind: String,
pub range: Range,
pub selection_range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub children: Option<Vec<Self>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentSymbolsResult {
pub symbols: Vec<Symbol>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FormatDocumentResult {
pub edits: Vec<TextEdit>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkspaceSymbol {
pub name: String,
pub kind: String,
pub location: Location,
#[serde(skip_serializing_if = "Option::is_none")]
pub container_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkspaceSymbolResult {
pub symbols: Vec<WorkspaceSymbol>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodeAction {
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub diagnostics: Vec<Diagnostic>,
#[serde(skip_serializing_if = "Option::is_none")]
pub edit: Option<WorkspaceEditDescription>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command: Option<CommandDescription>,
#[serde(default)]
pub is_preferred: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkspaceEditDescription {
pub changes: Vec<DocumentChanges>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommandDescription {
pub title: String,
pub command: String,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub arguments: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodeActionsResult {
pub actions: Vec<CodeAction>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallHierarchyItemResult {
pub name: String,
pub kind: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
pub uri: String,
pub range: Range,
#[serde(rename = "selectionRange")]
pub selection_range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallHierarchyPrepareResult {
pub items: Vec<CallHierarchyItemResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IncomingCall {
pub from: CallHierarchyItemResult,
pub from_ranges: Vec<Range>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IncomingCallsResult {
pub calls: Vec<IncomingCall>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OutgoingCall {
pub to: CallHierarchyItemResult,
pub from_ranges: Vec<Range>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OutgoingCallsResult {
pub calls: Vec<OutgoingCall>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerLogsResult {
pub logs: Vec<crate::bridge::notifications::LogEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerMessagesResult {
pub messages: Vec<crate::bridge::notifications::ServerMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignatureParameter {
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignatureInfo {
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub documentation: Option<String>,
pub parameters: Vec<SignatureParameter>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignatureHelpResult {
pub signatures: Vec<SignatureInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_signature: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_parameter: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocationsResult {
pub locations: Vec<Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlayHintEntry {
pub position: Position2D,
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub padding_left: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub padding_right: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tooltip: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InlayHintsResult {
pub hints: Vec<InlayHintEntry>,
}