Skip to content

Commit 1ceb2ea

Browse files
committed
Show which roots are being scanned in progress messages
See: rust-lang#12613
1 parent 51ac6de commit 1ceb2ea

File tree

4 files changed

+54
-7
lines changed

4 files changed

+54
-7
lines changed

crates/load-cargo/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ fn load_crate_graph(
317317
// wait until Vfs has loaded all roots
318318
for task in receiver {
319319
match task {
320-
vfs::loader::Message::Progress { n_done, n_total, config_version: _ } => {
320+
vfs::loader::Message::Progress { n_done, n_total, .. } => {
321321
if n_done == n_total {
322322
break;
323323
}

crates/rust-analyzer/src/main_loop.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ impl GlobalState {
586586
}
587587
}
588588
}
589-
vfs::loader::Message::Progress { n_total, n_done, config_version } => {
589+
vfs::loader::Message::Progress { n_total, n_done, file, config_version } => {
590590
always!(config_version <= self.vfs_config_version);
591591

592592
self.vfs_progress_config_version = config_version;
@@ -601,10 +601,23 @@ impl GlobalState {
601601
assert_eq!(n_done, n_total);
602602
Progress::End
603603
};
604+
605+
let mut message = format!("{n_done}/{n_total}");
606+
if let Some(file) = file {
607+
message += &format!(
608+
": {}",
609+
match file.strip_prefix(&self.config.root_path()) {
610+
Some(relative_path) => relative_path.as_ref(),
611+
None => file.as_ref(),
612+
}
613+
.display()
614+
);
615+
}
616+
604617
self.report_progress(
605618
"Roots Scanned",
606619
state,
607-
Some(format!("{n_done}/{n_total}")),
620+
Some(message),
608621
Some(Progress::fraction(n_done, n_total)),
609622
None,
610623
);

crates/vfs-notify/src/lib.rs

+26-2
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,39 @@ impl NotifyActor {
103103
let config_version = config.version;
104104

105105
let n_total = config.load.len();
106-
self.send(loader::Message::Progress { n_total, n_done: 0, config_version });
106+
self.send(loader::Message::Progress {
107+
n_total,
108+
n_done: 0,
109+
config_version,
110+
file: None,
111+
});
107112

108113
self.watched_entries.clear();
109114

110115
for (i, entry) in config.load.into_iter().enumerate() {
116+
self.send(loader::Message::Progress {
117+
n_total,
118+
n_done: i,
119+
config_version,
120+
file: None,
121+
});
111122
let watch = config.watch.contains(&i);
112123
if watch {
113124
self.watched_entries.push(entry.clone());
114125
}
115-
let files = self.load_entry(entry, watch);
126+
let files =
127+
self.load_entry(entry, watch, |file| loader::Message::Progress {
128+
n_total,
129+
n_done: i,
130+
file: Some(file),
131+
config_version,
132+
});
116133
self.send(loader::Message::Loaded { files });
117134
self.send(loader::Message::Progress {
118135
n_total,
119136
n_done: i + 1,
120137
config_version,
138+
file: None,
121139
});
122140
}
123141
}
@@ -170,6 +188,7 @@ impl NotifyActor {
170188
&mut self,
171189
entry: loader::Entry,
172190
watch: bool,
191+
make_message: impl Fn(AbsPathBuf) -> loader::Message,
173192
) -> Vec<(AbsPathBuf, Option<Vec<u8>>)> {
174193
match entry {
175194
loader::Entry::Files(files) => files
@@ -186,6 +205,7 @@ impl NotifyActor {
186205
let mut res = Vec::new();
187206

188207
for root in &dirs.include {
208+
self.send(make_message(root.clone()));
189209
let walkdir =
190210
WalkDir::new(root).follow_links(true).into_iter().filter_entry(|entry| {
191211
if !entry.file_type().is_dir() {
@@ -197,9 +217,13 @@ impl NotifyActor {
197217
});
198218

199219
let files = walkdir.filter_map(|it| it.ok()).filter_map(|entry| {
220+
let depth = entry.depth();
200221
let is_dir = entry.file_type().is_dir();
201222
let is_file = entry.file_type().is_file();
202223
let abs_path = AbsPathBuf::assert(entry.into_path());
224+
if depth < 2 && is_dir {
225+
self.send(make_message(abs_path.clone()));
226+
}
203227
if is_dir && watch {
204228
self.watch(abs_path.clone());
205229
}

crates/vfs/src/loader.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,16 @@ pub enum Message {
4848
/// Indicate a gradual progress.
4949
///
5050
/// This is supposed to be the number of loaded files.
51-
Progress { n_total: usize, n_done: usize, config_version: u32 },
51+
Progress {
52+
/// The total files to be loaded.
53+
n_total: usize,
54+
/// The files that have been loaded successfully.
55+
n_done: usize,
56+
/// The file being loaded, if any.
57+
file: Option<AbsPathBuf>,
58+
/// The [`Config`] version.
59+
config_version: u32,
60+
},
5261
/// The handle loaded the following files' content.
5362
Loaded { files: Vec<(AbsPathBuf, Option<Vec<u8>>)> },
5463
/// The handle loaded the following files' content.
@@ -204,10 +213,11 @@ impl fmt::Debug for Message {
204213
Message::Changed { files } => {
205214
f.debug_struct("Changed").field("n_files", &files.len()).finish()
206215
}
207-
Message::Progress { n_total, n_done, config_version } => f
216+
Message::Progress { n_total, n_done, file, config_version } => f
208217
.debug_struct("Progress")
209218
.field("n_total", n_total)
210219
.field("n_done", n_done)
220+
.field("file", file)
211221
.field("config_version", config_version)
212222
.finish(),
213223
}

0 commit comments

Comments
 (0)