[PATCH] D81169: [clangd] Improve hover on arguments to function call
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 11 03:37:18 PDT 2020
kadircet marked an inline comment as done.
kadircet added inline comments.
================
Comment at: clang-tools-extra/clangd/Hover.cpp:695
+ const PrintingPolicy &Policy) {
+ if (!N)
+ return;
----------------
nit: this is already checked before entering the function.
================
Comment at: clang-tools-extra/clangd/Hover.cpp:871
+ if (CalleeArgInfo) {
+ Output.addRuler();
+ std::string Buffer;
----------------
I know you are planning to make more changes on how we render this, but let's not forget to drop the ruler in here.
================
Comment at: clang-tools-extra/clangd/Hover.cpp:717
+ if (const FunctionDecl *FD = CE->getDirectCallee()) {
+ if (FD->isOverloadedOperator() || FD->isVariadic() ||
+ FD->getNumParams() <= I)
----------------
adamcz wrote:
> kadircet wrote:
> > i can see the reason for variadics, but why bail out on overloaded operators? also can we have some tests for these two?
> I could totally see us supporting variadic, I'm just not sure how useful that will be, so I didn't do it right away.
>
> As for the operators, I don't think we should trigger on those. There are two cases:
> - things that do not look like a function call: operator+, operator<<, etc. When you hover over a variable it's not immediately obvious what the "passed to" would be referring to. Something like:
> foo(a+b);
> if I see "a passed as const int&" I might think this is about passing it to foo() (at least of first glance).
> At the same time, the value of this is very low for operators. You know what their signature is already.
>
> -operator() - this is much more like a function call. Maybe it would make sense to support it. It gets tricky with matching CallExpr args to FD params though. I'll leave a todo for now and worry about this in a separate change, if don't mind.jj
ok makes sense, you are definitely right about nested case, I wasn't thinking about it.
================
Comment at: clang-tools-extra/clangd/unittests/HoverTests.cpp:728
+ C c;
+ c.fun([[^a]], b);
+ }
----------------
adamcz wrote:
> kadircet wrote:
> > can you also add a test for a literal ?
> Currently there is no hover at all for literals. The reason was that it wouldn't be useful. This information, however, might be, especially in cases like:
> printThis(that, true, false, true);
> knowing what these refer to could be useful.
>
> Do you think this is good enough reason to enable hover on literals, with just this information? I'm thinking yes, but I'm not sure.
you are right, i remember carving the codepath for handling literals but forgot that we've disabled them at the time because there wasn't much info we could surface. I believe this one is a pretty good candidate (assuming LSP doesn't get "inline parameter annotations").
But definitely doesn't need to be handled in this patch, feel free to update the fixme on `getHoverContents(Expr ...)` though, saying we might want to surface callee information.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D81169/new/
https://reviews.llvm.org/D81169
More information about the cfe-commits
mailing list