diff options
| author | Alex Lorenz <arphaman@gmail.com> | 2017-02-13 23:19:40 +0000 |
|---|---|---|
| committer | Alex Lorenz <arphaman@gmail.com> | 2017-02-13 23:19:40 +0000 |
| commit | 8f4d399c99a577013e0f1f03dbbaca710e906f59 (patch) | |
| tree | 90a48a79025ad8dc0d6041fe92c29627c1f71986 /clang/test/CodeCompletion | |
| parent | 5be2e8415c473b16bc618f9c9a4da7fe076a69fa (diff) | |
| download | bcm5719-llvm-8f4d399c99a577013e0f1f03dbbaca710e906f59.tar.gz bcm5719-llvm-8f4d399c99a577013e0f1f03dbbaca710e906f59.zip | |
[CodeCompletion] Code complete the missing C++11 keywords
This commit adds context sensitive code completion support for the C++11
keywords that currently don't have completion results.
The following keywords are supported by this patch:
alignas
constexpr
static_assert
noexcept (as a function/method qualifier)
thread_local
The following special identifiers are also supported:
final (as a method qualifier or class qualifier)
override
rdar://29219185
Differential Revision: https://reviews.llvm.org/D28286
llvm-svn: 295001
Diffstat (limited to 'clang/test/CodeCompletion')
| -rw-r--r-- | clang/test/CodeCompletion/keywords.cpp | 79 | ||||
| -rw-r--r-- | clang/test/CodeCompletion/ordinary-name-cxx11.cpp | 9 |
2 files changed, 88 insertions, 0 deletions
diff --git a/clang/test/CodeCompletion/keywords.cpp b/clang/test/CodeCompletion/keywords.cpp new file mode 100644 index 00000000000..6e5824c2f18 --- /dev/null +++ b/clang/test/CodeCompletion/keywords.cpp @@ -0,0 +1,79 @@ +int function(int x) { + return x + 1; +} + +int variable = 0; + +class Class { +public: + Class() { } + + int method(int x) { + return x + 1; + } + + virtual void virtualMethod() { + } + + static void staticMethod() { + } + + static int staticVar; +}; + +class SubClass : public Class { + void virtualMethod() override final { + } +}; + +struct Struct { +}; + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:1:1 %s | FileCheck --check-prefix=CHECK-TOP-LEVEL %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:5:1 %s | FileCheck --check-prefix=CHECK-TOP-LEVEL %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:11:1 %s | FileCheck --check-prefix=CHECK-TOP-LEVEL %s +// CHECK-TOP-LEVEL: alignas(<#expression#>) +// CHECK-TOP-LEVEL: constexpr +// CHECK-TOP-LEVEL: static_assert(<#expression#>, <#message#>) +// CHECK-TOP-LEVEL: thread_local +// CHECK-TOP-LEVEL-NOT: final +// CHECK-TOP-LEVEL-NOT: noexcept + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:1:14 %s | FileCheck --check-prefix=CHECK-PARAM %s +// CHECK-PARAM-NOT: alignas +// CHECK-PARAM-NOT: constexpr +// CHECK-PARAM-NOT: final +// CHECK-PARAM-NOT: thread_local + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:21:10 %s | FileCheck --check-prefix=CHECK-STATICVAR1 %s +// CHECK-STATICVAR1: constexpr +// CHECK-STATICVAR1: thread_local + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:7:13 %s | FileCheck --check-prefix=CHECK-CLASS-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:24:16 %s | FileCheck --check-prefix=CHECK-CLASS-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:29:15 %s | FileCheck --check-prefix=CHECK-CLASS-QUALIFIER %s +// CHECK-CLASS-QUALIFIER: final + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:1:21 %s | FileCheck --check-prefix=CHECK-FUNCTION-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:9:11 %s | FileCheck --check-prefix=CHECK-FUNCTION-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:18:30 %s | FileCheck --check-prefix=CHECK-FUNCTION-QUALIFIER %s +// CHECK-FUNCTION-QUALIFIER: noexcept +// CHECK-FUNCTION-QUALIFIER-NOT: final +// CHECK-FUNCTION-QUALIFIER-NOT: override + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:11:21 %s | FileCheck --check-prefix=CHECK-METHOD-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:15:32 %s | FileCheck --check-prefix=CHECK-METHOD-QUALIFIER %s +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:25:24 %s | FileCheck --check-prefix=CHECK-METHOD-QUALIFIER %s +// CHECK-METHOD-QUALIFIER: final +// CHECK-METHOD-QUALIFIER: noexcept +// CHECK-METHOD-QUALIFIER: override + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:25:33 %s | FileCheck --check-prefix=CHECK-OVERRIDE-SPECIFIED %s +// CHECK-OVERRIDE-SPECIFIED: final +// CHECK-OVERRIDE-SPECIFIED: noexcept +// CHECK-OVERRIDE-SPECIFIED-NOT: override + +// RUN: %clang_cc1 -std=c++11 -code-completion-at=%s:25:39 %s | FileCheck --check-prefix=CHECK-OVERRIDE-FINAL-SPECIFIED %s +// CHECK-OVERRIDE-FINAL-SPECIFIED: noexcept +// CHECK-OVERRIDE-FINAL-SPECIFIED-NOT: final +// CHECK-OVERRIDE-FINAL-SPECIFIED-NOT: override diff --git a/clang/test/CodeCompletion/ordinary-name-cxx11.cpp b/clang/test/CodeCompletion/ordinary-name-cxx11.cpp index 8e6f3832238..34c3bf96a9d 100644 --- a/clang/test/CodeCompletion/ordinary-name-cxx11.cpp +++ b/clang/test/CodeCompletion/ordinary-name-cxx11.cpp @@ -39,10 +39,12 @@ void foo() { // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) // CHECK-CC1-NEXT: COMPLETION: static + // CHECK-CC1-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) // CHECK-CC1-NEXT: COMPLETION: struct // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){ // CHECK-CC1: COMPLETION: t : t + // CHECK-CC1-NEXT: COMPLETION: thread_local // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#> // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#> @@ -72,6 +74,7 @@ void foo() { // CHECK-CC2-NEXT: COMPLETION: char32 // CHECK-CC2-NEXT: COMPLETION: class // CHECK-CC2-NEXT: COMPLETION: const + // CHECK-CC2-NEXT: COMPLETION: constexpr // CHECK-CC2-NEXT: COMPLETION: Pattern : decltype(<#expression#>) // CHECK-CC2-NEXT: COMPLETION: double // CHECK-CC2-NEXT: COMPLETION: enum @@ -86,10 +89,12 @@ void foo() { // CHECK-CC2-NEXT: COMPLETION: short // CHECK-CC2-NEXT: COMPLETION: signed // CHECK-CC2-NEXT: COMPLETION: static + // CHECK-CC2-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) // CHECK-CC2-NEXT: COMPLETION: struct // CHECK-CC2-NEXT: COMPLETION: t : t // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#> // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>> + // CHECK-CC2-NEXT: COMPLETION: thread_local // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> @@ -111,6 +116,7 @@ void foo() { // CHECK-CC3-NEXT: COMPLETION: char32_t // CHECK-CC3-NEXT: COMPLETION: class // CHECK-CC3-NEXT: COMPLETION: const + // CHECK-CC3-NEXT: COMPLETION: constexpr // CHECK-CC3-NEXT: COMPLETION: Pattern : decltype(<#expression#>) // CHECK-CC3-NEXT: COMPLETION: double // CHECK-CC3-NEXT: COMPLETION: enum @@ -129,8 +135,10 @@ void foo() { // CHECK-CC3-NEXT: COMPLETION: short // CHECK-CC3-NEXT: COMPLETION: signed // CHECK-CC3-NEXT: COMPLETION: static + // CHECK-CC3-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) // CHECK-CC3-NEXT: COMPLETION: struct // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>> + // CHECK-CC3-NEXT: COMPLETION: thread_local // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#> // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#> // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#> @@ -227,6 +235,7 @@ void foo() { // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>) // CHECK-NO-RTTI-NEXT: COMPLETION: static + // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>) // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>) // CHECK-NO-RTTI-NEXT: COMPLETION: struct // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch(<#condition#>){ |

