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

    <tr>
        <th>Summary</th>
        <td>
            [clang-include-cleaner] suggest to insert header where base class is defined
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            false-positive,
            clang-include-cleaner
      </td>
    </tr>

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

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

<pre>
    `clang-include-cleaner` suggest to include header where base class is defined as well as forward declaration when base/derived class headers should be enough.

`clang-tidy misc-include-cleaner` output:

```
clang-tidy -checks="-*,misc-include-cleaner" Forward.cpp 
5 warnings generated.
Forward.cpp:3:39: warning: no header providing "detail::Forward" is directly included [misc-include-cleaner]
    2 | 
 3 | void Test::do_something(const detail::Forward& forward)
      | ^
Forward.cpp:5:5: warning: no header providing "Base" is directly included [misc-include-cleaner]
    5 | Base::do_something(forward);
      |     ^
```

I tried `clang-include-cleaner` from `main` (7d8b4eb0ead277f41ff69525ed807f9f6e227f37).

Base class header file (`Base.h`):

```
#pragma once

namespace detail
{
    class Forward;
}

class Base
{
public:
    virtual void do_something(const detail::Forward& forward);
};
```

Header file (`Forward.h`):

```
#pragma once

#include "Base.h"

class Test : public Base
{
public:
    void do_something(const detail::Forward& forward) override;
};
```

Source file (`Forward.cpp`):

```
#include "Forward.h"

void Test::do_something(const detail::Forward& forward)
{
 Base::do_something(forward);
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVU1v4zYQ_TXjC2GDGn3ZBx2UeI323J56KShyJLFLiwJJOci_L6iPjYM10jRYQAIpkPPmvccZUXivu4GogvwJ8vNOTKG3rvo2dTTQX2Ro-G53jVWvFRRcGjF0ez1IMynaS0NiIAcFZ37qOvKBBcvWVdaTUOTYS0-OWCM8MWmE90x7pqjVAykmPHshY-LYWvcinGKKpBFOBG2HGDrMkYAXRU7fSK0YC7ZnvreTUawhRoOduv4AvI7PxjRo9cqu2stHnO0UxilAWv8IWh9e30XvZU_yu4f0DIh7wBrw-SEiIrssIg5yHBnwOmcvwg166DyLZjoRSEWGd9sgrdP4niCtt91xOtjNv9HZm1Z66BggKgpCm0g53VBi3mipdiSDed3sVwzyp4c88zPwmjHGkEH5HHmydJ7drFbsT_JhwVf2b2-vFPpICY_SDj6whwSK7fQATys2W7Dzbz_Jzdf3E2qf5qP_qrx8pjBjPNJzRzl9esd6Hmfm9yUBvP6dBadj6g8aoXX2GjdchR7iN-CxVMcmo4aTUFiWbZa0bXHKMSd15GV7agtCLNu0BDyt9fv01i2rL602FLGg4HHx0EdSkfqD4gVMRye6q2B2kLSsD-JKfhSSthPkNZSb7CXTdpyzG1Cel8BlbXZxCxmnxmi5pI7hN-3CJMxSP1-smh9Jl8l733_7yYOtpP6vDYDp9nta6-vQA-K91NgALBblIvM_pH9dMrM3ck4r-lj7H3Zykh5pj-30ofo7pW9-bWJ_VbOvVfTpNlsLa2O6U1WqTulJ7KhKyrQ4YoZlsuurLONtm_BCJOpUNG3Z5EqW4pjK7FgmPKOdrpBjzpMk42mSJMmhyahNi6SQkmObZwVknK5Cm4Mxt-vBum6nvZ-oShCPOe6MaMj4-dZDbIXxtB-t10Hf4j8H8BkQH3c5YrwnXRVx983Ueci40T74t0xBBzPfqI8R8vP7C9OTC5-4L3eTM1Ufwuij1XgBvHQ69FNzkPYKeInp12E_OvsPyQB4mVV7wMsq_FbhvwEAAP__SI9yyA">