diff --git a/examples/customcomplete.py b/examples/customcomplete.py index 89e2285..1646845 100755 --- a/examples/customcomplete.py +++ b/examples/customcomplete.py @@ -23,8 +23,9 @@ def process(args): - print("received =%r --input-file=%r --output-name=%r" % - (args.input_txt, args.input_file, args.output_name)) + print( + "received =%r [=%r] --input-file=%r --output-name=%r --hidden-opt=%r" % + (args.input_txt, args.suffix, args.input_file, args.output_name, args.hidden_opt)) def get_main_parser(): @@ -39,7 +40,7 @@ def get_main_parser(): parser = subparsers.add_parser("process", help="parse files") # `*.txt` file tab completion - parser.add_argument("input_txt", nargs="?").complete = TXT_FILE + parser.add_argument("input_txt", nargs='?').complete = TXT_FILE # file tab completion builtin shortcut parser.add_argument("-i", "--input-file").complete = shtab.FILE parser.add_argument( @@ -50,8 +51,9 @@ def get_main_parser(): ).complete = shtab.DIRECTORY # directory tab completion builtin shortcut - main_parser.add_argument('suffix', choices=['json', 'csv'], default='json', - help="Output format") + parser.add_argument("suffix", choices=['json', 'csv'], default='json', nargs='?', + help="Output format") + parser.add_argument("--hidden-opt", action='store_true', help=argparse.SUPPRESS) parser.set_defaults(func=process) return main_parser diff --git a/shtab/__init__.py b/shtab/__init__.py index 7a7240e..d63952c 100644 --- a/shtab/__init__.py +++ b/shtab/__init__.py @@ -624,14 +624,15 @@ def recurse_parser(cparser, positional_idx, requirements=None): for optional in cparser._get_optional_actions(): log.debug('%s| Optional: %s', log_prefix, optional.dest) - # Mingle all optional arguments for all subparsers - for optional_str in optional.option_strings: - log.debug('%s| | %s', log_prefix, optional_str) - if optional_str.startswith('--'): - optionals_double.add(optional_str[2:]) - elif optional_str.startswith('-'): - optionals_single.add(optional_str[1:]) - specials.extend(get_specials(optional, 'n', optional_str)) + if optional.help != SUPPRESS: + # Mingle all optional arguments for all subparsers + for optional_str in optional.option_strings: + log.debug('%s| | %s', log_prefix, optional_str) + if optional_str.startswith('--'): + optionals_double.add(optional_str[2:]) + elif optional_str.startswith('-'): + optionals_single.add(optional_str[1:]) + specials.extend(get_specials(optional, 'n', optional_str)) for positional in cparser._get_positional_actions(): if positional.help != SUPPRESS: