@@ -388,6 +388,20 @@ def capital(self):
388388int_num_re = re .compile (r"([+-]?[0-9]+)" , flags = re .IGNORECASE )
389389
390390
391+ def distinguish_inout (string , cls ) -> cli_types .CliFileSystemType :
392+ """
393+ distinguish input/output files/directories given a string
394+ """
395+ im = input_re .search (string )
396+ om = output_re .search (string )
397+ if im and not om :
398+ return cls (output = False )
399+ elif not im and om :
400+ return cls (output = True )
401+ else :
402+ return cls ()
403+
404+
391405def infer_type (string ) -> typing .Optional [cli_types .CliType ]:
392406 """
393407 Reads a string (argument description etc) to find hints about what type this argument might be. This is
@@ -400,19 +414,9 @@ def infer_type(string) -> typing.Optional[cli_types.CliType]:
400414 elif int_re .search (string ):
401415 return cli_types .CliInteger ()
402416 elif file_re .search (string ):
403- if input_re .search (string ) and not output_re .search (string ):
404- return cli_types .CliFile (output = False )
405- elif not input_re .search (string ) and output_re .search (string ):
406- return cli_types .CliFile (output = True )
407- else :
408- return cli_types .CliFile ()
417+ return distinguish_inout (string , cli_types .CliFile )
409418 elif dir_re .search (string ):
410- if input_re .search (string ) and not output_re .search (string ):
411- return cli_types .CliDir (output = False )
412- elif not input_re .search (string ) and output_re .search (string ):
413- return cli_types .CliDir (output = True )
414- else :
415- return cli_types .CliDir ()
419+ return distinguish_inout (string , cli_types .CliDir )
416420 elif str_re .search (string ):
417421 return cli_types .CliString ()
418422 elif float_num_re .search (string ):
0 commit comments