Skip to main content

wisp/components/git_diff/
mod.rs

1pub(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}