docs: def convert_protodef_to_editable(proto):
      """
      Protobuf objects can't have arbitrary fields addedd and we need to later on
      add comments to them, so we instead make "Editable" objects that can do so
      """
      class Editable(object):
          def __init__(self, prot):
              self.kind = type(prot)
              self.name = prot.name
              self.comment = ""
              self.options = dict([(key.name, value) for (key, value) in prot.options.ListFields()])
              if isinstance(prot, EnumDescriptorProto):
                  self.value = [convert_protodef_to_editable(x) for x in prot.value]
              elif isinstance(prot, DescriptorProto):
                  self.field = [convert_protodef_to_editable(x) for x in prot.field]
                  self.enum_type = [convert_protodef_to_editable(x) for x in prot.enum_type]
                  self.nested_type = prot.nested_type
                  self.oneof_decl = prot.oneof_decl
              elif isinstance(prot, EnumValueDescriptorProto):
                  self.number = prot.number
              elif isinstance(prot, FieldDescriptorProto):
                  if prot.type in [11, 14]:
                      self.ref_type = prot.type_name[1:]
                  self.type = prot.type
                  self.label = prot.label
              elif isinstance(prot, ServiceDescriptorProto):
                  self.method = [convert_protodef_to_editable(x) for x in prot.method]
              elif isinstance(prot, MethodDescriptorProto):
                  self.input_type = prot.input_type
                  self.output_type = prot.output_type
              else:
                  raise Exception, type(prot)
  
      return Editable(proto)