[clang] [clang-tools-extra] [clangd] Autocomplete fixes for methods (PR #165916)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 20 00:16:41 PST 2026


HighCommander4 wrote:

I've started to look at the implementation. I haven't looked through everything in detail yet, but the main thing I'm noticing so far is that the patch doesn't actually implement Sam's suggestion of having the parser pass in to `CodeCompleteQualifiedId` a flag indicated that we are in a declaration context.

Instead, the patch is inferring this information inside `CodeCompleteQualifiedId` by doing this:

```c++
  if (!SemaRef.CurContext->isFunctionOrMethod() &&
      !SemaRef.CurContext->isRecord()) {
    // Assume we are completing a declaration
  }
```

But this has false positives. For example:

```c++
namespace N {
  int foo(int required, int optional = 42);
}

int foo = N::f^
```

Here, the behaviour before the patch was to produce a `DeclaringEntity=false` completion, giving us just the required argument and making it a placeholder.

The behaviour after the patch is to produce a `DeclaringEntity=true` completion, inserting both arguments with no placeholders.

I think it would be better to keep this a `DeclaringEntity=false` completion by using a more accurate determination of whether we are in a declaration context, by having the parser pass in a boolean to `CodeCompleteQualifiedId` indicating this. (Note, this would be an additional boolean to `IsAddressOfOperand`, something like `IsInDeclarationContext`.)

https://github.com/llvm/llvm-project/pull/165916


More information about the cfe-commits mailing list