Skip to content

Commit 25b7823

Browse files
committed
feat(cli): summarise status codes in each dependency
1 parent 32c5568 commit 25b7823

2 files changed

Lines changed: 63 additions & 12 deletions

File tree

src/dependency.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ impl Dependency {
7777
.fold(InstanceState::Unknown, |acc, instance| acc.max(instance.state.borrow().clone()))
7878
}
7979

80-
/// Return every unique instance state which applies to this group
80+
/// Return every instance state which applies to this group
8181
pub fn get_states(&self) -> Vec<InstanceState> {
8282
self
8383
.instances
8484
.iter()
8585
.map(|instance| instance.state.borrow().clone())
86-
.collect::<Vec<_>>()
86+
.collect::<Vec<InstanceState>>()
8787
}
8888

8989
/// Set the expected version specifier to the given value

src/effects/ui/dependency.rs

Lines changed: 61 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use {
77
version_group::VersionGroupVariant,
88
},
99
colored::*,
10+
itertools::Itertools,
1011
log::{error, info},
1112
};
1213

@@ -25,14 +26,14 @@ pub fn print(ctx: &Context, dependency: &Dependency, group_variant: &VersionGrou
2526
}
2627

2728
pub fn print_ignored(ctx: &Context, dependency: &Dependency, group_variant: &VersionGroupVariant) {
28-
let (count_column, name, local_hint, alias_hint, _) = get_common_parts(ctx, dependency, group_variant);
29+
let (count_column, name, local_hint, alias_hint, _, _) = get_common_parts(ctx, dependency, group_variant);
2930
let name = name.dimmed().to_string();
3031
let line = ui::util::join_line(vec![&count_column, &name, &local_hint, &alias_hint]);
3132
info!("{line}");
3233
}
3334

3435
pub fn print_valid(ctx: &Context, dependency: &Dependency, group_variant: &VersionGroupVariant) {
35-
let (count_column, name, local_hint, alias_hint, expected_specifier) = get_common_parts(ctx, dependency, group_variant);
36+
let (count_column, name, local_hint, alias_hint, expected_specifier, _) = get_common_parts(ctx, dependency, group_variant);
3637
let expected_specifier = if !expected_specifier.is_empty() {
3738
expected_specifier.dimmed().to_string()
3839
} else {
@@ -43,14 +44,25 @@ pub fn print_valid(ctx: &Context, dependency: &Dependency, group_variant: &Versi
4344
}
4445

4546
pub fn print_invalid(ctx: &Context, dependency: &Dependency, group_variant: &VersionGroupVariant) {
46-
let (count_column, name, local_hint, alias_hint, expected_specifier) = get_common_parts(ctx, dependency, group_variant);
47-
// let name = name.red().to_string();
47+
let (count_column, name, local_hint, alias_hint, expected_specifier, status_codes) = get_common_parts(ctx, dependency, group_variant);
4848
let expected_specifier = if !expected_specifier.is_empty() {
4949
expected_specifier.red().to_string()
5050
} else {
5151
expected_specifier
5252
};
53-
let line = ui::util::join_line(vec![&count_column, &name, &expected_specifier, &local_hint, &alias_hint]);
53+
let status_codes = if !status_codes.is_empty() {
54+
status_codes.dimmed().to_string()
55+
} else {
56+
status_codes
57+
};
58+
let line = ui::util::join_line(vec![
59+
&count_column,
60+
&name,
61+
&expected_specifier,
62+
&local_hint,
63+
&alias_hint,
64+
&status_codes,
65+
]);
5466
info!("{line}");
5567
}
5668

@@ -59,19 +71,31 @@ pub fn print_outdated(ctx: &Context, dependency: &Dependency, group_variant: &Ve
5971
}
6072

6173
pub fn print_suspect(ctx: &Context, dependency: &Dependency, group_variant: &VersionGroupVariant) {
62-
let (count_column, name, local_hint, alias_hint, expected_specifier) = get_common_parts(ctx, dependency, group_variant);
74+
let (count_column, name, local_hint, alias_hint, expected_specifier, status_codes) = get_common_parts(ctx, dependency, group_variant);
6375
// let name = name.yellow().to_string();
6476
let expected_specifier = if !expected_specifier.is_empty() {
6577
expected_specifier.yellow().to_string()
6678
} else {
6779
expected_specifier
6880
};
69-
let line = ui::util::join_line(vec![&count_column, &name, &expected_specifier, &local_hint, &alias_hint]);
81+
let status_codes = if !status_codes.is_empty() {
82+
status_codes.dimmed().to_string()
83+
} else {
84+
status_codes
85+
};
86+
let line = ui::util::join_line(vec![
87+
&count_column,
88+
&name,
89+
&expected_specifier,
90+
&local_hint,
91+
&alias_hint,
92+
&status_codes,
93+
]);
7094
info!("{line}");
7195
}
7296

7397
pub fn print_fixed(ctx: &Context, dependency: &Dependency, group_variant: &VersionGroupVariant) {
74-
let (count_column, name, local_hint, alias_hint, expected_specifier) = get_common_parts(ctx, dependency, group_variant);
98+
let (count_column, name, local_hint, alias_hint, expected_specifier, _) = get_common_parts(ctx, dependency, group_variant);
7599
let icon = if ctx.config.cli.show_instances {
76100
"".to_string()
77101
} else {
@@ -86,11 +110,32 @@ pub fn print_fixed(ctx: &Context, dependency: &Dependency, group_variant: &Versi
86110
info!("{line}");
87111
}
88112

113+
fn get_invalid_status_codes_in_brackets(ctx: &Context, dependency: &Dependency) -> String {
114+
if !ctx.config.cli.show_status_codes {
115+
return "".to_string();
116+
}
117+
let links = dependency
118+
.get_states()
119+
.iter()
120+
.filter(|state| matches!(state, InstanceState::Invalid(_) | InstanceState::Suspect(_)))
121+
.map(|state| state.get_name())
122+
.unique()
123+
.map(|state_name| ui::util::get_status_code_link(ctx, &state_name))
124+
.sorted()
125+
.collect::<Vec<String>>();
126+
if links.is_empty() {
127+
"".to_string()
128+
} else {
129+
let links = links.join(", ");
130+
format!("({links})")
131+
}
132+
}
133+
89134
fn get_common_parts(
90135
ctx: &Context,
91136
dependency: &Dependency,
92137
group_variant: &VersionGroupVariant,
93-
) -> (String, String, String, String, String) {
138+
) -> (String, String, String, String, String, String) {
94139
let instances_len = dependency.instances.len();
95140
let count_column = ui::util::count_column(instances_len);
96141
let name = dependency.internal_name.to_string();
@@ -102,7 +147,13 @@ fn get_common_parts(
102147
} else {
103148
get_raw_expected_specifier(dependency)
104149
};
105-
(count_column, name, local_hint, alias_hint, expected_specifier)
150+
let status_codes = if ctx.config.cli.show_instances {
151+
// don't list statuses when we are listing every instance
152+
"".to_string()
153+
} else {
154+
get_invalid_status_codes_in_brackets(ctx, dependency)
155+
};
156+
(count_column, name, local_hint, alias_hint, expected_specifier, status_codes)
106157
}
107158

108159
pub fn get_alias_hint(dependency: &Dependency) -> String {

0 commit comments

Comments
 (0)