Skip to content

Commit 5201494

Browse files
committed
Started adding ability for daemon to serve requests from language servers
1 parent 4147c79 commit 5201494

File tree

4 files changed

+32
-20
lines changed

4 files changed

+32
-20
lines changed

Cargo.lock

Lines changed: 5 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ members = [
1414
"src/representations/text_edit",
1515
"src/representations/ipc_message",
1616
"src/representations/fingerprint",
17-
"src/support/async_stdio",
1817
"src/support/define_requests",
1918
"src/support/iter_ext",
2019
"src/support/top_n",

src/components/daemon/src/serve.rs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
use crate::server::Server;
22
use fingerprint::COMPILER_BUILT_AT;
3-
use ipc_message::{IpcMessage, IpcRequest, IpcResponse};
3+
use ipc_message::{IpcMessage, IpcNotification, IpcRequest, IpcResponse};
4+
use request::{Cache, PfIn, Rt, RtStIn, TimeoutAfterSteps};
45
use smol::{
56
io::{self, AsyncWriteExt, BufReader, BufWriter},
67
net::TcpStream,
78
};
8-
use std::pin::pin;
9+
use std::{num::NonZero, pin::pin};
910
use transport::{read_message_raw_async, write_message_raw_async};
1011

1112
impl Server {
1213
pub async fn serve(&self, mut stream: TcpStream) -> io::Result<()> {
13-
// We will use serialized records to communicate here
14-
// between us the daemon and the language server process.
14+
let idle_tracker = self.idle_tracker.clone();
1515

16-
// The language server will need to be able to send us requests,
17-
// and we will need to handle them in a separate rt compared
18-
// to the normal background compilation process.
16+
let thread = std::thread::spawn(move || {
17+
let mut rt = RtStIn::<PfIn>::new(Cache::load("adeptls.cache"), Some(idle_tracker));
18+
let query = rt.query(request::ListSymbols.into(), request::QueryMode::New);
19+
let result = rt.block_on(query, TimeoutAfterSteps(NonZero::new(10_000).unwrap()));
20+
21+
match result {
22+
Ok(request::BlockOn::Complete(result)) => eprintln!("From query, got {:?}", result),
23+
_ => eprintln!("failed"),
24+
}
25+
});
1926

2027
println!("daemon: Accepted language server connection!");
2128

@@ -52,6 +59,10 @@ impl Server {
5259
let writer = pin!(BufWriter::new(&mut stream));
5360
write_message_raw_async(writer, &content).await?;
5461
}
62+
IpcMessage::Notification(IpcNotification::Exit) => {
63+
eprintln!("daemon: Exit requested...");
64+
break;
65+
}
5566
IpcMessage::Response(ref _id, ref _response) => {
5667
todo!("daemon: unhandled response {:?}", message)
5768
}
@@ -60,5 +71,8 @@ impl Server {
6071
}
6172
}
6273
}
74+
75+
thread.join().unwrap();
76+
Ok(())
6377
}
6478
}

src/representations/ipc_message/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub struct IpcMessageId(pub usize);
1010
pub enum IpcMessage {
1111
Request(IpcMessageId, IpcRequest),
1212
Response(IpcMessageId, IpcResponse),
13+
Notification(IpcNotification),
1314
}
1415

1516
#[derive(Clone, Debug, Serialize, Deserialize)]
@@ -40,3 +41,8 @@ pub enum IpcResponse {
4041
Completion(Vec<String>),
4142
Diagnostics(Vec<(String, TextPosition)>),
4243
}
44+
45+
#[derive(Clone, Debug, Serialize, Deserialize)]
46+
pub enum IpcNotification {
47+
Exit,
48+
}

0 commit comments

Comments
 (0)