paline 0.4.2

一个用 Rust 编写的代码行数统计命令行工具。递归扫描目录,按编程语言统计行数,并以彩色横向条形图在终端中可视化展示。
use crate::lang::Languages;

pub struct ProjectStats {
    pub language_line_map: [u32; Languages::COUNT],
    pub total_files: u32,
    pub total_lines: u32,
    pub total_bytes: u64,
}

impl ProjectStats {
    pub(crate) fn new() -> Self {
        ProjectStats {
            language_line_map: [0; Languages::COUNT],
            total_files: 0,
            total_lines: 0,
            total_bytes: 0,
        }
    }

    pub fn add(&mut self, lang: Languages, lines: u32, bytes: u64) {
        self.language_line_map[lang.idx()] += lines;
        self.total_files += 1;
        self.total_lines += lines;
        self.total_bytes += bytes;
    }

    pub fn merge(&mut self, other: &ProjectStats) {
        for (i, &v) in other.language_line_map.iter().enumerate() {
            self.language_line_map[i] += v;
        }
        self.total_files += other.total_files;
        self.total_lines += other.total_lines;
        self.total_bytes += other.total_bytes;
    }
}