@@ -59,90 +59,88 @@ export function fileInfo(
5959 const colorize = options . colorize ?? false ;
6060
6161 return defineRenderer ( async ( _denops , { items } ) => {
62- // Process items in parallel
63- await Promise . all (
64- items . map ( async ( item ) => {
65- const { path } = item . detail ;
66- const parts : string [ ] = [ ] ;
67-
68- try {
69- // Get file stats
70- const stat = await Deno . stat ( path ) ;
71-
72- // Add requested fields
73- for ( const field of fields ) {
74- switch ( field ) {
75- case "size" : {
76- const sizeStr = stat . isFile
77- ? formatBytes ( stat . size )
78- : stat . isDirectory
79- ? "-"
80- : "0B" ;
81- parts . push ( sizeStr . padStart ( fieldWidths . size ) ) ;
82- break ;
83- }
62+ // Process items sequentially to avoid file system issues
63+ for ( const item of items ) {
64+ const { path } = item . detail ;
65+ const parts : string [ ] = [ ] ;
66+
67+ try {
68+ // Get file stats
69+ const stat = await Deno . stat ( path ) ;
70+
71+ // Add requested fields
72+ for ( const field of fields ) {
73+ switch ( field ) {
74+ case "size" : {
75+ const sizeStr = stat . isFile
76+ ? formatBytes ( stat . size )
77+ : stat . isDirectory
78+ ? "-"
79+ : "0B" ;
80+ parts . push ( sizeStr . padStart ( fieldWidths . size ) ) ;
81+ break ;
82+ }
8483
85- case "modified" : {
86- const mtime = stat . mtime ;
87- let timeStr : string ;
88- if ( mtime && relativeTime ) {
89- timeStr = formatRelativeTime ( mtime ) ;
90- } else if ( mtime ) {
91- timeStr = formatDate ( mtime ) ;
92- } else {
93- timeStr = "-" ;
94- }
95- parts . push ( timeStr . padEnd ( fieldWidths . modified ) ) ;
96- break ;
84+ case "modified" : {
85+ const mtime = stat . mtime ;
86+ let timeStr : string ;
87+ if ( mtime && relativeTime ) {
88+ timeStr = formatRelativeTime ( mtime ) ;
89+ } else if ( mtime ) {
90+ timeStr = formatDate ( mtime ) ;
91+ } else {
92+ timeStr = "-" ;
9793 }
94+ parts . push ( timeStr . padEnd ( fieldWidths . modified ) ) ;
95+ break ;
96+ }
9897
99- case "permissions" : {
100- const permsStr = formatPermissions ( stat . mode ) ;
101- parts . push ( permsStr . padEnd ( fieldWidths . permissions ) ) ;
102- break ;
103- }
98+ case "permissions" : {
99+ const permsStr = formatPermissions ( stat . mode ) ;
100+ parts . push ( permsStr . padEnd ( fieldWidths . permissions ) ) ;
101+ break ;
102+ }
104103
105- case "type" : {
106- const typeStr = stat . isDirectory
107- ? "dir"
108- : stat . isFile
109- ? "file"
110- : stat . isSymlink
111- ? "link"
112- : "other" ;
113- parts . push ( typeStr . padEnd ( fieldWidths . type ) ) ;
114- break ;
115- }
104+ case "type" : {
105+ const typeStr = stat . isDirectory
106+ ? "dir"
107+ : stat . isFile
108+ ? "file"
109+ : stat . isSymlink
110+ ? "link"
111+ : "other" ;
112+ parts . push ( typeStr . padEnd ( fieldWidths . type ) ) ;
113+ break ;
116114 }
117115 }
116+ }
118117
119- // Combine parts and append to label
120- const info = parts . join ( " " ) ;
121- if ( colorize ) {
122- // Add color based on file type
123- if ( stat . isDirectory ) {
124- item . label = `${ item . label } \x1b[34m${ info } \x1b[0m` ;
125- } else if ( stat . isSymlink ) {
126- item . label = `${ item . label } \x1b[36m${ info } \x1b[0m` ;
127- } else if ( ( stat . mode ?? 0 ) & 0o111 ) {
128- // Executable
129- item . label = `${ item . label } \x1b[32m${ info } \x1b[0m` ;
130- } else {
131- item . label = `${ item . label } \x1b[90m${ info } \x1b[0m` ;
132- }
118+ // Combine parts and append to label
119+ const info = parts . join ( " " ) ;
120+ if ( colorize ) {
121+ // Add color based on file type
122+ if ( stat . isDirectory ) {
123+ item . label = `${ item . label } \x1b[34m${ info } \x1b[0m` ;
124+ } else if ( stat . isSymlink ) {
125+ item . label = `${ item . label } \x1b[36m${ info } \x1b[0m` ;
126+ } else if ( ( stat . mode ?? 0 ) & 0o111 ) {
127+ // Executable
128+ item . label = `${ item . label } \x1b[32m${ info } \x1b[0m` ;
133129 } else {
134- item . label = `${ item . label } ${ info } ` ;
130+ item . label = `${ item . label } \x1b[90m ${ info } \x1b[0m ` ;
135131 }
136- } catch {
137- // If stat fails, add placeholder
138- const placeholder = fields . map ( ( field ) => {
139- const width = fieldWidths [ field as keyof typeof fieldWidths ] ?? 10 ;
140- return "-" . padEnd ( width ) ;
141- } ) . join ( " " ) ;
142- item . label = `${ item . label } ${ placeholder } ` ;
132+ } else {
133+ item . label = `${ item . label } ${ info } ` ;
143134 }
144- } ) ,
145- ) ;
135+ } catch {
136+ // If stat fails, add placeholder
137+ const placeholder = fields . map ( ( field ) => {
138+ const width = fieldWidths [ field as keyof typeof fieldWidths ] ?? 10 ;
139+ return "-" . padEnd ( width ) ;
140+ } ) . join ( " " ) ;
141+ item . label = `${ item . label } ${ placeholder } ` ;
142+ }
143+ }
146144 } ) ;
147145}
148146
0 commit comments