omena-lsp-server 0.1.4

Rust LSP server boundary and multi-editor runtime for Omena
Documentation
use crate::{
    LspTextDocumentState, build_source_syntax_index, collect_style_hover_candidates,
    source_selector_candidates_from_index, summarize_style_document,
};
use serde::Serialize;

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RustQueryReuseBoundaryV0 {
    pub product: &'static str,
    pub owner: &'static str,
    pub reuse_model: &'static str,
    pub cached_surfaces: Vec<&'static str>,
    pub invalidation_policy: Vec<&'static str>,
    pub request_path_policy: Vec<&'static str>,
}

pub fn rust_query_reuse_contract() -> RustQueryReuseBoundaryV0 {
    RustQueryReuseBoundaryV0 {
        product: "omena-lsp-server.query-reuse",
        owner: "omena-lsp-server/documentQueryReuse",
        reuse_model: "documentRevisionOwnedReusableIndexes",
        cached_surfaces: vec![
            "styleDocumentSummary",
            "styleHoverCandidates",
            "sourceSyntaxIndex",
            "sourceSelectorCandidates",
        ],
        invalidation_policy: vec![
            "refreshOnDocumentOpen",
            "refreshOnDocumentContentChange",
            "refreshOnWorkspaceFileReload",
        ],
        request_path_policy: vec![
            "noRawSourceRescanOnProviderRequest",
            "noStyleSelectorRescanOnProviderRequest",
            "providerRequestsConsumeDocumentIndexes",
        ],
    }
}

pub(crate) fn refresh_document_reusable_indexes(document: &mut LspTextDocumentState) {
    document.style_summary =
        summarize_style_document(document.uri.as_str(), Some(document.text.as_str()));
    document.style_candidates =
        collect_style_hover_candidates(document.uri.as_str(), document.text.as_str())
            .map(|(_, candidates)| candidates)
            .unwrap_or_default();
    let source_syntax_index = build_source_syntax_index(document);
    document.source_selector_candidates =
        source_selector_candidates_from_index(document, &source_syntax_index);
    document.source_syntax_index = source_syntax_index;
}