[PATCH] D53654: [clang] Improve ctor initializer completions.
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 29 02:13:12 PDT 2018
ilya-biryukov added inline comments.
================
Comment at: include/clang/Sema/CodeCompleteConsumer.h:767
+ /// When Kind == RK_Declaration and a FieldDecl has been passed as
+ /// Declaration, this will hold the identifiers name. To be used later on when
+ /// generating constructors for the variable.
----------------
NIT: does "identifiers name" refer to a field name? Maybe use "field name" directly to avoid possibly confusion.
================
Comment at: lib/Sema/SemaCodeComplete.cpp:3027
Ctx, Policy);
- AddTypedNameChunk(Ctx, Policy, ND, Result);
+ AddTypedNameChunk(Ctx, Policy, ND, Result, PreferredTypedName);
Result.AddChunk(CodeCompletionString::CK_LeftParen);
----------------
Maybe directly set the name here whenever PreferredTypedName is set and avoid changing the AddTypedNameChunk function?
This would keep the `AddTypedNameChunk` simpler and `PreferredTypedName` would simply become an overriden name that the code completion string should use instead of the declaration name.
I.e.
```
if (PreferredTypedName)
Result.AddTypedTextChunk(Result.getAllocator().CopyString(PreferredTypedName));
else
AddTypedNameChunk(Ctx, Policy, ...);
```
================
Comment at: lib/Sema/SemaCodeComplete.cpp:5192
+ const CXXRecordDecl *RD = Field->getType()->getAsCXXRecordDecl();
+ if (!RD) {
+ Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(FieldName));
----------------
Should we also have fallbacks for bases in addition to fields? They may also have non-class types.
Could we also add a test?
Should pop up in completions of dependent bases, e.g.
```
template <class T>
struct Y : T {};
template <class T>
struct X : std::vector<T> {}; // referring to an explicit template, however still dependent.
```
================
Comment at: lib/Sema/SemaCodeComplete.cpp:5193
+ if (!RD) {
+ Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(FieldName));
+ Builder.AddChunk(CodeCompletionString::CK_LeftParen);
----------------
Maybe add a comment that this is a fallback?
================
Comment at: test/CodeCompletion/ordinary-name-cxx11.cpp:65
// CHECK-CC1: COMPLETION: X : X
+ // CHECK-CC1-NEXT: COMPLETION: Pattern : X(<#X#>)
// CHECK-CC1-NEXT: COMPLETION: y : [#int#]y
----------------
This completion is outside constructor initializers.
Why behavior change for these completions too?
Repository:
rC Clang
https://reviews.llvm.org/D53654
More information about the cfe-commits
mailing list