Extract ActiveStage::last_bar() and clean up compaction bar handling

- Extract repeated `tool_calls.back().map_or(&spinner, |e| &e.bar)` into
  `ActiveStage::last_bar()` (used in 4 places)
- Clean up existing compaction_bar before overwriting in CompactionStarted
- Tidy CompactionCompleted handler to inline the if-let chain

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bryan Helmkamp 2026-03-08 01:08:51 -05:00
parent e33d3f02fb
commit 3e1185d19b

View file

@ -163,6 +163,12 @@ struct ActiveStage {
compaction_bar: Option<ProgressBar>,
}
impl ActiveStage {
fn last_bar(&self) -> &ProgressBar {
self.tool_calls.back().map_or(&self.spinner, |e| &e.bar)
}
}
const MAX_TOOL_CALLS: usize = 5;
// ── Renderer variants ───────────────────────────────────────────────────
@ -741,13 +747,12 @@ impl ProgressUI {
match &self.renderer {
ProgressRenderer::Tty(tty) => {
if let Some(stage) = self.active_stages.get_mut(stage_node_id) {
let after = stage
.tool_calls
.back()
.map_or(&stage.spinner, |e| &e.bar);
let bar =
tty.multi
.insert_after(after, ProgressBar::new_spinner());
if let Some(old) = stage.compaction_bar.take() {
old.finish_and_clear();
}
let bar = tty
.multi
.insert_after(stage.last_bar(), ProgressBar::new_spinner());
bar.set_style(style_tool_running());
bar.set_message("\u{27f3} compacting context\u{2026}");
bar.enable_steady_tick(Duration::from_millis(100));
@ -768,11 +773,11 @@ impl ProgressUI {
);
match &self.renderer {
ProgressRenderer::Tty(_) => {
let bar = self
if let Some(bar) = self
.active_stages
.get_mut(stage_node_id)
.and_then(|s| s.compaction_bar.take());
if let Some(bar) = bar {
.and_then(|s| s.compaction_bar.take())
{
bar.set_style(style_tool_done());
bar.finish_with_message(msg);
} else {
@ -860,7 +865,7 @@ impl ProgressUI {
}
}
let bar = tty.multi.insert_after(
stage.tool_calls.back().map_or(&stage.spinner, |e| &e.bar),
stage.last_bar(),
ProgressBar::new_spinner(),
);
bar.set_style(style_tool_running());
@ -888,7 +893,7 @@ impl ProgressUI {
if let ProgressRenderer::Tty(tty) = &self.renderer {
if let Some(stage) = self.active_stages.get_mut(&parent_id) {
let bar = tty.multi.insert_after(
stage.tool_calls.back().map_or(&stage.spinner, |e| &e.bar),
stage.last_bar(),
ProgressBar::new_spinner(),
);
bar.set_style(style_tool_running());
@ -961,13 +966,9 @@ impl ProgressUI {
fn insert_info_line_for_stage(&mut self, stage_node_id: &str, message: &str) {
match &self.renderer {
ProgressRenderer::Tty(tty) => {
let after = self
.active_stages
.get(stage_node_id)
.map(|s| s.tool_calls.back().map_or(&s.spinner, |e| &e.bar));
let bar = if let Some(after_bar) = after {
let bar = if let Some(stage) = self.active_stages.get(stage_node_id) {
tty.multi
.insert_after(after_bar, ProgressBar::new_spinner())
.insert_after(stage.last_bar(), ProgressBar::new_spinner())
} else {
tty.multi.add(ProgressBar::new_spinner())
};