@@ -94,7 +94,7 @@ def __init__(
9494 self .requested_sdk : Optional [str ] = self ._resolve_requested_sdk ()
9595 self .solution : str = self .SOLUTION_PATH or self .detect_solution ()
9696 self .argparser : Optional [argparse .ArgumentParser ] = None
97- self .handlers : Dict [str , Callable [[argparse .Namespace , List [str ]], None ]] = {}
97+ self .handlers : Dict [str , Callable [["Host" , argparse .Namespace , List [str ]], None ]] = {}
9898 self ._subparsers_action : Optional [argparse ._SubParsersAction ] = None
9999
100100 # --- CLI and Command Registration ---
@@ -109,6 +109,8 @@ def get_argparser(self) -> argparse.ArgumentParser:
109109 if self .argparser is not None :
110110 return self .argparser
111111
112+ from . import handlers
113+
112114 parser = argparse .ArgumentParser (
113115 prog = self .name ,
114116 description = self .description ,
@@ -121,8 +123,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
121123 required = False ,
122124 metavar = '' ,
123125 )
124- subparsers .required = False
125- parser .set_defaults (command = 'build' , func = self ._handle_dotnet_command )
126+ parser .set_defaults (command = 'build' )
126127 self ._subparsers_action = subparsers
127128
128129 # Register built-in dotnet commands
@@ -134,7 +135,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
134135 usage = self .argparser_usage .replace ('command' , cmd ['name' ]),
135136 add_help = False ,
136137 )
137- self .register_handler (cmd ['name' ], self . _handle_dotnet_command )
138+ self .register_handler (cmd ['name' ], handlers . handle_dotnet_builtin )
138139
139140 # Register bite command only if bite.proj exists
140141 if os .path .isfile (self .BITE_PROJ_PATH ):
@@ -146,7 +147,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
146147 )
147148 run_parser .add_argument ('target' , nargs = '?' , default = 'help' , help = 'bite.core target to run, default is "help"' )
148149 run_parser .add_argument ('--list' , '-l' , action = 'store_true' , help = 'List available targets' )
149- self .register_handler ('run' , self . _handle_bite_run )
150+ self .register_handler ('run' , handlers . handle_bite_run )
150151
151152 subparsers .add_parser (
152153 'dotnet' ,
@@ -155,15 +156,15 @@ def get_argparser(self) -> argparse.ArgumentParser:
155156 usage = self .argparser_usage .replace ('command' , 'dotnet' ) + ' [command]' ,
156157 add_help = False ,
157158 )
158- self .register_handler ('dotnet' , self . _handle_dotnet_cli )
159+ self .register_handler ('dotnet' , handlers . handle_dotnet_cli )
159160
160161 self .argparser = parser
161162 return self .argparser
162163
163164 def add_command (
164165 self ,
165166 name : str ,
166- handler : Callable [[argparse .Namespace , List [str ]], None ],
167+ handler : Callable [["Host" , argparse .Namespace , List [str ]], None ],
167168 description : Optional [str ] = None ,
168169 help : str = "" ,
169170 arguments : Optional [List [Dict [str , Any ]]] = None ,
@@ -188,7 +189,7 @@ def add_command(
188189 sub .add_argument (* arg .get ('args' , ()), ** arg .get ('kwargs' , {}))
189190 self .register_handler (name , handler )
190191
191- def register_handler (self , command : str , handler : Callable [[argparse .Namespace , List [str ]], None ]) -> None :
192+ def register_handler (self , command : str , handler : Callable [["Host" , argparse .Namespace , List [str ]], None ]) -> None :
192193 """
193194 Register a custom handler for a command.
194195
@@ -209,54 +210,10 @@ def dispatch(self, args: argparse.Namespace, unknown_args: Optional[List[str]] =
209210 extras = unknown_args or []
210211 command = getattr (args , 'command' , None )
211212 if command and command in self .handlers :
212- self .handlers [command ](args , extras )
213+ self .handlers [command ](self , args , extras )
213214 else :
214215 self .get_argparser ().print_help ()
215216
216- # --- Dotnet/MSBuild Command Handlers ---
217-
218- def _handle_dotnet_cli (self , args : argparse .Namespace , extras : List [str ]) -> None :
219- """
220- Handle custom dotnet commands.
221- Passes any extra arguments to the dotnet CLI.
222- """
223- self .run ('' , * extras )
224-
225- def _handle_dotnet_command (self , args : argparse .Namespace , extras : List [str ]) -> None :
226- """
227- Handle built-in dotnet commands.
228- Passes any extra arguments to the dotnet CLI.
229- """
230- self .run_builtin (args .command , * extras )
231-
232- def _handle_bite_run (self , args : argparse .Namespace , extras : List [str ]) -> None :
233- """
234- Handle the 'run' command, running a custom msbuild target.
235- Passes any extra arguments to msbuild.
236- """
237- list_targets = getattr (args , 'list' , False )
238- if list_targets :
239- dependant_targets : List [MSBuildTarget ] = []
240- targets = self ._get_bite_core_targets ()
241- print ("Available independent targets:" )
242- for target in targets :
243- if getattr (target , 'AfterTargets' , None ) is None and getattr (target , 'BeforeTargets' , None ) is None :
244- print (f" { target .Name } " )
245- else :
246- dependant_targets .append (target )
247- if dependant_targets :
248- print ("\n Available automated targets:" )
249- for target in dependant_targets :
250- print (f" { target .Name } " , end = ' ' )
251- if getattr (target , 'AfterTargets' , None ):
252- print (f"(after '{ target .AfterTargets } ')" , end = ' ' )
253- if getattr (target , 'BeforeTargets' , None ):
254- print (f"(before '{ target .BeforeTargets } ')" , end = ' ' )
255- print ()
256- return
257- target = getattr (args , 'target' , 'help' )
258- self .run_bite (target , * extras )
259-
260217 # --- Dotnet/MSBuild Execution ---
261218
262219 def run (self , command : str , * args : str , capture_output : bool = False ) -> Optional [subprocess .CompletedProcess ]:
0 commit comments