[PATCH] D116443: [clangd] Implement textDocument/typeDefinition

Utkarsh Saxena via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 13 04:39:37 PST 2022


usaxena95 accepted this revision.
usaxena95 added a comment.
This revision is now accepted and ready to land.

Thanks. LGTM.



================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1869
+      QualType VisitDesignatedInitExpr(const DesignatedInitExpr *S) {
+        for (auto &D : llvm::reverse(S->designators()))
+          if (D.isFieldDesignator())
----------------
Reason for `reverse` isn't clear to me. Can you add a comment.


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1880-1882
+      QualType VisitWhileStmt(const WhileStmt *S) { return type(S->getCond()); }
+      QualType VisitDoStmt(const DoStmt *S) { return type(S->getCond()); }
+      QualType VisitIfStmt(const IfStmt *S) { return type(S->getCond()); }
----------------
Can you add tests for these as well.


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1883
+      QualType VisitIfStmt(const IfStmt *S) { return type(S->getCond()); }
+      QualType VisitCaseStmt(const CaseStmt *S) { return type(S->getLHS()); }
+      QualType VisitCXXForRangeStmt(const CXXForRangeStmt *S) {
----------------
I think this would be useful for enumerations primarily. Would it work as of now (would we return the enum definition loc) ?


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1925-1927
+    // If we targeted something function-like, prefer its return type.
+    if (auto FT = Type->getAs<FunctionType>())
+      Type = FT->getReturnType();
----------------
Can this be accommodated in `typeForNode` ?
It would be nicer if we keep this method only for plumbing.


================
Comment at: clang-tools-extra/clangd/XRefs.h:110
+///
+/// For example, given `foo(b^ar())` where bar() returns unique_ptr<Foo>,
+/// this should return the definition of class Foo.
----------------
This is sounds confusing to me about the current behaviour. 
We would return `unique_ptr<T>` here atm. Maybe just have simple `returns Foo` here as of now.


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:1805
+           "namespace m { Target tgt; } auto x = m^::tgt;",
+           "Target funcCall(); auto x = ^funcCall();",
+           "Aggregate a = { {}, ^{} };",
----------------
Can you add a lambda as well
`"au^to x = []() -> Target {return Target{};}"`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116443/new/

https://reviews.llvm.org/D116443



More information about the cfe-commits mailing list