@@ -39,6 +39,7 @@ use crate::{
3939 cli,
4040 fs:: { self , ProjectIO } ,
4141 http:: HttpClient ,
42+ text_layout:: space_table,
4243} ;
4344
4445struct Symbols {
@@ -111,14 +112,17 @@ fn get_manifest_details(paths: &ProjectPaths) -> Result<(PackageConfig, Manifest
111112}
112113
113114fn list_manifest_packages < W : std:: io:: Write > ( mut buffer : W , manifest : Manifest ) -> Result < ( ) > {
114- manifest
115+ let packages = manifest
115116 . packages
116117 . into_iter ( )
117- . try_for_each ( |package| writeln ! ( buffer, "{}\t {}" , package. name, package. version) )
118- . map_err ( |e| Error :: StandardIo {
119- action : StandardIoAction :: Write ,
120- err : Some ( e. kind ( ) ) ,
121- } )
118+ . map ( |package| vec ! [ package. name. to_string( ) , package. version. to_string( ) ] )
119+ . collect_vec ( ) ;
120+ let out = space_table ( & [ "Package" , "Version" ] , packages) ;
121+
122+ write ! ( buffer, "{}" , out) . map_err ( |e| Error :: StandardIo {
123+ action : StandardIoAction :: Write ,
124+ err : Some ( e. kind ( ) ) ,
125+ } )
122126}
123127
124128fn list_package_and_dependencies_tree < W : std:: io:: Write > (
@@ -409,104 +413,26 @@ pub fn resolve_and_download<Telem: Telemetry>(
409413
410414fn format_versions_and_extract_longest_parts (
411415 versions : dependency:: PackageVersionDiffs ,
412- ) -> (
413- impl Iterator < Item = ( String , String , String ) > ,
414- ( usize , usize ) ,
415- ) {
416- let versions = versions
416+ ) -> Vec < Vec < String > > {
417+ versions
417418 . iter ( )
418- . map ( |( name, ( v1, v2) ) | ( name. to_string ( ) , v1. to_string ( ) , v2. to_string ( ) ) )
419- . sorted ( ) ;
420-
421- let longest_parts =
422- versions
423- . clone ( )
424- . fold ( ( 0 , 0 ) , |( max_name, max_current) , ( name, current, _) | {
425- ( max_name. max ( name. len ( ) ) , max_current. max ( current. len ( ) ) )
426- } ) ;
427-
428- ( versions, longest_parts)
419+ . map ( |( name, ( v1, v2) ) | vec ! [ name. to_string( ) , v1. to_string( ) , v2. to_string( ) ] )
420+ . sorted ( )
421+ . collect_vec ( )
429422}
430423
431424fn pretty_print_major_versions_available ( versions : dependency:: PackageVersionDiffs ) -> String {
432- let ( versions, ( longest_package_name_length, longest_current_version_length) ) =
433- format_versions_and_extract_longest_parts ( versions) ;
434-
435- let mut output_string = String :: new ( ) ;
436-
437- output_string. push_str ( "\n The following dependencies have new major versions available:\n \n " ) ;
438- for ( name, v1, v2) in versions {
439- let name_padding = " " . repeat ( longest_package_name_length - name. len ( ) ) ;
440- let current_version_padding =
441- " " . repeat ( longest_current_version_length - v1. to_string ( ) . len ( ) ) ;
442-
443- output_string. push_str (
444- & [
445- & name,
446- & name_padding,
447- " " ,
448- & v1. to_string ( ) ,
449- & current_version_padding,
450- " -> " ,
451- & v2. to_string ( ) ,
452- "\n " ,
453- ]
454- . concat ( ) ,
455- ) ;
456- }
425+ let versions = format_versions_and_extract_longest_parts ( versions) ;
457426
458- output_string
427+ format ! (
428+ "\n The following dependencies have new major versions available:\n \n {}" ,
429+ space_table( & [ "Package" , "Current" , "Latest" ] , & versions)
430+ )
459431}
460432
461- fn pretty_print_version_updates ( versions : dependency:: PackageVersionDiffs ) -> String {
462- let ( versions, ( longest_package_name_length, longest_current_version_length) ) =
463- format_versions_and_extract_longest_parts ( versions) ;
464-
465- let longest_package_name_length = longest_package_name_length. max ( 7 ) ;
466- let longest_current_version_length = longest_current_version_length. max ( 8 ) ;
467-
468- let mut output_string = String :: new ( ) ;
469-
470- let name_padding = " " . repeat ( longest_package_name_length - 6 ) ;
471- let current_version_padding = " " . repeat ( longest_current_version_length - 7 ) ;
472-
473- output_string. push_str (
474- & [
475- "Package" ,
476- & name_padding,
477- " Current" ,
478- & current_version_padding,
479- " Latest\n " ,
480- "-------" ,
481- & name_padding,
482- " -------" ,
483- & current_version_padding,
484- " ------\n " ,
485- ]
486- . concat ( ) ,
487- ) ;
488-
489- for ( name, v1, v2) in versions {
490- let name_padding = " " . repeat ( longest_package_name_length - name. len ( ) ) ;
491- let current_version_padding =
492- " " . repeat ( longest_current_version_length - v1. to_string ( ) . len ( ) ) ;
493-
494- output_string. push_str (
495- & [
496- & name,
497- & name_padding,
498- " " ,
499- & v1. to_string ( ) ,
500- & current_version_padding,
501- " " ,
502- & v2. to_string ( ) ,
503- "\n " ,
504- ]
505- . concat ( ) ,
506- ) ;
507- }
508-
509- output_string
433+ fn pretty_print_version_updates ( versions : dependency:: PackageVersionDiffs ) -> EcoString {
434+ let versions = format_versions_and_extract_longest_parts ( versions) ;
435+ space_table ( & [ "Package" , "Current" , "Latest" ] , & versions)
510436}
511437
512438async fn add_missing_packages < Telem : Telemetry > (
0 commit comments