https://github.com/HighCommander4 requested changes to this pull request.

Thanks for working on this, it's an important issue that has been bothering a 
lot of people!

Unfortunately, the current implementation approach regresses the current 
(intentional) behaviour that when you're taking the address of a function, 
function parameters are **not** inserted.

For example:

```c++
struct Test {
    void fun(int a, int b, int c);
};

int main() {
  Test t;
  &Test::f^
}
```

The expected completion here is just `fun`, but with this patch it will be 
`fun(int a, int b, int c)`.

(This is reflected in the test case 
`CompletionTest.HeuristicsForMemberFunctionCompletion`. We want to keep this 
test case passing without changes to the expectations.)

I think the way this should be implemented is that in SemaCodeComplete, we 
determine whether we are completing the declaration/definition of a function, 
or a use of it.

Sam gave a hint for how to do this in [this 
comment](https://github.com/clangd/clangd/issues/880#issuecomment-961533830):

> It looks like ParseOptionalCXXScopeSpecifier also doesn't know, so maybe the 
> right thing is to add yet another boolean parameter there and pass `true` if 
> we're parsing a declarator.

(`ParseOptionalCXXScopeSpecifier` is the caller of 
`SemaCodeCompletion::CodeCompleteQualifiedId`, so the idea would be to pass 
this new boolean parameter into `CodeCompleteQualifiedId`.)

Once we have this piece of knowledge available in SemaCodeComplete, we can 
implement more of the "definition vs. use" logic there. For example, rather 
than doctoring the code completion string in clangd to remove the placehoders 
in the "definition" case, we can just not add placeholder chunks in the first 
place.

If you'd like to give implementing this approach a try and have some follow-up 
questions, please don't hesitate to ask, either here or in the clangd Discord 
channel.

https://github.com/llvm/llvm-project/pull/165916
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to