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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits