qlue-ls 3.4.1

A language server for SPARQL
Documentation
use super::{
    super::environment::{CompletionEnvironment, CompletionLocation},
    super::error::CompletionError,
    super::utils::{CompletionTemplate, dispatch_completion_query},
};
use crate::server::{Server, lsp::CompletionList};
use futures::lock::Mutex;
use ll_sparql_parser::ast::AstNode;
use std::rc::Rc;

pub async fn completions(
    server_rc: Rc<Mutex<Server>>,
    environment: &CompletionEnvironment,
) -> Result<CompletionList, CompletionError> {
    let mut template_context = environment.template_context().await;
    template_context.insert("local_context", &local_context(environment));
    dispatch_completion_query(
        server_rc,
        environment,
        template_context,
        CompletionTemplate::ObjectCompletionContextInsensitive,
        false,
    )
    .await
}

fn local_context(environment: &CompletionEnvironment) -> Option<String> {
    if let CompletionLocation::BlankNodeObject(ref blank_node_props) = environment.location {
        Some(format!(
            "[] {} ?qls_entity",
            blank_node_props.property_list()?.text(),
        ))
    } else {
        None
    }
}