Parse command-line arguments into values.

        Parses arguments provided on the command-line (or sys.argv). Only
        returns arguments that are explicitly supplied, so we strip out
        defaults and validation rules like `required` in this call.

def cli_values(self, argv):
        """Parse command-line arguments into values.

        Parses arguments provided on the command-line (or sys.argv). Only
        returns arguments that are explicitly supplied, so we strip out
        defaults and validation rules like `required` in this call.
        """
        options = []
        for option in self._options:
            kwargs = option.kwargs.copy()
            # Must explicitly set default to None or `store_true` and
            # `store_false` actions will set the value to true or false,
            # respectively.
            kwargs['default'] = None
            kwargs['required'] = False
            options.append(Option(*option.args, **kwargs))
        parser = self.build_parser(options, add_help=False)
        parsed, extras = parser.parse_known_args(argv[1:] if argv else [])
        if extras and argv:
            valid, pass_thru = self.parse_passthru_args(argv[1:])
            parsed, extras = parser.parse_known_args(valid)
            self.pass_thru_args = pass_thru + extras
        else:
            # maybe reset pass_thru_args on subsequent calls
            # parse() -> cli_values() is called post-plugin-init
            self.pass_thru_args = []

        return {k: v for k, v in vars(parsed).items() if v is not None}