aboutsummaryrefslogtreecommitdiff
path: root/helix-lsp/src/client.rs
diff options
context:
space:
mode:
authorwojciechkepka2021-06-18 03:42:34 +0000
committerBlaž Hrastnik2021-06-18 08:42:38 +0000
commit38cb934d8f579663ff13496bf79293103863b60b (patch)
tree3dbd92d6032921381ded7e02e0bd36747e9c2e0f /helix-lsp/src/client.rs
parent80b4a690535b2171cc7db2ee6b4daf3bcb4c4f11 (diff)
Add unique id to each lsp client/server pair
Diffstat (limited to 'helix-lsp/src/client.rs')
-rw-r--r--helix-lsp/src/client.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 6554e996..e14d0197 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -18,6 +18,7 @@ use tokio::{
#[derive(Debug)]
pub struct Client {
+ id: usize,
_process: Child,
server_tx: UnboundedSender<Payload>,
request_counter: AtomicU64,
@@ -26,7 +27,11 @@ pub struct Client {
}
impl Client {
- pub fn start(cmd: &str, args: &[String]) -> Result<(Self, UnboundedReceiver<Call>)> {
+ pub fn start(
+ cmd: &str,
+ args: &[String],
+ id: usize,
+ ) -> Result<(Self, UnboundedReceiver<(usize, Call)>)> {
let process = Command::new(cmd)
.args(args)
.stdin(Stdio::piped())
@@ -43,9 +48,10 @@ impl Client {
let reader = BufReader::new(process.stdout.take().expect("Failed to open stdout"));
let stderr = BufReader::new(process.stderr.take().expect("Failed to open stderr"));
- let (server_rx, server_tx) = Transport::start(reader, writer, stderr);
+ let (server_rx, server_tx) = Transport::start(reader, writer, stderr, id);
let client = Self {
+ id,
_process: process,
server_tx,
request_counter: AtomicU64::new(0),
@@ -59,6 +65,10 @@ impl Client {
Ok((client, server_rx))
}
+ pub fn id(&self) -> usize {
+ self.id
+ }
+
fn next_request_id(&self) -> jsonrpc::Id {
let id = self.request_counter.fetch_add(1, Ordering::Relaxed);
jsonrpc::Id::Num(id)