Convert diff lines to ratatui Lines for embedding in other widgets.
(&self, theme: &Theme)
| 155 | |
| 156 | /// Convert diff lines to ratatui Lines for embedding in other widgets. |
| 157 | pub fn to_lines(&self, theme: &Theme) -> Vec<Line<'static>> { |
| 158 | let mut lines = Vec::new(); |
| 159 | |
| 160 | for diff_line in &self.lines { |
| 161 | let prefix = match diff_line.line_type { |
| 162 | DiffLineType::Added => Span::styled("+ ", Style::default().fg(theme.diff_added)), |
| 163 | DiffLineType::Removed => { |
| 164 | Span::styled("- ", Style::default().fg(theme.diff_removed)) |
| 165 | } |
| 166 | DiffLineType::HunkHeader => Span::styled("@@ ", Style::default().fg(theme.primary)), |
| 167 | DiffLineType::Context => Span::styled(" ", Style::default().fg(theme.text_muted)), |
| 168 | }; |
| 169 | |
| 170 | let line_num = if let Some(n) = diff_line.new_line_num.or(diff_line.old_line_num) { |
| 171 | format!("{:4} ", n) |
| 172 | } else { |
| 173 | " ".to_string() |
| 174 | }; |
| 175 | |
| 176 | let line_style = match diff_line.line_type { |
| 177 | DiffLineType::Added => Style::default().fg(theme.diff_added), |
| 178 | DiffLineType::Removed => Style::default().fg(theme.diff_removed), |
| 179 | DiffLineType::HunkHeader => Style::default().fg(theme.primary), |
| 180 | DiffLineType::Context => Style::default().fg(theme.text), |
| 181 | }; |
| 182 | |
| 183 | lines.push(Line::from(vec![ |
| 184 | Span::raw(line_num), |
| 185 | prefix, |
| 186 | Span::styled(diff_line.content.clone(), line_style), |
| 187 | ])); |
| 188 | } |
| 189 | |
| 190 | lines |
| 191 | } |
| 192 | |
| 193 | pub fn scroll_up(&mut self) { |
| 194 | if self.scroll_offset > 0 { |
no test coverage detected