def __call__(self, func: typing.Callable) -> typing.Callable:
        funcname = func.__name__

        if self._argname not in inspect.signature(func).parameters:
            raise ValueError("{} has no argument {}!".format(
                funcname, self._argname))
        if not hasattr(func, 'glimpse_args'):
            func.glimpse_args = {}  # type: ignore
        elif func.glimpse_args is None:  # type: ignore
            raise ValueError("@cmdutils.argument got called above (after) "
                             "@cmdutils.register for {}!".format(funcname))

        arginfo = command.ArgInfo(**self._kwargs)
        func.glimpse_args[self._argname] = arginfo  # type: ignore

        return func