use bynk_ide::documentation::{self, DocModel};
pub fn documentation_model_at(text: &str) -> Option<DocModel> {
documentation::documentation_model(text)
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentationModelParams {
pub text_document: tower_lsp::lsp_types::TextDocumentIdentifier,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct WireDocModel {
#[serde(rename = "unitName")]
pub unit_name: String,
#[serde(rename = "unitKind")]
pub unit_kind: &'static str,
#[serde(rename = "unitDoc")]
pub unit_doc: Option<String>,
#[serde(rename = "unitRange")]
pub unit_range: tower_lsp::lsp_types::Range,
pub entries: Vec<WireDocEntry>,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct WireDocEntry {
pub name: String,
pub kind: &'static str,
pub depth: u32,
pub markdown: String,
pub documented: bool,
pub range: tower_lsp::lsp_types::Range,
}
pub fn to_wire(model: &DocModel, text: &str) -> WireDocModel {
WireDocModel {
unit_name: model.unit_name.clone(),
unit_kind: model.unit_kind,
unit_doc: model.unit_doc.clone(),
unit_range: crate::position::span_to_range(text, model.unit_span),
entries: model
.entries
.iter()
.map(|e| WireDocEntry {
name: e.name.clone(),
kind: e.kind,
depth: e.depth,
markdown: e.markdown.clone(),
documented: e.documented,
range: crate::position::span_to_range(text, e.span),
})
.collect(),
}
}