lapce / lapce-plugin-rust

Apache License 2.0
31 stars 9 forks source link

Function to send notification to client editor #8

Open MinusGix opened 2 years ago

MinusGix commented 2 years ago

There should be a function to easily send a notification to the client from a plugin. This can currently be achieved via object_to_stdout, but in a somewhat unpleasant manner and makes the plugin authors have to figure out the details of the LSP/PSP api for sending information. (I think that function should also be hidden, and plugin authors using the library should just deal with functions for sending notifications/requests)
We can use lsp-types/psp-types Notification trait to make things more type-safe, like:

pub fn send_notification<T: Notification>(params: T::Params) {
    // Having them give the `T` ensures that they can't give us the wrong method name or the wrong params
    // They can still do custom notifications (like editor-specific notifs) via making a custom structure and implementing Notification on it
    let method: &'static str = T::METHOD;
    // We could just have send_host_notification take `impl Serialize`?
    send_host_notification(method, json!(params));
}