Skip to content

Commit 1717951

Browse files
committed
Show which roots are being scanned in progress messages
See: #12613
1 parent 22b18b9 commit 1717951

File tree

4 files changed

+55
-7
lines changed

4 files changed

+55
-7
lines changed

crates/load-cargo/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ fn load_crate_graph(
314314
// wait until Vfs has loaded all roots
315315
for task in receiver {
316316
match task {
317-
vfs::loader::Message::Progress { n_done, n_total, config_version: _ } => {
317+
vfs::loader::Message::Progress { n_done, n_total, .. } => {
318318
if n_done == n_total {
319319
break;
320320
}

crates/rust-analyzer/src/main_loop.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ impl GlobalState {
581581
}
582582
}
583583
}
584-
vfs::loader::Message::Progress { n_total, n_done, config_version } => {
584+
vfs::loader::Message::Progress { n_total, n_done, file, config_version } => {
585585
always!(config_version <= self.vfs_config_version);
586586

587587
self.vfs_progress_config_version = config_version;
@@ -596,10 +596,23 @@ impl GlobalState {
596596
assert_eq!(n_done, n_total);
597597
Progress::End
598598
};
599+
600+
let mut message = format!("{n_done}/{n_total}");
601+
if let Some(file) = file {
602+
message += &format!(
603+
": {}",
604+
match file.strip_prefix(&self.config.root_path()) {
605+
Some(relative_path) => relative_path.as_ref(),
606+
None => file.as_ref(),
607+
}
608+
.display()
609+
);
610+
}
611+
599612
self.report_progress(
600613
"Roots Scanned",
601614
state,
602-
Some(format!("{n_done}/{n_total}")),
615+
Some(message),
603616
Some(Progress::fraction(n_done, n_total)),
604617
None,
605618
);

crates/vfs-notify/src/lib.rs

Lines changed: 27 additions & 2 deletions
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,11 +188,13 @@ 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
176195
.into_iter()
177196
.map(|file| {
197+
self.send(make_message(file.clone()));
178198
if watch {
179199
self.watch(file.clone());
180200
}
@@ -186,6 +206,7 @@ impl NotifyActor {
186206
let mut res = Vec::new();
187207

188208
for root in &dirs.include {
209+
self.send(make_message(root.clone()));
189210
let walkdir =
190211
WalkDir::new(root).follow_links(true).into_iter().filter_entry(|entry| {
191212
if !entry.file_type().is_dir() {
@@ -197,9 +218,13 @@ impl NotifyActor {
197218
});
198219

199220
let files = walkdir.filter_map(|it| it.ok()).filter_map(|entry| {
221+
let depth = entry.depth();
200222
let is_dir = entry.file_type().is_dir();
201223
let is_file = entry.file_type().is_file();
202224
let abs_path = AbsPathBuf::assert(entry.into_path());
225+
if depth < 2 {
226+
self.send(make_message(abs_path.clone()));
227+
}
203228
if is_dir && watch {
204229
self.watch(abs_path.clone());
205230
}

crates/vfs/src/loader.rs

Lines changed: 12 additions & 2 deletions
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
}
@@ -199,10 +208,11 @@ impl fmt::Debug for Message {
199208
Message::Loaded { files } => {
200209
f.debug_struct("Loaded").field("n_files", &files.len()).finish()
201210
}
202-
Message::Progress { n_total, n_done, config_version } => f
211+
Message::Progress { n_total, n_done, file, config_version } => f
203212
.debug_struct("Progress")
204213
.field("n_total", n_total)
205214
.field("n_done", n_done)
215+
.field("file", file)
206216
.field("config_version", config_version)
207217
.finish(),
208218
}

0 commit comments

Comments
 (0)