docs: def analyse_action(func):
      """Analyse a function."""
      description = inspect.getdoc(func) or 'undocumented action'
      arguments = []
      args, varargs, kwargs, defaults = inspect.getargspec(func)
      if varargs or kwargs:
          raise TypeError('variable length arguments for action not allowed.')
      if len(args) != len(defaults or ()):
          raise TypeError('not all arguments have proper definitions')
  
      for idx, (arg, definition) in enumerate(zip(args, defaults or ())):
          if arg.startswith('_'):
              raise TypeError('arguments may not start with an underscore')
          if not isinstance(definition, tuple):
              shortcut = None
              default = definition
          else:
              shortcut, default = definition
          argument_type = argument_types[type(default)]
          if isinstance(default, bool) and default is True:
              arg = 'no-' + arg
          arguments.append((arg.replace('_', '-'), shortcut,
                            default, argument_type))
      return func, description, arguments