MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / render_messages

Method render_messages

crates/opencode-tui/src/components/session.rs:476–899  ·  view source on GitHub ↗
(&mut self, frame: &mut Frame, area: Rect)

Source from the content-addressed store, hash-verified

474 }
475
476 fn render_messages(&mut self, frame: &mut Frame, area: Rect) {
477 if area.height == 0 || area.width == 0 {
478 self.last_messages_area = None;
479 self.rendered_line_count = 0;
480 self.messages_viewport_height = 0;
481 self.line_to_message.clear();
482 self.message_first_lines.clear();
483 return;
484 }
485
486 let was_near_bottom = self.is_near_bottom(2);
487 let theme = self.context.theme.read();
488 let user_bg = message_palette::user_message_bg(&theme);
489 let thinking_bg = message_palette::thinking_message_bg(&theme);
490 let assistant_border = message_palette::assistant_border_color(&theme);
491 let thinking_border = message_palette::thinking_border_color(&theme);
492 let show_scrollbar = *self.context.show_scrollbar.read() && area.width > 3;
493 let messages_area = if show_scrollbar {
494 Rect {
495 x: area.x,
496 y: area.y,
497 width: area.width.saturating_sub(1),
498 height: area.height,
499 }
500 } else {
501 area
502 };
503 let scrollbar_area = show_scrollbar.then_some(Rect {
504 x: area.x + area.width.saturating_sub(1),
505 y: area.y,
506 width: 1,
507 height: area.height,
508 });
509 let content_width = usize::from(messages_area.width.saturating_sub(1));
510 let session_ctx = self.context.session.read();
511 let show_thinking = *self.context.show_thinking.read();
512 let show_timestamps = *self.context.show_timestamps.read();
513 let show_tool_details = *self.context.show_tool_details.read();
514 let semantic_hl = *self.context.semantic_highlight.read();
515 let fallback_model = self.context.current_model.read().clone();
516
517 let messages = session_ctx
518 .messages
519 .get(&self.session_id)
520 .cloned()
521 .unwrap_or_default();
522 let revert_info = session_ctx.revert.get(&self.session_id).cloned();
523 let last_assistant_idx = messages
524 .iter()
525 .rposition(|m| matches!(m.role, MessageRole::Assistant));
526
527 let message_gap_lines = 1usize;
528
529 self.last_messages_area = Some(messages_area);
530 self.thinking_toggle_hits.clear();
531 let mut visible_reasoning_ids = HashSet::new();
532
533 let mut lines = Vec::new();

Callers 1

render_mainMethod · 0.80

Calls 15

user_message_bgFunction · 0.85
thinking_message_bgFunction · 0.85
assistant_border_colorFunction · 0.85
thinking_border_colorFunction · 0.85
newFunction · 0.85
render_revert_cardFunction · 0.85
paint_block_linesFunction · 0.85
append_non_message_linesFunction · 0.85
push_spacing_linesFunction · 0.85
render_user_messageFunction · 0.85
append_message_linesFunction · 0.85
assistant_marker_colorFunction · 0.85

Tested by

no test coverage detected