Skip to content

Commit 28a3b80

Browse files
committed
add request id to requests
1 parent 178d6ce commit 28a3b80

File tree

3 files changed

+29
-41
lines changed

3 files changed

+29
-41
lines changed

crates/proc-macro-api/src/bidirectional_protocol.rs

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::{
3030
pub mod msg;
3131

3232
pub trait ClientCallbacks {
33-
fn handle_sub_request(&mut self, id: u64, req: SubRequest) -> Result<SubResponse, ServerError>;
33+
fn handle_sub_request(&mut self, req: SubRequest) -> Result<SubResponse, ServerError>;
3434
}
3535

3636
pub fn run_conversation<C: Codec>(
@@ -65,7 +65,7 @@ pub fn run_conversation<C: Codec>(
6565

6666
match (msg.kind, msg.payload) {
6767
(Kind::SubRequest, Payload::SubRequest(sr)) => {
68-
let resp = callbacks.handle_sub_request(id, sr)?;
68+
let resp = callbacks.handle_sub_request(sr)?;
6969
let reply =
7070
Envelope { id, kind: Kind::SubResponse, payload: Payload::SubResponse(resp) };
7171
let encoded = C::encode(&reply).map_err(wrap_encode)?;
@@ -104,19 +104,14 @@ pub(crate) fn version_check(srv: &ProcMacroServerProcess) -> Result<u32, ServerE
104104

105105
struct NoCallbacks;
106106
impl ClientCallbacks for NoCallbacks {
107-
fn handle_sub_request(
108-
&mut self,
109-
_id: u64,
110-
_req: SubRequest,
111-
) -> Result<SubResponse, ServerError> {
107+
fn handle_sub_request(&mut self, _req: SubRequest) -> Result<SubResponse, ServerError> {
112108
Err(ServerError { message: "sub-request not supported here".into(), io: None })
113109
}
114110
}
115111

116112
let mut callbacks = NoCallbacks;
117113

118-
let response_payload =
119-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
114+
let response_payload = run_request(srv, request, &mut callbacks)?;
120115

121116
match response_payload {
122117
Payload::Response(Response::ApiVersionCheck(version)) => Ok(version),
@@ -135,19 +130,14 @@ pub(crate) fn enable_rust_analyzer_spans(
135130

136131
struct NoCallbacks;
137132
impl ClientCallbacks for NoCallbacks {
138-
fn handle_sub_request(
139-
&mut self,
140-
_id: u64,
141-
_req: SubRequest,
142-
) -> Result<SubResponse, ServerError> {
133+
fn handle_sub_request(&mut self, _req: SubRequest) -> Result<SubResponse, ServerError> {
143134
Err(ServerError { message: "sub-request not supported here".into(), io: None })
144135
}
145136
}
146137

147138
let mut callbacks = NoCallbacks;
148139

149-
let response_payload =
150-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
140+
let response_payload = run_request(srv, request, &mut callbacks)?;
151141

152142
match response_payload {
153143
Payload::Response(Response::SetConfig(ServerConfig { span_mode })) => Ok(span_mode),
@@ -165,19 +155,14 @@ pub(crate) fn find_proc_macros(
165155

166156
struct NoCallbacks;
167157
impl ClientCallbacks for NoCallbacks {
168-
fn handle_sub_request(
169-
&mut self,
170-
_id: u64,
171-
_req: SubRequest,
172-
) -> Result<SubResponse, ServerError> {
158+
fn handle_sub_request(&mut self, _req: SubRequest) -> Result<SubResponse, ServerError> {
173159
Err(ServerError { message: "sub-request not supported here".into(), io: None })
174160
}
175161
}
176162

177163
let mut callbacks = NoCallbacks;
178164

179-
let response_payload =
180-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
165+
let response_payload = run_request(srv, request, &mut callbacks)?;
181166

182167
match response_payload {
183168
Payload::Response(Response::ListMacros(it)) => Ok(it),
@@ -229,11 +214,7 @@ pub(crate) fn expand(
229214
db: &'de dyn SourceDatabase,
230215
}
231216
impl<'db> ClientCallbacks for Callbacks<'db> {
232-
fn handle_sub_request(
233-
&mut self,
234-
_id: u64,
235-
req: SubRequest,
236-
) -> Result<SubResponse, ServerError> {
217+
fn handle_sub_request(&mut self, req: SubRequest) -> Result<SubResponse, ServerError> {
237218
match req {
238219
SubRequest::SourceText { file_id, start, end } => {
239220
let file = FileId::from_raw(file_id);
@@ -249,8 +230,7 @@ pub(crate) fn expand(
249230

250231
let mut callbacks = Callbacks { db };
251232

252-
let response_payload =
253-
run_bidirectional(&proc_macro.process, (0, Kind::Request, task).into(), &mut callbacks)?;
233+
let response_payload = run_request(&proc_macro.process, task, &mut callbacks)?;
254234

255235
match response_payload {
256236
Payload::Response(Response::ExpandMacro(it)) => Ok(it
@@ -279,18 +259,20 @@ pub(crate) fn expand(
279259
}
280260
}
281261

282-
fn run_bidirectional(
262+
fn run_request(
283263
srv: &ProcMacroServerProcess,
284-
msg: Envelope,
264+
msg: Payload,
285265
callbacks: &mut dyn ClientCallbacks,
286266
) -> Result<Payload, ServerError> {
287267
if let Some(server_error) = srv.exited() {
288268
return Err(server_error.clone());
289269
}
290270

271+
let id = srv.request_id();
272+
291273
if srv.use_postcard() {
292-
srv.run_bidirectional::<PostcardProtocol>(msg.id, msg.payload, callbacks)
274+
srv.run_bidirectional::<PostcardProtocol>(id, msg, callbacks)
293275
} else {
294-
srv.run_bidirectional::<JsonProtocol>(msg.id, msg.payload, callbacks)
276+
srv.run_bidirectional::<JsonProtocol>(id, msg, callbacks)
295277
}
296278
}

crates/proc-macro-api/src/process.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ use std::{
44
io::{self, BufRead, BufReader, Read, Write},
55
panic::AssertUnwindSafe,
66
process::{Child, ChildStdin, ChildStdout, Command, Stdio},
7-
sync::{Arc, Mutex, OnceLock},
7+
sync::{
8+
Arc, Mutex, OnceLock,
9+
atomic::{AtomicU64, Ordering},
10+
},
811
};
912

1013
use base_db::SourceDatabase;
@@ -33,6 +36,7 @@ pub(crate) struct ProcMacroServerProcess {
3336
protocol: Protocol,
3437
/// Populated when the server exits.
3538
exited: OnceLock<AssertUnwindSafe<ServerError>>,
39+
next_request_id: AtomicU64,
3640
}
3741

3842
#[derive(Debug, Clone)]
@@ -90,6 +94,7 @@ impl ProcMacroServerProcess {
9094
version: 0,
9195
protocol: protocol.clone(),
9296
exited: OnceLock::new(),
97+
next_request_id: AtomicU64::new(1),
9398
})
9499
};
95100
let mut srv = create_srv()?;
@@ -312,6 +317,10 @@ impl ProcMacroServerProcess {
312317
)
313318
})
314319
}
320+
321+
pub(crate) fn request_id(&self) -> RequestId {
322+
self.next_request_id.fetch_add(1, Ordering::Relaxed)
323+
}
315324
}
316325

317326
/// Manages the execution of the proc-macro server process.

crates/proc-macro-srv/src/server_impl/rust_analyzer_span.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,9 @@ impl server::Span for RaSpanServer {
163163
start,
164164
end,
165165
});
166-
self.cli_to_server
167-
.clone()
168-
.unwrap()
169-
.recv()
170-
.and_then(|SubResponse::SourceTextResult { text }| Ok(text))
171-
.expect("REASON")
166+
match self.cli_to_server.as_ref()?.recv().ok()? {
167+
SubResponse::SourceTextResult { text } => text,
168+
}
172169
} else {
173170
None
174171
}

0 commit comments

Comments
 (0)