Selaa lähdekoodia

Update formatting

clanker 1 kuukausi sitten
vanhempi
sitoutus
2c31b91e5a
2 muutettua tiedostoa jossa 121 lisäystä ja 17 poistoa
  1. 48 10
      src/cli/command-handler.vala
  2. 73 7
      src/output/text-formatter.vala

+ 48 - 10
src/cli/command-handler.vala

@@ -356,27 +356,54 @@ public class CommandHandler : Object {
         print ("Available VAPI files:\n");
         print ("\n");
         
+        // First pass: calculate maximum filename length
+        int max_filename_length = 0;
+        var file_data = new Gee.ArrayList<FileData> ();
+        
         foreach (string file_path in vapi_files) {
             var file = File.new_for_path (file_path);
             string filename = file.get_basename ();
             
+            // Track maximum filename length
+            if (filename.length > max_filename_length) {
+                max_filename_length = filename.length;
+            }
+            
+            // Collect file data for second pass
+            var data = new FileData ();
+            data.filename = filename;
+            data.path = file_path;
+            
             try {
                 var file_info = file.query_info (
                     FileAttribute.STANDARD_SIZE + "," + FileAttribute.TIME_MODIFIED,
                     FileQueryInfoFlags.NONE
                 );
                 
-                int64 size = file_info.get_size ();
-                uint64 modified_time = file_info.get_attribute_uint64 (FileAttribute.TIME_MODIFIED);
-                DateTime modified = new DateTime.from_unix_utc ((int64)modified_time);
-                
-                print ("%-30s %8s KB  %s\n",
-                       filename,
-                       (size / 1024).to_string (),
-                       modified.format ("%Y-%m-%d %H:%M"));
-                        
+                data.size = file_info.get_size ();
+                data.modified_time = file_info.get_attribute_uint64 (FileAttribute.TIME_MODIFIED);
+                data.has_info = true;
             } catch (Error e) {
-                print ("%-30s  (unable to get file info)\n", filename);
+                data.has_info = false;
+            }
+            
+            file_data.add (data);
+        }
+        
+        // Ensure minimum width for filename column
+        int filename_width = int.max (max_filename_length, 20);
+        
+        // Second pass: output with proper formatting
+        foreach (FileData data in file_data) {
+            if (data.has_info) {
+                DateTime modified = new DateTime.from_unix_utc ((int64)data.modified_time);
+                print ("%-*s %8s KB  %s\n",
+                       filename_width,
+                       data.filename,
+                       (data.size / 1024).to_string (),
+                       modified.format ("%Y-%m-%d %H:%M"));
+            } else {
+                print ("%-*s  (unable to get file info)\n", filename_width, data.filename);
             }
         }
         
@@ -473,4 +500,15 @@ public class CommandHandler : Object {
         var now = new DateTime.now_utc ();
         return now.format ("%Y-%m-%dT%H:%M:%S.%fZ");
     }
+}
+
+/**
+ * Helper class to store file information for formatting.
+ */
+private class FileData : Object {
+    public string filename { get; set; default = ""; }
+    public string path { get; set; default = ""; }
+    public int64 size { get; set; default = 0; }
+    public uint64 modified_time { get; set; default = 0; }
+    public bool has_info { get; set; default = false; }
 }

+ 73 - 7
src/output/text-formatter.vala

@@ -306,7 +306,10 @@ public class TextFormatter : Object, OutputFormatter {
             return;
         }
         
-        builder.append ("%s:\n".printf (title));
+        // Calculate maximum display name length for proper alignment
+        int max_name_length = 0;
+        var symbol_data = new Gee.ArrayList<SymbolData> ();
+        
         foreach (Symbol symbol in symbols) {
             string full_path = symbol.get_full_path ();
             string display_name;
@@ -318,7 +321,24 @@ public class TextFormatter : Object, OutputFormatter {
                 display_name = full_path;
             }
             
-            builder.append ("  %-30s %s\n".printf (display_name, symbol.access_modifier));
+            // Track maximum name length
+            if (display_name.length > max_name_length) {
+                max_name_length = display_name.length;
+            }
+            
+            // Store symbol data for formatting
+            var data = new SymbolData ();
+            data.display_name = display_name;
+            data.access_modifier = symbol.access_modifier;
+            symbol_data.add (data);
+        }
+        
+        // Ensure minimum width for name column
+        int name_width = int.max (max_name_length, 25);
+        
+        builder.append ("%s:\n".printf (title));
+        foreach (SymbolData data in symbol_data) {
+            builder.append ("  %-*s %s\n".printf (name_width, data.display_name, data.access_modifier));
         }
         builder.append ("\n");
     }
@@ -383,13 +403,34 @@ public class TextFormatter : Object, OutputFormatter {
             return;
         }
         
-        builder.append ("%s:\n".printf (title));
+        // Separate methods and other symbols for different formatting
+        var methods = new Gee.ArrayList<Symbol> ();
+        var other_symbols = new Gee.ArrayList<Symbol> ();
+        
         foreach (Symbol symbol in symbols) {
-            // Special handling for methods to show detailed signatures
             if (symbol.symbol_type == "method") {
-                string method_sig = format_method_signature ((Method) symbol);
-                builder.append ("  %s\n".printf (method_sig));
+                methods.add (symbol);
             } else {
+                other_symbols.add (symbol);
+            }
+        }
+        
+        builder.append ("%s:\n".printf (title));
+        
+        // Format methods first (they use full signature formatting)
+        foreach (Symbol symbol in methods) {
+            Method method = (Method) symbol;
+            string method_sig = format_method_signature (method);
+            builder.append ("  %s\n".printf (method_sig));
+        }
+        
+        // Format other symbols with proper column alignment
+        if (other_symbols.size > 0) {
+            // Calculate maximum display name length for proper alignment
+            int max_name_length = 0;
+            var symbol_data = new Gee.ArrayList<SymbolData> ();
+            
+            foreach (Symbol symbol in other_symbols) {
                 string full_path = symbol.get_full_path ();
                 string display_name;
                 
@@ -400,9 +441,34 @@ public class TextFormatter : Object, OutputFormatter {
                     display_name = full_path;
                 }
                 
-                builder.append ("  %-30s %s\n".printf (display_name, symbol.access_modifier));
+                // Track maximum name length
+                if (display_name.length > max_name_length) {
+                    max_name_length = display_name.length;
+                }
+                
+                // Store symbol data for formatting
+                var data = new SymbolData ();
+                data.display_name = display_name;
+                data.access_modifier = symbol.access_modifier;
+                symbol_data.add (data);
+            }
+            
+            // Ensure minimum width for name column
+            int name_width = int.max (max_name_length, 25);
+            
+            foreach (SymbolData data in symbol_data) {
+                builder.append ("  %-*s %s\n".printf (name_width, data.display_name, data.access_modifier));
             }
         }
+        
         builder.append ("\n");
     }
+}
+
+/**
+ * Helper class to store symbol information for formatting.
+ */
+private class SymbolData : Object {
+    public string display_name { get; set; default = ""; }
+    public string access_modifier { get; set; default = ""; }
 }