lawkit_python/
colors.rs

1use is_terminal::IsTerminal;
2use owo_colors::OwoColorize;
3use std::env;
4
5/// 色付けが有効かどうか判定 (diffx準拠)
6pub fn should_use_color() -> bool {
7    // NO_COLOR環境変数チェック (https://no-color.org/)
8    if env::var("NO_COLOR").is_ok() {
9        return false;
10    }
11
12    // FORCE_COLOR環境変数チェック
13    if env::var("FORCE_COLOR").is_ok() {
14        return true;
15    }
16
17    // 標準出力がターミナルかチェック (パイプやリダイレクト検出)
18    std::io::stdout().is_terminal()
19}
20
21/// PASSステータスの色付け
22pub fn pass(text: &str) -> String {
23    if should_use_color() {
24        format!("{}", text.bright_green().bold())
25    } else {
26        text.to_string()
27    }
28}
29
30/// WARNステータスの色付け
31pub fn warn(text: &str) -> String {
32    if should_use_color() {
33        format!("{}", text.bright_yellow().bold())
34    } else {
35        text.to_string()
36    }
37}
38
39/// FAILステータスの色付け
40pub fn fail(text: &str) -> String {
41    if should_use_color() {
42        format!("{}", text.bright_red().bold())
43    } else {
44        text.to_string()
45    }
46}
47
48/// CRITICALステータスの色付け
49pub fn critical(text: &str) -> String {
50    if should_use_color() {
51        format!("{}", text.bright_magenta().bold())
52    } else {
53        text.to_string()
54    }
55}
56
57/// INFOテキストの色付け
58pub fn info(text: &str) -> String {
59    if should_use_color() {
60        format!("{}", text.bright_cyan())
61    } else {
62        text.to_string()
63    }
64}
65
66/// ALERTテキストの色付け
67pub fn alert(text: &str) -> String {
68    if should_use_color() {
69        format!("{}", text.bright_yellow())
70    } else {
71        text.to_string()
72    }
73}
74
75/// 統一レベル表記システム
76pub fn level_critical(message: &str) -> String {
77    format!("[{}] {}", critical("CRITICAL"), message)
78}
79
80pub fn level_high(message: &str) -> String {
81    format!("[{}] {}", fail("HIGH"), message)
82}
83
84pub fn level_medium(message: &str) -> String {
85    format!("[{}] {}", warn("MEDIUM"), message)
86}
87
88pub fn level_low(message: &str) -> String {
89    format!("[{}] {}", pass("LOW"), message)
90}
91
92pub fn level_warning(message: &str) -> String {
93    format!("[{}] {}", warn("WARNING"), message)
94}
95
96pub fn level_pass(message: &str) -> String {
97    format!("[{}] {}", pass("PASS"), message)
98}
99
100pub fn level_conflict(message: &str) -> String {
101    format!("[{}] {}", fail("CONFLICT"), message)
102}
103
104pub fn level_fail(message: &str) -> String {
105    format!("[{}] {}", fail("FAIL"), message)
106}
107
108pub fn level_warn(message: &str) -> String {
109    format!("[{}] {}", warn("WARN"), message)
110}