Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit f4b1b4b

Browse files
committed
Use Sender instead of boxed closure in vfs
1 parent 03a7abc commit f4b1b4b

File tree

6 files changed

+38
-31
lines changed

6 files changed

+38
-31
lines changed

src/tools/rust-analyzer/Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2317,6 +2317,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
23172317
name = "vfs"
23182318
version = "0.0.0"
23192319
dependencies = [
2320+
"crossbeam-channel",
23202321
"fst",
23212322
"indexmap",
23222323
"nohash-hasher",

src/tools/rust-analyzer/crates/load-cargo/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ pub fn load_workspace(
6464
let (sender, receiver) = unbounded();
6565
let mut vfs = vfs::Vfs::default();
6666
let mut loader = {
67-
let loader =
68-
vfs_notify::NotifyHandle::spawn(Box::new(move |msg| sender.send(msg).unwrap()));
67+
let loader = vfs_notify::NotifyHandle::spawn(sender);
6968
Box::new(loader)
7069
};
7170

src/tools/rust-analyzer/crates/rust-analyzer/src/global_state.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,7 @@ impl GlobalState {
185185
pub(crate) fn new(sender: Sender<lsp_server::Message>, config: Config) -> GlobalState {
186186
let loader = {
187187
let (sender, receiver) = unbounded::<vfs::loader::Message>();
188-
let handle: vfs_notify::NotifyHandle =
189-
vfs::loader::Handle::spawn(Box::new(move |msg| sender.send(msg).unwrap()));
188+
let handle: vfs_notify::NotifyHandle = vfs::loader::Handle::spawn(sender);
190189
let handle = Box::new(handle) as Box<dyn vfs::loader::Handle>;
191190
Handle { handle, receiver }
192191
};

src/tools/rust-analyzer/crates/vfs-notify/src/lib.rs

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -119,18 +119,19 @@ impl NotifyActor {
119119
self.watched_dir_entries.clear();
120120
self.watched_file_entries.clear();
121121

122-
let send = |msg| (self.sender)(msg);
123-
send(loader::Message::Progress {
124-
n_total,
125-
n_done: LoadingProgress::Started,
126-
config_version,
127-
dir: None,
128-
});
122+
self.sender
123+
.send(loader::Message::Progress {
124+
n_total,
125+
n_done: LoadingProgress::Started,
126+
config_version,
127+
dir: None,
128+
})
129+
.unwrap();
129130

130131
let (entry_tx, entry_rx) = unbounded();
131132
let (watch_tx, watch_rx) = unbounded();
132133
let processed = AtomicUsize::new(0);
133-
config.load.into_par_iter().enumerate().for_each(move |(i, entry)| {
134+
config.load.into_par_iter().enumerate().for_each(|(i, entry)| {
134135
let do_watch = config.watch.contains(&i);
135136
if do_watch {
136137
_ = entry_tx.send(entry.clone());
@@ -140,25 +141,31 @@ impl NotifyActor {
140141
entry,
141142
do_watch,
142143
|file| {
143-
send(loader::Message::Progress {
144-
n_total,
145-
n_done: LoadingProgress::Progress(
146-
processed.load(std::sync::atomic::Ordering::Relaxed),
147-
),
148-
dir: Some(file),
149-
config_version,
150-
})
144+
self.sender
145+
.send(loader::Message::Progress {
146+
n_total,
147+
n_done: LoadingProgress::Progress(
148+
processed
149+
.load(std::sync::atomic::Ordering::Relaxed),
150+
),
151+
dir: Some(file),
152+
config_version,
153+
})
154+
.unwrap()
151155
},
152156
);
153-
send(loader::Message::Loaded { files });
154-
send(loader::Message::Progress {
155-
n_total,
156-
n_done: LoadingProgress::Progress(
157-
processed.fetch_add(1, std::sync::atomic::Ordering::AcqRel) + 1,
158-
),
159-
config_version,
160-
dir: None,
161-
});
157+
self.sender.send(loader::Message::Loaded { files }).unwrap();
158+
self.sender
159+
.send(loader::Message::Progress {
160+
n_total,
161+
n_done: LoadingProgress::Progress(
162+
processed.fetch_add(1, std::sync::atomic::Ordering::AcqRel)
163+
+ 1,
164+
),
165+
config_version,
166+
dir: None,
167+
})
168+
.unwrap();
162169
});
163170
for path in watch_rx {
164171
self.watch(&path);
@@ -317,7 +324,7 @@ impl NotifyActor {
317324
}
318325

319326
fn send(&self, msg: loader::Message) {
320-
(self.sender)(msg);
327+
self.sender.send(msg).unwrap();
321328
}
322329
}
323330

src/tools/rust-analyzer/crates/vfs/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ tracing.workspace = true
1818
fst = "0.4.7"
1919
indexmap.workspace = true
2020
nohash-hasher.workspace = true
21+
crossbeam-channel.workspace = true
2122

2223
paths.workspace = true
2324
stdx.workspace = true

src/tools/rust-analyzer/crates/vfs/src/loader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ pub enum Message {
7272
}
7373

7474
/// Type that will receive [`Messages`](Message) from a [`Handle`].
75-
pub type Sender = Box<dyn Fn(Message) + Send + Sync>;
75+
pub type Sender = crossbeam_channel::Sender<Message>;
7676

7777
/// Interface for reading and watching files.
7878
pub trait Handle: fmt::Debug {

0 commit comments

Comments
 (0)