wisp/components/git_diff/
mod.rs1pub(crate) mod git_diff_compositor;
2pub(crate) mod git_diff_panel;
3pub(crate) mod patch_renderer;
4pub(crate) mod split_patch_renderer;
5
6use crate::components::review_comments::CommentAnchor;
7use crate::git_diff::FileStatus;
8use tui::{Color, Line, Style};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub(crate) struct PatchAnchor {
12 pub hunk: usize,
13 pub line: usize,
14}
15
16pub(crate) type DiffAnchor = CommentAnchor<PatchAnchor>;
17
18pub(crate) fn file_status_color(status: FileStatus, theme: &tui::Theme) -> Color {
19 match status {
20 FileStatus::Modified => theme.warning(),
21 FileStatus::Added | FileStatus::Untracked => theme.diff_added_fg(),
22 FileStatus::Deleted => theme.diff_removed_fg(),
23 FileStatus::Renamed => theme.info(),
24 }
25}
26
27pub(crate) fn push_diff_stats(line: &mut Line, additions: usize, deletions: usize, theme: &tui::Theme) {
28 line.push_with_style(format!("+{additions}"), Style::fg(theme.diff_added_fg()));
29 line.push_with_style(format!(" -{deletions}"), Style::fg(theme.diff_removed_fg()));
30}
31
32pub(crate) fn header_rule(width: usize, theme: &tui::Theme) -> Line {
33 Line::with_style("─".repeat(width), Style::fg(theme.muted()))
34}