xref: /llvm-project/clang/test/CodeCompletion/included-files.cpp (revision be931f89451b650e081daf875213c19f658caf25)
1f7500a4eSChristian Kandeler // RUN: rm -rf %t && mkdir %t && cp %s %t/main.cc && mkdir %t/a && mkdir %t/QtCore && mkdir %t/Headers %t/Some.framework %t/Some.framework/Headers
2*be931f89SDavid Blaikie // RUN: touch %t/foo.h %t/foo.hxx %t/foo.cc %t/a/foosys %t/a/foosys.h %t/QtCore/foosys %t/QtCore/foo.h
3f7500a4eSChristian Kandeler // RUN: touch %t/Headers/foosys %t/Headers/foo.h %t/Some.framework/Headers/foosys %t/Some.framework/Headers/foo.h
43d8051abSSam McCall 
53d8051abSSam McCall // Quoted string shows header-ish files from CWD, and all from system.
63d8051abSSam McCall #include "foo.h"
7f7500a4eSChristian Kandeler // RUN: %clang -fsyntax-only -isystem %t/a -Xclang -code-completion-at=%t/main.cc:6:13 %t/main.cc | FileCheck -check-prefix=CHECK-1 %s
83d8051abSSam McCall // CHECK-1-NOT: foo.cc"
93d8051abSSam McCall // CHECK-1: foo.h"
10556d48fbSNathan Ridge // CHECK-1: foo.hxx"
113d8051abSSam McCall // CHECK-1: foosys"
123d8051abSSam McCall 
133d8051abSSam McCall // Quoted string with dir shows header-ish files in that subdir.
143d8051abSSam McCall #include "a/foosys"
15556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -isystem %t/a -Xclang -code-completion-at=%t/main.cc:14:13 %t/main.cc | FileCheck -check-prefix=CHECK-2 %s
163d8051abSSam McCall // CHECK-2-NOT: foo.h"
173d8051abSSam McCall // CHECK-2: foosys.h"
183d8051abSSam McCall // CHECK-2-NOT: foosys"
193d8051abSSam McCall 
203e4f5eb3SSam McCall // Angled shows headers from system dirs.
213d8051abSSam McCall #include <foosys>
22556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -isystem %t/a -Xclang -code-completion-at=%t/main.cc:21:13 %t/main.cc | FileCheck -check-prefix=CHECK-3 %s
233d8051abSSam McCall // CHECK-3-NOT: foo.cc>
243d8051abSSam McCall // CHECK-3-NOT: foo.h>
253d8051abSSam McCall // CHECK-3: foosys>
263d8051abSSam McCall 
273e4f5eb3SSam McCall // With -I rather than -isystem, the header extension is required.
283e4f5eb3SSam McCall #include <foosys>
29556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -I %t/a -Xclang -code-completion-at=%t/main.cc:28:13 %t/main.cc | FileCheck -check-prefix=CHECK-4 %s
303e4f5eb3SSam McCall // CHECK-4-NOT: foo.cc>
313e4f5eb3SSam McCall // CHECK-4-NOT: foo.h>
323e4f5eb3SSam McCall // CHECK-4-NOT: foosys>
333e4f5eb3SSam McCall 
343d8051abSSam McCall // Backslash handling.
353d8051abSSam McCall #include "a\foosys"
36556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -isystem %t/a -Xclang -code-completion-at=%t/main.cc:35:13 %t/main.cc -fms-compatibility | FileCheck -check-prefix=CHECK-5 %s
373e4f5eb3SSam McCall // CHECK-5: foosys.h"
38f7500a4eSChristian Kandeler 
39f7500a4eSChristian Kandeler // Qt headers don't necessarily have extensions.
40f7500a4eSChristian Kandeler #include <foosys>
41556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -I %t/QtCore -Xclang -code-completion-at=%t/main.cc:40:13 %t/main.cc -fms-compatibility | FileCheck -check-prefix=CHECK-6 %s
42f7500a4eSChristian Kandeler // CHECK-6-NOT: foo.cc>
43f7500a4eSChristian Kandeler // CHECK-6: foo.h>
44f7500a4eSChristian Kandeler // CHECK-6: foosys>
45f7500a4eSChristian Kandeler 
46f7500a4eSChristian Kandeler // If the include path directly points into a framework's Headers/ directory, we allow extension-less headers.
47f7500a4eSChristian Kandeler #include <foosys>
48556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -I %t/Some.framework/Headers -Xclang -code-completion-at=%t/main.cc:47:13 %t/main.cc -fms-compatibility | FileCheck -check-prefix=CHECK-7 %s
49f7500a4eSChristian Kandeler // CHECK-7-NOT: foo.cc>
50f7500a4eSChristian Kandeler // CHECK-7: foo.h>
51f7500a4eSChristian Kandeler // CHECK-7: foosys>
52f7500a4eSChristian Kandeler 
53f7500a4eSChristian Kandeler // Simply naming a directory "Headers" is not enough to allow extension-less headers.
54f7500a4eSChristian Kandeler #include <foosys>
55556d48fbSNathan Ridge // RUN: %clang -fsyntax-only -I %t/Headers -Xclang -code-completion-at=%t/main.cc:54:13 %t/main.cc -fms-compatibility | FileCheck -check-prefix=CHECK-8 %s
56f7500a4eSChristian Kandeler // CHECK-8-NOT: foo.cc>
57f7500a4eSChristian Kandeler // CHECK-8: foo.h>
58f7500a4eSChristian Kandeler // CHECK-8-NOT: foosys>
59