@@ -26,11 +26,26 @@ fn main() -> Result<ExitCode> {
2626 fig_telemetry:: set_dispatch_mode ( fig_telemetry:: DispatchMode :: On ) ;
2727 fig_telemetry:: init_global_telemetry_emitter ( ) ;
2828
29+ let mut args = std:: env:: args ( ) ;
30+ let subcommand = args. nth ( 1 ) ;
2931 let multithread = matches ! (
30- std :: env :: args ( ) . nth ( 1 ) . as_deref( ) ,
32+ subcommand . as_deref( ) ,
3133 Some ( "init" | "_" | "internal" | "completion" | "hook" | "chat" )
3234 ) ;
3335
36+ let runtime = if multithread {
37+ tokio:: runtime:: Builder :: new_multi_thread ( )
38+ } else {
39+ tokio:: runtime:: Builder :: new_current_thread ( )
40+ }
41+ . enable_all ( )
42+ . build ( ) ?;
43+
44+ // Hack as clap doesn't expose a custom command help.
45+ if subcommand. as_deref ( ) == Some ( "chat" ) && args. next ( ) . as_deref ( ) == Some ( "--help" ) {
46+ runtime. block_on ( cli:: Cli :: execute_chat ( Some ( vec ! [ "--help" . to_owned( ) ] ) , true ) ) ?;
47+ }
48+
3449 let parsed = match cli:: Cli :: try_parse ( ) {
3550 Ok ( cli) => cli,
3651 Err ( err) => {
@@ -58,14 +73,6 @@ fn main() -> Result<ExitCode> {
5873
5974 let verbose = parsed. verbose > 0 ;
6075
61- let runtime = if multithread {
62- tokio:: runtime:: Builder :: new_multi_thread ( )
63- } else {
64- tokio:: runtime:: Builder :: new_current_thread ( )
65- }
66- . enable_all ( )
67- . build ( ) ?;
68-
6976 let result = runtime. block_on ( async {
7077 let result = parsed. execute ( ) . await ;
7178 fig_telemetry:: finish_telemetry ( ) . await ;
0 commit comments