From 3a2f0e466b58e48f83a3849c3c96d57b82427f30 Mon Sep 17 00:00:00 2001 From: Ilya Biryukov Date: Thu, 23 May 2019 07:45:35 +0000 Subject: [CodeComplete] Complete a lambda when preferred type is a function Summary: Uses a heuristic to detect std::function and friends. Reviewers: kadircet Reviewed By: kadircet Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D62238 llvm-svn: 361461 --- clang/test/CodeCompletion/lambdas.cpp | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 clang/test/CodeCompletion/lambdas.cpp (limited to 'clang/test/CodeCompletion/lambdas.cpp') diff --git a/clang/test/CodeCompletion/lambdas.cpp b/clang/test/CodeCompletion/lambdas.cpp new file mode 100644 index 00000000000..3467cec0e3b --- /dev/null +++ b/clang/test/CodeCompletion/lambdas.cpp @@ -0,0 +1,53 @@ +template +struct function { +}; + + +void test() { + void (*x)(int, double) = nullptr; + + function y = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:7:28 %s -o - | FileCheck -check-prefix=CHECK-1 %s + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:9:35 %s -o - | FileCheck -check-prefix=CHECK-1 %s + // CHECK-1: COMPLETION: Pattern : [<#=#>](int <#parameter#>, double <#parameter#>){<#body#>} + + // == Placeholders for suffix types must be placed properly. + function z = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:15:36 %s -o - | FileCheck -check-prefix=CHECK-2 %s + // CHECK-2: COMPLETION: Pattern : [<#=#>](void (* <#parameter#>)(int)){<#body#>} + + // == No need for a parameter list if function has no parameters. + function a = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:20:24 %s -o - | FileCheck -check-prefix=CHECK-3 %s + // CHECK-3: COMPLETION: Pattern : [<#=#>]{<#body#>} +} + +template +struct vector {}; + +void test2() { + // == Try to preserve types as written. + function)> a = {}; + + using function_typedef = function)>; + function_typedef b = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:30:35 %s -o - | FileCheck -check-prefix=CHECK-4 %s + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:33:24 %s -o - | FileCheck -check-prefix=CHECK-4 %s + // CHECK-4: COMPLETION: Pattern : [<#=#>](vector <#parameter#>){<#body#>} +} + +// Check another common function wrapper name. +template struct unique_function {}; + +void test3() { + unique_function a = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:43:31 %s -o - | FileCheck -check-prefix=CHECK-5 %s + // CHECK-5: COMPLETION: Pattern : [<#=#>]{<#body#>} +} + +template struct weird_function {}; +void test4() { + weird_function b = {}; + // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:50:35 %s -o - | FileCheck -check-prefix=CHECK-6 %s + // CHECK-6-NOT: COMPLETION: Pattern : [<#= +} -- cgit v1.2.3