<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/58943>58943</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-doc:yaml] Yaml Output does not include Info.InfoType for root objects
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mnesarco
      </td>
    </tr>
</table>

<pre>
    Hi Friends,
I am trying to use clang-doc's yaml output to feed a documentation database.
clang-doc dumps each Info into a yaml file, but it does not output InfoType field, so it is impossible to identify the type of Info when parsing the output files.

Reference:

https://github.com/llvm/llvm-project/blob/57416d872ae0fd3b8ee1808fed5c6b2ad4925bd8/clang-tools-extra/clang-doc/YAMLGenerator.cpp#L301


Pseudocode to fix this:

```
file: clang-doc/YAMLGenerator.cpp : 

llvm::Error YAMLGenerator::generateDocForInfo(Info *I, llvm::raw_ostream &OS,
                                              const ClangDocContext &CDCtx) {
  llvm::yaml::Output InfoYAML(OS);

  // InfoYAML << "Type: " << I->IT;  <------ (I know this is not how it is done, but it illustrates what is required)
  
  switch (I->IT) {
  case InfoType::IT_namespace:
    InfoYAML << *static_cast<clang::doc::NamespaceInfo *>(I);
    break;
  case InfoType::IT_record:
    InfoYAML << *static_cast<clang::doc::RecordInfo *>(I);
    break;
  case InfoType::IT_enum:
    InfoYAML << *static_cast<clang::doc::EnumInfo *>(I);
    break;
  case InfoType::IT_function:
    InfoYAML << *static_cast<clang::doc::FunctionInfo *>(I);
    break;
  case InfoType::IT_typedef:
    InfoYAML << *static_cast<clang::doc::TypedefInfo *>(I);
    break;
  case InfoType::IT_default:
    return llvm::createStringError(llvm::inconvertibleErrorCode(),
                                   "unexpected InfoType");
  }
  return llvm::Error::success();
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVktv4zYQ_jXyhbAhU7ElH3Rw7Lg1sO0Wu7nsKaDIkc2uTKp8bOJ_3xnKr-wWBYJEECw-ht988-CMG6uO9e-abZwGo3zGV1m-zvLllokDC-6ozY4Fy6IHJjthdmNlZcZLz47i0DEbQx8DCbQAigmGu_EAJoigrWFKBNEID5MB8wLAVDz0noGQe7Y1rWXaIIQYMFvdAdJgDQLrgIjgmbHhrIvkH489oBx0igS9JTntmT701nvddECMtEIeuj2ysMc5nbDtoO15D4b1wvlkHO6eoEmzP3Edfr9ACw6MhKxY3q7vQ-g9rfENvjsd9rGZSHvASdf9OH_GvbN_gww4bTrb4GdW3k3nqiq5gLxVRVMBTKu8akHN5LzhQt0t-KxRFYoOzgrWdn4ML8GJy1qKwObb8o9Pv4EBJ4J1E9n3GS8-Ffn0lubw-5eHiGesSm5p9QvarP1PFmXz_PSmaQpCsWT_q5GRxC1Ish1xi-WDc9axVyeGjd0whbWVG-soHBmvUlQyvtxSOK8gTjw_WR8cYCpmfP756yU72ZseaY0PbEWmoNqVNQEdSoir9Sq8ZHzBsvL-DHxVT9k4jD5fU49MQsbEZZEV97fWMzakw0UO_bPCF5c5ZWzyFufn1e04Kx62jwjCaGmcHkbeYN-NfU5Boqym3N_jfMhxZc3t7dBdF9FD6FCPaS2SiIN_onagiOGZ2Onrn3XAO0dKTtpfGy_xsl5u2GD79vHJiAP4XtzcAvLqr1YuPd17-YQoAVdS7gwglEBp8OcZ6hxyZEFsbr1J4A0G_fvNyn8TcyCtU-9n9SXhfAglMPHwfkIPiPIhdNpoJJXi91PanJA-hBaVYwXt-1k9DkAfQgpxROzCK1IOQnTmpihIhArwNTjsHanIob7rrjZYa36AC9SE0vYKyy6KEKM3FC8sE9HAS4_NA9vqhSnnry3LyvV5-AvRgVwa-igleH-icSla58OX0j-CejqfV9OqLPNqpOpCLYqFGAUdOqiz2f21GZyK42zNvlHLPtXHS6tGN3RRDS6eXBs2dgRnqZM31BX9KLqufnMn1d5H8NRLq8VdMdrX1VQh5UJU06YVlcAW2MzKRkrR5oWQbT7qRAOdJwPQgQawkhIEOXO2Huma55xP6Sl5xauJKGdNmzdtWclccHTZXQ4HobsJ8ZhYtxu5OlFq4s7jZqd98NdNgX9AdgaSvwhfxLC3rj4Y8MJJO0q668T9XzeLzqw">