ad-editor 0.4.0

An adaptable text editor
Documentation
use crate::{
    editor::Actions,
    lsp::{
        LspManager,
        messages::{EditAction, edit_actions_as_editor_actions, request::LspRequest},
    },
};
use lsp_types::{
    DocumentFormattingParams, FormattingOptions, TextDocumentIdentifier, request::Formatting,
};

impl LspRequest for Formatting {
    type Data = (TextDocumentIdentifier, u32);
    type Pending = ();

    fn build_params((text_document, tab_size): Self::Data) -> Self::Params {
        DocumentFormattingParams {
            text_document,
            work_done_progress_params: Default::default(),
            options: FormattingOptions {
                tab_size,
                insert_spaces: false,
                insert_final_newline: Some(true),
                trim_final_newlines: Some(true),
                trim_trailing_whitespace: Some(true),
                properties: Default::default(),
            },
        }
    }

    fn handle_res(
        lsp_id: usize,
        res: Self::Result,
        _: Self::Pending,
        man: &mut LspManager,
    ) -> Option<Actions> {
        let text_edits = res?;
        let enc = man.clients.get(&lsp_id)?.position_encoding;

        let actions = edit_actions_as_editor_actions(
            text_edits
                .into_iter()
                .map(|edit| EditAction::from_text_edit(edit, enc))
                .collect(),
        );

        Some(Actions::Multi(actions))
    }
}