use core::ops::Range;
use crate::{DocId, Point};
pub trait SignatureHelp {
fn signature(&mut self, cx: &SignatureCx) -> Option<SignatureInfo>;
}
#[derive(Clone, Debug)]
pub struct SignatureCx {
pub doc: DocId,
pub revision: u64,
pub position: Point,
pub lookback: String,
}
#[derive(Clone, Debug)]
pub struct SignatureInfo {
pub label: String,
pub params: Vec<Range<u32>>,
pub active: u32,
pub doc: Option<String>,
}
impl SignatureInfo {
#[must_use]
pub fn active_param(&self) -> Option<Range<u32>> {
self.params.get(self.active as usize).cloned()
}
}