[PATCH] D53347: [clangd] Simplify auto hover
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 19 16:04:58 PDT 2018
ilya-biryukov added a comment.
In https://reviews.llvm.org/D53347#1267216, @kadircet wrote:
> LGTM, it bugs me that some part in the documentation says it doesn't go through decltype(`This looks through declarators like pointer types, but not through decltype or typedefs`) but since tests containing decltype didn't break it looks OK to me. I would still wait for @hokein to have another look as well.
The decltypes are handled separately in `VisitDecltypeTypeLoc` and typedefs are a decl, so they are handled even before the visitor runs. This is only about 'auto'. So I think we're covered here.
================
Comment at: clangd/XRefs.cpp:592
- auto DeclT = UnwrapReferenceOrPointer(D->getType());
- const AutoType *AT = dyn_cast<AutoType>(DeclT.getTypePtr());
- if (AT && !AT->getDeducedType().isNull()) {
- // For auto, use the underlying type because the const& would be
- // represented twice: written in the code and in the hover.
- // Example: "const auto I = 1", we only want "int" when hovering on auto,
- // not "const int".
- //
- // For decltype(auto), take the type as is because it cannot be written
- // with qualifiers or references but its decuded type can be const-ref.
- DeducedType = AT->isDecltypeAuto() ? DeclT : DeclT.getUnqualifiedType();
- }
+ auto AT = D->getType()->getContainedAutoType();
+ if (AT && !AT->getDeducedType().isNull())
----------------
hokein wrote:
> Maybe just
>
> ```
> if (auto* DT = D->getType()->getContainedDeducedType())
> DeducedType = *DT;
> ```
>
> ?
It feels like explicitly unwrapping auto from the deduced type instead of relying the printer to do that is a bit more straightforward.
Simplified code a bit per suggestions.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D53347
More information about the cfe-commits
mailing list