Skip to content

Commit

Permalink
[CodeComplete] Constructor overload candidates report as vector(int) …
Browse files Browse the repository at this point in the history
…instead of vector<string>(int)

Summary:
This is shorter, shouldn't be confusing (is consistent with how they're declared),
and avoids messy cases that are printed as myclass<type-param-0-0>(int) in the
case of partial specialization.

Fixes part of clangd/clangd#76

Reviewers: hokein, lh123

Subscribers: ilya-biryukov, kadircet, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D70307
  • Loading branch information
sam-mccall committed Nov 15, 2019
1 parent b0c1900 commit fa3b87f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
4 changes: 4 additions & 0 deletions clang/lib/Sema/SemaCodeComplete.cpp
Expand Up @@ -3653,6 +3653,10 @@ CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
unsigned CurrentArg, Sema &S, CodeCompletionAllocator &Allocator,
CodeCompletionTUInfo &CCTUInfo, bool IncludeBriefComments) const {
PrintingPolicy Policy = getCompletionPrintingPolicy(S);
// Show signatures of constructors as they are declared:
// vector(int n) rather than vector<string>(int n)
// This is less noisy without being less clear, and avoids tricky cases.
Policy.SuppressTemplateArgsInCXXConstructors = true;

// FIXME: Set priority, availability appropriately.
CodeCompletionBuilder Result(Allocator, CCTUInfo, 1,
Expand Down
9 changes: 8 additions & 1 deletion clang/test/CodeCompletion/templates.cpp
Expand Up @@ -24,5 +24,12 @@ void f() {
// CHECK-CC2: foo
// CHECK-CC2: in_base
// CHECK-CC2: stop

}


template <typename> struct X;
template <typename T> struct X<T*> { X(double); };
X<int*> x(42);
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:32:11 %s -o - | FileCheck -check-prefix=CHECK-CONSTRUCTOR %s
// CHECK-CONSTRUCTOR: OVERLOAD: X(<#double#>)
// (rather than X<type-parameter-0-0 *>(<#double#>)

0 comments on commit fa3b87f

Please sign in to comment.