loalang 0.1.15

Loa is a general-purpose, purely immutable, object-oriented programming language.
Documentation
use crate::server_handler::*;

pub struct ReferencesRequestHandler;
impl RequestHandler for ReferencesRequestHandler {
    type R = request::References;

    fn handle(
        context: &mut ServerContext,
        params: ReferenceParams,
    ) -> Option<Vec<lsp_types::Location>> {
        let (uri, location) = convert::from_lsp::position_params(params.text_document_position);
        let location = context.server.location(&uri, location)?;
        let usage = context.server.usage(location)?;
        let mut nodes = usage.references;
        if params.context.include_declaration {
            nodes.insert(0, usage.declaration);
        }
        Some(
            nodes
                .into_iter()
                .map(|n| convert::from_loa::span_to_location(n.name_span))
                .collect(),
        )
    }
}