Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: avoid retrieving possible_values unless they're used #5267

Merged
merged 1 commit into from Dec 28, 2023

Commits on Dec 28, 2023

  1. perf: Avoid retrieving possible_values unless used

    In some sophisticated situations, these may be expensive to calculate.
    One example might be a '--branch' option accepting any single Git
    branch that exists on the remote -- in such a case, the remote would
    need to be queried for all possible_values. The cost is ultimately
    unavoidable at runtime since this validation has to happen eventually,
    but there's no need to pay it when generating help text if
    `is_hide_possible_values_set`.
    
    To keep '-h' fast, avoid collecting `possible_values` during '-h'
    unless we're actually going to use the values in display.
    
    This optimization is repeated for the manpage renderer.
    
    This is trivially based on the short-circuiting logic at [1], which at
    least supports the idea that actually consuming the iterator is not
    generally-guaranteed behavior when `hide_possible_values` is set.
    
    Note on the 'expensive' mod: This keeps all the possible_values tests
    in one file but allows the entire set of tests to be controlled by the
    'strings' feature (which is required to be able to use String rather
    than str for each possible value).
    
    [1]: clap_builder/src/builder/command.rs:long_help_exists_
    vermiculus committed Dec 28, 2023
    Configuration menu
    Copy the full SHA
    05cd057 View commit details
    Browse the repository at this point in the history