use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Position {
pub line: u32,
pub character: u32,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Range {
pub start: Position,
pub end: Position,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub uri: String,
pub range: Range,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextEdit {
pub range: Range,
pub new_text: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InitializeParams {
pub workspace_folders: Option<Vec<WorkspaceFolder>>,
pub root_uri: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct WorkspaceFolder {
pub uri: String,
}
#[derive(Debug, Deserialize)]
pub struct TextDocumentIdentifier {
pub uri: String,
}
#[derive(Debug, Deserialize)]
pub struct VersionedTextDocumentIdentifier {
pub uri: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextDocumentItem {
pub uri: String,
pub text: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextDocumentPositionParams {
pub text_document: TextDocumentIdentifier,
pub position: Position,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DidOpenTextDocumentParams {
pub text_document: TextDocumentItem,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DidSaveTextDocumentParams {
pub text_document: TextDocumentIdentifier,
pub text: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DidChangeTextDocumentParams {
pub text_document: VersionedTextDocumentIdentifier,
pub content_changes: Vec<TextDocumentContentChangeEvent>,
}
#[derive(Debug, Deserialize)]
pub struct TextDocumentContentChangeEvent {
pub text: String,
}
#[derive(Debug, Deserialize)]
pub struct DidChangeWorkspaceFoldersParams {
pub event: WorkspaceFoldersChangeEvent,
}
#[derive(Debug, Deserialize)]
pub struct WorkspaceFoldersChangeEvent {
pub added: Vec<WorkspaceFolder>,
pub removed: Vec<WorkspaceFolder>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentSymbolParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Debug, Deserialize)]
pub struct WorkspaceSymbolParams {
pub query: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RenameParams {
pub text_document: TextDocumentIdentifier,
pub position: Position,
pub new_name: String,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReferenceParams {
pub text_document: TextDocumentIdentifier,
pub position: Position,
}
#[derive(Debug, Deserialize)]
pub struct TypeHierarchyParams {
pub item: HierarchyItem,
}
#[derive(Debug, Deserialize)]
pub struct CallHierarchyParams {
pub item: HierarchyItem,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentSymbol {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
pub kind: u32,
pub range: Range,
pub selection_range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub children: Option<Vec<Self>>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SymbolInformation {
pub name: String,
pub kind: u32,
pub location: Location,
#[serde(skip_serializing_if = "Option::is_none")]
pub container_name: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceEdit {
#[serde(skip_serializing_if = "Option::is_none")]
pub changes: Option<std::collections::HashMap<String, Vec<TextEdit>>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct Diagnostic {
pub range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
pub message: String,
}
#[derive(Debug, Serialize)]
pub struct PublishDiagnosticsParams {
pub uri: String,
pub diagnostics: Vec<Diagnostic>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HierarchyItem {
pub name: String,
pub kind: u32,
pub uri: String,
pub range: Range,
pub selection_range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize)]
pub struct DocumentLink {
pub range: Range,
#[serde(skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FoldingRange {
pub start_line: u32,
pub end_line: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct Hover {
pub contents: MarkupContent,
}
#[derive(Debug, Clone, Serialize)]
pub struct MarkupContent {
pub kind: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct FullDocumentDiagnosticReport {
pub kind: String,
pub items: Vec<Diagnostic>,
}
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceDocumentDiagnosticReport {
pub kind: String,
pub uri: String,
pub items: Vec<Diagnostic>,
}
#[derive(Debug, Clone, Serialize)]
pub struct WorkspaceDiagnosticReport {
pub items: Vec<WorkspaceDocumentDiagnosticReport>,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentFormattingParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentDiagnosticParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokensParams {
pub text_document: TextDocumentIdentifier,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokensRangeParams {
pub text_document: TextDocumentIdentifier,
pub range: Range,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SemanticTokens {
pub data: Vec<u32>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CompletionItem {
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text_edit: Option<TextEdit>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CompletionList {
pub is_incomplete: bool,
pub items: Vec<CompletionItem>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CallHierarchyIncomingCall {
pub from: HierarchyItem,
pub from_ranges: Vec<Range>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CallHierarchyOutgoingCall {
pub to: HierarchyItem,
pub from_ranges: Vec<Range>,
}
pub mod symbol_kind {
pub const FILE: u32 = 1;
pub const MODULE: u32 = 2;
pub const CLASS: u32 = 5;
pub const FIELD: u32 = 8;
pub const FUNCTION: u32 = 12;
pub const CONSTANT: u32 = 14;
pub const OBJECT: u32 = 19;
pub const STRUCT: u32 = 23;
pub const EVENT: u32 = 24;
}
pub mod completion_item_kind {
pub const VALUE: u32 = 12;
pub const KEYWORD: u32 = 14;
pub const FILE: u32 = 17;
pub const REFERENCE: u32 = 18;
pub const FOLDER: u32 = 19;
pub const CONSTANT: u32 = 21;
}
pub mod diagnostic_severity {
pub const ERROR: u32 = 1;
pub const WARNING: u32 = 2;
pub const INFORMATION: u32 = 3;
pub const HINT: u32 = 4;
}
pub mod method {
pub const DID_OPEN: &str = "textDocument/didOpen";
pub const DID_SAVE: &str = "textDocument/didSave";
pub const DID_CHANGE: &str = "textDocument/didChange";
pub const DID_CHANGE_WORKSPACE_FOLDERS: &str = "workspace/didChangeWorkspaceFolders";
pub const PUBLISH_DIAGNOSTICS: &str = "textDocument/publishDiagnostics";
pub const DOCUMENT_SYMBOL: &str = "textDocument/documentSymbol";
pub const WORKSPACE_SYMBOL: &str = "workspace/symbol";
pub const PREPARE_RENAME: &str = "textDocument/prepareRename";
pub const RENAME: &str = "textDocument/rename";
pub const REFERENCES: &str = "textDocument/references";
pub const DECLARATION: &str = "textDocument/declaration";
pub const DEFINITION: &str = "textDocument/definition";
pub const TYPE_DEFINITION: &str = "textDocument/typeDefinition";
pub const IMPLEMENTATION: &str = "textDocument/implementation";
pub const PREPARE_TYPE_HIERARCHY: &str = "textDocument/prepareTypeHierarchy";
pub const TYPE_HIERARCHY_SUPERTYPES: &str = "typeHierarchy/supertypes";
pub const TYPE_HIERARCHY_SUBTYPES: &str = "typeHierarchy/subtypes";
pub const PREPARE_CALL_HIERARCHY: &str = "textDocument/prepareCallHierarchy";
pub const CALL_HIERARCHY_INCOMING: &str = "callHierarchy/incomingCalls";
pub const CALL_HIERARCHY_OUTGOING: &str = "callHierarchy/outgoingCalls";
pub const DOCUMENT_LINK: &str = "textDocument/documentLink";
pub const FOLDING_RANGE: &str = "textDocument/foldingRange";
pub const HOVER: &str = "textDocument/hover";
pub const DOCUMENT_DIAGNOSTIC: &str = "textDocument/diagnostic";
pub const WORKSPACE_DIAGNOSTIC: &str = "workspace/diagnostic";
pub const FORMATTING: &str = "textDocument/formatting";
pub const COMPLETION: &str = "textDocument/completion";
pub const SEMANTIC_TOKENS_FULL: &str = "textDocument/semanticTokens/full";
pub const SEMANTIC_TOKENS_RANGE: &str = "textDocument/semanticTokens/range";
}