docs: def format_frame_info(frame):
      """
      Formats the given stack frame to show its position in the code and
      part of its context
  
      :param frame: A stack frame
      """
      # Same as in traceback.extract_stack
      line_no = frame.f_lineno
      code = frame.f_code
      filename = code.co_filename
      method_name = code.co_name
      linecache.checkcache(filename)
  
      try:
          # Try to get the type of the calling object
          instance = frame.f_locals["self"]
          method_name = "{0}::{1}".format(type(instance).__name__, method_name)
      except KeyError:
          # Not called from a bound method
          pass
  
      # File & line
      output_lines = [
          '  File "{0}", line {1}, in {2}'.format(filename, line_no, method_name)
      ]
  
      # Arguments
      if frame.f_locals:
          # Pypy keeps f_locals as an empty dictionary
          arg_info = inspect.getargvalues(frame)
          for name in arg_info.args:
              try:
                  output_lines.append(
                      "    - {0:s} = {1}".format(name, repr(frame.f_locals[name]))
                  )
              except TypeError:
                  # Happens in dict/list-comprehensions in Python 2.x
                  name = name[0]
                  output_lines.append(
                      "    - {0:s} = {1}".format(name, repr(frame.f_locals[name]))
                  )
  
          if arg_info.varargs:
              output_lines.append(
                  "    - *{0:s} = {1}".format(
                      arg_info.varargs, frame.f_locals[arg_info.varargs]
                  )
              )
  
          if arg_info.keywords:
              output_lines.append(
                  "    - **{0:s} = {1}".format(
                      arg_info.keywords, frame.f_locals[arg_info.keywords]
                  )
              )
  
      # Line block
      lines = _extract_lines(filename, frame.f_globals, line_no, 3)
      if lines:
          output_lines.append("")
          prefix = "      "
          output_lines.append(
              "{0}{1}".format(prefix, "\n{0}".format(prefix).join(lines))
          )
      return "\n".join(output_lines)