aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-lsp/src')
-rw-r--r--helix-lsp/src/client.rs9
-rw-r--r--helix-lsp/src/lib.rs7
2 files changed, 14 insertions, 2 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 7f136fe8..1c2a49b5 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -24,12 +24,14 @@ pub struct Client {
request_counter: AtomicU64,
capabilities: Option<lsp::ServerCapabilities>,
offset_encoding: OffsetEncoding,
+ config: Option<Value>,
}
impl Client {
pub fn start(
cmd: &str,
args: &[String],
+ config: Option<Value>,
id: usize,
) -> Result<(Self, UnboundedReceiver<(usize, Call)>)> {
let process = Command::new(cmd)
@@ -57,6 +59,7 @@ impl Client {
request_counter: AtomicU64::new(0),
capabilities: None,
offset_encoding: OffsetEncoding::Utf8,
+ config,
};
// TODO: async client.initialize()
@@ -214,13 +217,17 @@ impl Client {
// TODO: delay any requests that are triggered prior to initialize
let root = find_root(None).and_then(|root| lsp::Url::from_file_path(root).ok());
+ if self.config.is_some() {
+ log::info!("Using custom LSP config: {}", self.config.as_ref().unwrap());
+ }
+
#[allow(deprecated)]
let params = lsp::InitializeParams {
process_id: Some(std::process::id()),
// root_path is obsolete, use root_uri
root_path: None,
root_uri: root,
- initialization_options: None,
+ initialization_options: self.config.clone(),
capabilities: lsp::ClientCapabilities {
text_document: Some(lsp::TextDocumentClientCapabilities {
completion: Some(lsp::CompletionClientCapabilities {
diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs
index 96a45bb9..72606b70 100644
--- a/helix-lsp/src/lib.rs
+++ b/helix-lsp/src/lib.rs
@@ -312,7 +312,12 @@ impl Registry {
Entry::Vacant(entry) => {
// initialize a new client
let id = self.counter.fetch_add(1, Ordering::Relaxed);
- let (mut client, incoming) = Client::start(&config.command, &config.args, id)?;
+ let (mut client, incoming) = Client::start(
+ &config.command,
+ &config.args,
+ serde_json::from_str(language_config.config.as_deref().unwrap_or("")).ok(),
+ id,
+ )?;
// TODO: run this async without blocking
futures_executor::block_on(client.initialize())?;
s_incoming.push(UnboundedReceiverStream::new(incoming));