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
2728pub 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
3435pub 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
4546pub 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
6173pub 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
7397pub 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+
89134fn 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
108159pub fn get_alias_hint ( dependency : & Dependency ) -> String {
0 commit comments