Skip to content

Commit 339c074

Browse files
committed
add request id to requests
1 parent 178d6ce commit 339c074

File tree

3 files changed

+29
-34
lines changed

3 files changed

+29
-34
lines changed

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

Lines changed: 16 additions & 27 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,15 @@ 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

118114
let response_payload =
119-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
115+
run_bidirectional(srv, (srv.request_id(), Kind::Request, request).into(), &mut callbacks)?;
120116

121117
match response_payload {
122118
Payload::Response(Response::ApiVersionCheck(version)) => Ok(version),
@@ -135,19 +131,15 @@ pub(crate) fn enable_rust_analyzer_spans(
135131

136132
struct NoCallbacks;
137133
impl ClientCallbacks for NoCallbacks {
138-
fn handle_sub_request(
139-
&mut self,
140-
_id: u64,
141-
_req: SubRequest,
142-
) -> Result<SubResponse, ServerError> {
134+
fn handle_sub_request(&mut self, _req: SubRequest) -> Result<SubResponse, ServerError> {
143135
Err(ServerError { message: "sub-request not supported here".into(), io: None })
144136
}
145137
}
146138

147139
let mut callbacks = NoCallbacks;
148140

149141
let response_payload =
150-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
142+
run_bidirectional(srv, (srv.request_id(), Kind::Request, request).into(), &mut callbacks)?;
151143

152144
match response_payload {
153145
Payload::Response(Response::SetConfig(ServerConfig { span_mode })) => Ok(span_mode),
@@ -165,19 +157,15 @@ pub(crate) fn find_proc_macros(
165157

166158
struct NoCallbacks;
167159
impl ClientCallbacks for NoCallbacks {
168-
fn handle_sub_request(
169-
&mut self,
170-
_id: u64,
171-
_req: SubRequest,
172-
) -> Result<SubResponse, ServerError> {
160+
fn handle_sub_request(&mut self, _req: SubRequest) -> Result<SubResponse, ServerError> {
173161
Err(ServerError { message: "sub-request not supported here".into(), io: None })
174162
}
175163
}
176164

177165
let mut callbacks = NoCallbacks;
178166

179167
let response_payload =
180-
run_bidirectional(srv, (0, Kind::Request, request).into(), &mut callbacks)?;
168+
run_bidirectional(srv, (srv.request_id(), Kind::Request, request).into(), &mut callbacks)?;
181169

182170
match response_payload {
183171
Payload::Response(Response::ListMacros(it)) => Ok(it),
@@ -225,15 +213,13 @@ pub(crate) fn expand(
225213
current_dir: Some(current_dir),
226214
})));
227215

216+
let request_id = proc_macro.process.request_id();
217+
228218
struct Callbacks<'de> {
229219
db: &'de dyn SourceDatabase,
230220
}
231221
impl<'db> ClientCallbacks for Callbacks<'db> {
232-
fn handle_sub_request(
233-
&mut self,
234-
_id: u64,
235-
req: SubRequest,
236-
) -> Result<SubResponse, ServerError> {
222+
fn handle_sub_request(&mut self, req: SubRequest) -> Result<SubResponse, ServerError> {
237223
match req {
238224
SubRequest::SourceText { file_id, start, end } => {
239225
let file = FileId::from_raw(file_id);
@@ -249,8 +235,11 @@ pub(crate) fn expand(
249235

250236
let mut callbacks = Callbacks { db };
251237

252-
let response_payload =
253-
run_bidirectional(&proc_macro.process, (0, Kind::Request, task).into(), &mut callbacks)?;
238+
let response_payload = run_bidirectional(
239+
&proc_macro.process,
240+
(request_id, Kind::Request, task).into(),
241+
&mut callbacks,
242+
)?;
254243

255244
match response_payload {
256245
Payload::Response(Response::ExpandMacro(it)) => Ok(it

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)