[PATCH] D53654: [clang] Improve ctor initializer completions.

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 30 03:07:35 PDT 2018


ilya-biryukov added inline comments.


================
Comment at: lib/Sema/SemaCodeComplete.cpp:813
 
+static void AddTemplateParameterChunks(ASTContext &Context,
+                                       const PrintingPolicy &Policy,
----------------
We don't seem to need this fwd-decl anymore. Remove it?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:821
+
+DeclContext::lookup_result getConstructorResults(ASTContext &Context,
+                                                 const CXXRecordDecl *Record,
----------------
There's a function that does the same thing and also does some extra lifting to make sure implicit members are properly generated -  `Sema::LookupConstructors`. Maybe use it instead?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:831
+  // template args and one parameter with type's name.
+  /*
+  if (Ctors.begin() == Ctors.end()) {
----------------
Remove this code instead of commenting it out?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:882
+  auto Ctors = getConstructorResults(SemaRef.Context, Record, R);
+  for (DeclContext::lookup_iterator I = Ctors.begin(), E = Ctors.end(); I != E;
+       ++I) {
----------------
Maybe use range-baseed for loop?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:5123
+
+  auto generateCCS = [&](const NamedDecl *ND, const char *Name) {
+    Builder.AddTypedTextChunk(Name);
----------------
NIT: naming, use UpperCamelCase


================
Comment at: lib/Sema/SemaCodeComplete.cpp:5135
+  };
+  auto AddDefaultCtorInit = [&](const char *TypedName,
+                                const char *TypeName,
----------------
kadircet wrote:
> ZaMaZaN4iK wrote:
> > Is it good idea to capture ALL by reference? Probably will be better to capture only required things by reference
> That's the case within the rest of the code, so I did that to be consistent, and apart from that I don't think this brings any disadvantages.
`TypedName` and `TypeName` are too similar. Maybe pick names that are easier to distinguish?
`Name` and `Type` seem to be a good fit


================
Comment at: lib/Sema/SemaCodeComplete.cpp:5136
+  auto AddDefaultCtorInit = [&](const char *TypedName,
+                                const char *TypeName,
+                                const NamedDecl* ND) {
----------------
Maybe use StringRef?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:5151
+  auto AddCtorsWithName = [&](const CXXRecordDecl *RD,
+                              const CodeCompletionResult R, const char *Name) {
+    auto Ctors = getConstructorResults(Context, RD, R);
----------------
`CodeCompletionResult R`  looks redundant here? Do we really need it?


================
Comment at: lib/Sema/SemaCodeComplete.cpp:5166
+    const auto *RD = Base.getType()->getAsCXXRecordDecl();
+    if (!RD)
+      return AddDefaultCtorInit(BaseName, BaseName, nullptr);
----------------
The code past that point is the same between AddBase and AddField. Maybe move it into AddCtorsWithName?


Repository:
  rC Clang

https://reviews.llvm.org/D53654





More information about the cfe-commits mailing list