qlue-ls 3.0.1

A language server for SPARQL
Documentation
//! LSP capability declaration.
//!
//! This module defines what features the server advertises to clients during
//! the `initialize` handshake. Capabilities tell the client which LSP methods
//! the server supports.
//!
//! # Key Functions
//!
//! - [`create_capabilities`]: Builds the `ServerCapabilities` struct sent to clients
//!
//! # Supported Features
//!
//! - Incremental text document sync
//! - Hover, code actions, diagnostics
//! - Completions (triggered by `?` and space)
//! - Document formatting
//! - Folding ranges
//!
//! # Related Modules
//!
//! - [`super::lsp::capabilities`]: Type definitions for capability structs
//! - [`super::message_handler::lifecycle`]: Sends capabilities in `initialize` response

use crate::server::lsp::capabilities::{
    BoolOrEmpty, FullCapability,
    server::{SemanticTokenModifiers, SemanticTokensOptions},
};

use super::lsp::capabilities::server::{
    CompletionOptions, DiagnosticOptions, DocumentFormattingOptions,
    DocumentOnTypeFormattingOptions, ExecuteCommandOptions, ServerCapabilities,
    TextDocumentSyncKind, WorkDoneProgressOptions,
};

pub(super) fn create_capabilities() -> ServerCapabilities {
    ServerCapabilities {
        text_document_sync: TextDocumentSyncKind::Incremental,
        hover_provider: true,
        code_action_provider: true,
        execute_command_provider: ExecuteCommandOptions {
            work_done_progress_options: WorkDoneProgressOptions {
                work_done_progress: true,
            },
            commands: vec![String::from("publish diagnostics")],
        },
        diagnostic_provider: DiagnosticOptions {
            identifier: "qlue-ls".to_string(),
            inter_file_dependencies: false,
            workspace_diagnostics: false,
        },
        completion_provider: CompletionOptions {
            trigger_characters: vec!["?".to_string(), " ".to_string()],
        },
        document_formatting_provider: DocumentFormattingOptions {},
        document_on_type_formatting_provider: DocumentOnTypeFormattingOptions {
            first_trigger_character: "\n".to_string(),
            more_trigger_character: Some(vec![";".to_string(), ".".to_string()]),
        },
        folding_range_provider: true,
        semantic_tokens_provider: SemanticTokensOptions {
            work_done_progress_options: WorkDoneProgressOptions {
                work_done_progress: true,
            },
            legend: crate::server::lsp::capabilities::server::SemanticTokensLegend {
                token_types: crate::server::message_handler::semantic_tokens::TOKEN_TYPES.to_vec(),
                token_modifiers: vec![SemanticTokenModifiers::Async],
            },
            range: Some(BoolOrEmpty::Bool(true)),
            full: Some(FullCapability::Bool(true)),
        },
    }
}