[clang] 5547a83 - [CodeComplete] Add code completion for using alias.
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 26 06:56:05 PDT 2020
Author: Kadir Cetinkaya
Date: 2020-06-26T15:55:45+02:00
New Revision: 5547a83c0b68a03a806d47782a4d3a6dc3b5d5f5
URL: https://github.com/llvm/llvm-project/commit/5547a83c0b68a03a806d47782a4d3a6dc3b5d5f5
DIFF: https://github.com/llvm/llvm-project/commit/5547a83c0b68a03a806d47782a4d3a6dc3b5d5f5.diff
LOG: [CodeComplete] Add code completion for using alias.
Add code completion for using alias.
Patch By @lh123 !
Reviewers: kadircet
Differential Revision: https://reviews.llvm.org/D82535
Added:
Modified:
clang/lib/Sema/SemaCodeComplete.cpp
clang/test/CodeCompletion/ordinary-name-cxx11.cpp
clang/test/CodeCompletion/ordinary-name.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 8835ecc79b9f..a96ea1e69bcc 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -1816,6 +1816,18 @@ static void AddTypedefResult(ResultBuilder &Results) {
Results.AddResult(CodeCompletionResult(Builder.TakeString()));
}
+// using name = type
+static void AddUsingAliasResult(CodeCompletionBuilder &Builder,
+ ResultBuilder &Results) {
+ Builder.AddTypedTextChunk("using");
+ Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+ Builder.AddPlaceholderChunk("name");
+ Builder.AddChunk(CodeCompletionString::CK_Equal);
+ Builder.AddPlaceholderChunk("type");
+ Builder.AddChunk(CodeCompletionString::CK_SemiColon);
+ Results.AddResult(CodeCompletionResult(Builder.TakeString()));
+}
+
static bool WantTypesInContext(Sema::ParserCompletionContext CCC,
const LangOptions &LangOpts) {
switch (CCC) {
@@ -2059,6 +2071,9 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
Builder.AddChunk(CodeCompletionString::CK_SemiColon);
Results.AddResult(Result(Builder.TakeString()));
+ if (SemaRef.getLangOpts().CPlusPlus11)
+ AddUsingAliasResult(Builder, Results);
+
// using typename qualifier::name (only in a dependent context)
if (SemaRef.CurContext->isDependentContext()) {
Builder.AddTypedTextChunk("using typename");
@@ -2139,6 +2154,9 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
case Sema::PCC_RecoveryInFunction:
case Sema::PCC_Statement: {
+ if (SemaRef.getLangOpts().CPlusPlus11)
+ AddUsingAliasResult(Builder, Results);
+
AddTypedefResult(Results);
if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns() &&
diff --git a/clang/test/CodeCompletion/ordinary-name-cxx11.cpp b/clang/test/CodeCompletion/ordinary-name-cxx11.cpp
index dcbb5ecb4f69..7593d00210e7 100644
--- a/clang/test/CodeCompletion/ordinary-name-cxx11.cpp
+++ b/clang/test/CodeCompletion/ordinary-name-cxx11.cpp
@@ -62,6 +62,7 @@ void foo() {
// CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)
// CHECK-CC1-NEXT: COMPLETION: union
// CHECK-CC1-NEXT: COMPLETION: unsigned
+ // CHECK-CC1-NEXT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-CC1-NEXT: COMPLETION: void
// CHECK-CC1-NEXT: COMPLETION: volatile
@@ -113,6 +114,7 @@ void foo() {
// CHECK-CC2-NEXT: COMPLETION: union
// CHECK-CC2-NEXT: COMPLETION: unsigned
// CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>;
+ // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-CC2-NEXT: COMPLETION: void
// CHECK-CC2-NEXT: COMPLETION: volatile
@@ -156,6 +158,7 @@ void foo() {
// CHECK-CC3-NEXT: COMPLETION: union
// CHECK-CC3-NEXT: COMPLETION: unsigned
// CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>
+ // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC3-NEXT: COMPLETION: virtual
// CHECK-CC3-NEXT: COMPLETION: void
// CHECK-CC3-NEXT: COMPLETION: volatile
@@ -264,6 +267,7 @@ void foo() {
// CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>)
// CHECK-NO-RTTI-NEXT: COMPLETION: union
// CHECK-NO-RTTI-NEXT: COMPLETION: unsigned
+ // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-NO-RTTI-NEXT: COMPLETION: void
// CHECK-NO-RTTI-NEXT: COMPLETION: volatile
diff --git a/clang/test/CodeCompletion/ordinary-name.cpp b/clang/test/CodeCompletion/ordinary-name.cpp
index a87c992d85f7..3c3d0c5d6883 100644
--- a/clang/test/CodeCompletion/ordinary-name.cpp
+++ b/clang/test/CodeCompletion/ordinary-name.cpp
@@ -59,6 +59,7 @@ void foo() {
// CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)
// CHECK-CC1-NEXT: COMPLETION: union
// CHECK-CC1-NEXT: COMPLETION: unsigned
+ // CHECK-CC1-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-CC1-NEXT: COMPLETION: void
// CHECK-CC1-NEXT: COMPLETION: volatile
@@ -103,6 +104,7 @@ void foo() {
// CHECK-CC2-NEXT: COMPLETION: union
// CHECK-CC2-NEXT: COMPLETION: unsigned
// CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>;
+ // CHECK-CC2-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-CC2-NEXT: COMPLETION: void
// CHECK-CC2-NEXT: COMPLETION: volatile
@@ -140,6 +142,7 @@ void foo() {
// CHECK-CC3-NEXT: COMPLETION: union
// CHECK-CC3-NEXT: COMPLETION: unsigned
// CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>;
+ // CHECK-CC3-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-CC3-NEXT: COMPLETION: virtual
// CHECK-CC3-NEXT: COMPLETION: void
// CHECK-CC3-NEXT: COMPLETION: volatile
@@ -232,6 +235,7 @@ void foo() {
// CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>)
// CHECK-NO-RTTI-NEXT: COMPLETION: union
// CHECK-NO-RTTI-NEXT: COMPLETION: unsigned
+ // CHECK-NO-RTTI-NOT: COMPLETION: Pattern : using <#name#> = <#type#>;
// CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>;
// CHECK-NO-RTTI-NEXT: COMPLETION: void
// CHECK-NO-RTTI-NEXT: COMPLETION: volatile
More information about the cfe-commits
mailing list