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

    <tr>
        <th>Summary</th>
        <td>
            Handle dependent-type member expr in WalkAST
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-include-cleaner
      </td>
    </tr>

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

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

<pre>
    This is a follow-up task after https://reviews.llvm.org/D139087 (which only handles `MemberExpr`)

Example:

```
template<typename T>
struct Base { void method(); };

template<typename T>
void k(Base<T> t) {
  t.method();
}
```

Similarly, the method call `.method()` implies the usage of the type of base expr `t`, we should include the header of class `Base`.

However, the `t.method()` is not a `MemberExpr`, but rather a `CXXDependentScopeMemberExpr`, we need to override the method `VisitCXXDependentScopeMemberExpr`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U01vqzoQ_TXDZpTI2HwuWDRJo27eqtV73Ro8CX4xGNkmaf79lUl6b3tbVUIG45kzZ874SO_1cSRqIN9AvkvkHHrrmt6eSI9Ja9W1eem1R-1R4sEaYy-recIg_QnlIZDDPoTJg3gAvge-d3TWdPFrY87D2roj8P0uFTWrSgReXXrd9WhHc8VejsqQRyjYPzS05B7fJgcFA14D2wF7uK2Pb3KYDEX8D39j3O1ZtoGGychAILbhOtEoB8IXEI-3Ux_c3AXcSE8I5QbPViscKPRWAa9iPbFBKHcgNh9r_Ay6gJyAVxEWxDaeYABexxK3EMSw_qvMHb_cfdvGbX3WgzbSmSvwLYae7lSxk8ZEtT5jFgz1MBlNfomdvTwS2sOyibTjdxs7p7fJxfSwaLzFC6Hv7WwU6rEzs6IlpSepyMWkzki_TGdpsGDrjxyf7IXO5N4ZRtivtDyONqD8ZsJbbOeAToae3C1g-_q6o4lGRWN47uxEXzIuhCORwmDRnsk5fWd8VwcK9q_2OvwMtE5UI1QtaplQkxYlE2mV1VXSN7VMBau7irO8FazKO2pLoQ5FWWQ8V3mX6IYzzlPOClbzVGRrnpVpoWSaVeqQHsoWMkaD1Ob31U-09zM1eS3yLDGyJeMXl3HeGTkeV3fdV50hOUYxeTSga2L-qp2PHjJmtA9_zJQEHQw1T4t1UL33uVoGPSyN3uasR_xPmtPD80syO9N8tuhRh35u150dgO8j9P21mpz9n7oAfL8w98D3C_lfAQAA__-2UUe9">