function protocolSection()

in src/objc-renderer.ts [918:959]


function protocolSection(protocol: ObjC.Protocol) {
  const nullability = nullabilityMacro(protocol.nullability);

  const protocolComments = protocol.comments.map(toCommentString).join('\n');
  const protocolCommentsSection =
    codeSectionForCodeStringWithoutExtraSpace(protocolComments);

  const protocolSection = codeSectionForCodeString(
    `@protocol ${protocol.name}${implementedProtocolsString(
      protocol.implementedProtocols,
    )}`,
  );

  const propertiesStr = protocol.properties.map(toPropertyString).join('\n');
  const propertiesSection = codeSectionForCodeString(propertiesStr);

  const implementedProtocols = implementedProtocolsIncludingNSObjectAndADTInit(
    protocol.implementedProtocols,
  );
  const classMethodsStr = protocol.classMethods
    .filter((method) => includeMethodInHeader(implementedProtocols, method))
    .map(toClassMethodHeaderString)
    .join('\n\n');
  const classMethodsSection = codeSectionForCodeString(classMethodsStr);

  const instanceMethodsStr = protocol.instanceMethods
    .filter((method) => includeMethodInHeader(implementedProtocols, method))
    .map(toInstanceMethodHeaderString)
    .join('\n\n');
  const instanceMethodsSection = codeSectionForCodeString(instanceMethodsStr);

  return (
    (nullability != null ? codeSectionForCodeString(nullability.prefix) : '') +
    protocolCommentsSection +
    protocolSection +
    propertiesSection +
    classMethodsSection +
    instanceMethodsSection +
    '@end\n\n' +
    (nullability != null ? codeSectionForCodeString(nullability.postfix) : '')
  );
}