docs: def set_formatter(name, func):
      """Replace the formatter function used by the trace decorator to
      handle formatting a specific kind of argument.  There are several
      kinds of arguments that trace discriminates between:
  
      * instance argument - the object bound to an instance method.
      * class argument - the class object bound to a class method.
      * positional arguments (named) - values bound to distinct names.
      * positional arguments (default) - named positional arguments with
        default values specified in the function declaration.
      * positional arguments (anonymous) - an arbitrary number of values
        that are all bound to the '*' variable.
      * keyword arguments - zero or more name-value pairs that are
        placed in a dictionary and bound to the double-star variable.
  
      \var{name} - specifies the name of the formatter to be modified.
  
          * instance argument - "self", "instance" or "this"
          * class argument - "class"
          * named argument - "named", "param" or "parameter"
          * default argument - "default", "optional"
          * anonymous argument - "anonymous", "arbitrary" or "unnamed"
          * keyword argument - "keyword", "pair" or "pairs"
  
      \var{func} - a function to format an argument.
      * For all but anonymous formatters this function must accept two
        arguments: the variable name and the value to which it is bound.
      * The anonymous formatter function is passed only one argument
        corresponding to an anonymous value.
      * if \var{func} is "None" then the default formatter will be used.
      """
      if name in ('self', 'instance', 'this'):
          global af_self
          af_self = _formatter_self if func is None else func
      elif name == 'class':
          global af_class
          af_class = _formatter_class if func is None else func
      elif name in ('named', 'param', 'parameter'):
          global af_named
          af_named = _formatter_named if func is None else func
      elif name in ('default', 'optional'):
          global af_default
          af_default = _formatter_defaults if func is None else func
      elif name in ('anonymous', 'arbitrary', 'unnamed'):
          global af_anonymous
          af_anonymous = chop if func is None else func
      elif name in ('keyword', 'pair', 'pairs'):
          global af_keyword
          af_keyword = _formatter_named if func is None else func
      else:
          raise ValueError('unknown trace formatter %r' % name)