@@ -220,13 +220,16 @@ TEST(IncludeCleaner, ComputeMissingHeaders) {
220
220
TEST (IncludeCleaner, GenerateMissingHeaderDiags) {
221
221
Annotations MainFile (R"cpp(
222
222
#include "a.h"
223
+ #include "angled_wrapper.h"
223
224
#include "all.h"
224
225
$insert_b[[]]#include "baz.h"
225
226
#include "dir/c.h"
226
227
$insert_d[[]]$insert_foo[[]]#include "fuzz.h"
227
228
#include "header.h"
228
- $insert_foobar[[]]#include <e.h>
229
- $insert_f[[]]$insert_vector[[]]
229
+ $insert_foobar[[]]$insert_quoted[[]]$insert_quoted2[[]]#include "quoted_wrapper.h"
230
+ $insert_angled[[]]#include <e.h>
231
+ $insert_f[[]]#include <quoted2_wrapper.h>
232
+ $insert_vector[[]]
230
233
231
234
#define DEF(X) const Foo *X;
232
235
#define BAZ(X) const X x
@@ -237,6 +240,9 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
237
240
238
241
void foo() {
239
242
$b[[b]]();
243
+ $angled[[angled]]();
244
+ $quoted[[quoted]]();
245
+ $quoted2[[quoted2]]();
240
246
241
247
ns::$bar[[Bar]] bar;
242
248
bar.d();
@@ -263,12 +269,22 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
263
269
TU.AdditionalFiles [" a.h" ] = guard (" #include \" b.h\" " );
264
270
TU.AdditionalFiles [" b.h" ] = guard (" void b();" );
265
271
272
+ TU.AdditionalFiles [" angled_wrapper.h" ] = guard (" #include <angled.h>" );
273
+ TU.AdditionalFiles [" angled.h" ] = guard (" void angled();" );
274
+ TU.ExtraArgs .push_back (" -I" + testPath (" ." ));
275
+
276
+ TU.AdditionalFiles [" quoted_wrapper.h" ] = guard (" #include \" quoted.h\" " );
277
+ TU.AdditionalFiles [" quoted.h" ] = guard (" void quoted();" );
278
+
266
279
TU.AdditionalFiles [" dir/c.h" ] = guard (" #include \" d.h\" " );
267
280
TU.AdditionalFiles [" dir/d.h" ] =
268
281
guard (" namespace ns { struct Bar { void d(); }; }" );
269
282
270
283
TU.AdditionalFiles [" system/e.h" ] = guard (" #include <f.h>" );
271
284
TU.AdditionalFiles [" system/f.h" ] = guard (" void f();" );
285
+ TU.AdditionalFiles [" system/quoted2_wrapper.h" ] =
286
+ guard (" #include <system/quoted2.h>" );
287
+ TU.AdditionalFiles [" system/quoted2.h" ] = guard (" void quoted2();" );
272
288
TU.ExtraArgs .push_back (" -isystem" + testPath (" system" ));
273
289
274
290
TU.AdditionalFiles [" fuzz.h" ] = guard (" #include \" buzz.h\" " );
@@ -297,7 +313,15 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
297
313
Findings.UnusedIncludes .clear ();
298
314
std::vector<clangd::Diag> Diags = issueIncludeCleanerDiagnostics (
299
315
AST, TU.Code , Findings, MockFS (),
300
- {[](llvm::StringRef Header) { return Header.ends_with (" buzz.h" ); }});
316
+ /* IgnoreHeaders=*/ {[](llvm::StringRef Header) {
317
+ return Header.ends_with (" buzz.h" );
318
+ }},
319
+ /* AngledHeaders=*/ {[](llvm::StringRef Header) {
320
+ return Header.contains (" angled.h" );
321
+ }},
322
+ /* QuotedHeaders=*/ {[](llvm::StringRef Header) {
323
+ return Header.contains (" quoted.h" ) || Header.contains (" quoted2.h" );
324
+ }});
301
325
EXPECT_THAT (
302
326
Diags,
303
327
UnorderedElementsAre (
@@ -306,6 +330,23 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
306
330
withFix ({Fix (MainFile.range (" insert_b" ), " #include \" b.h\"\n " ,
307
331
" #include \" b.h\" " ),
308
332
FixMessage (" add all missing includes" )})),
333
+ AllOf (Diag (MainFile.range (" angled" ),
334
+ " No header providing \" angled\" is directly included" ),
335
+ withFix ({Fix (MainFile.range (" insert_angled" ),
336
+ " #include <angled.h>\n " , " #include <angled.h>" ),
337
+ FixMessage (" add all missing includes" )})),
338
+ AllOf (
339
+ Diag (MainFile.range (" quoted" ),
340
+ " No header providing \" quoted\" is directly included" ),
341
+ withFix ({Fix (MainFile.range (" insert_quoted" ),
342
+ " #include \" quoted.h\"\n " , " #include \" quoted.h\" " ),
343
+ FixMessage (" add all missing includes" )})),
344
+ AllOf (Diag (MainFile.range (" quoted2" ),
345
+ " No header providing \" quoted2\" is directly included" ),
346
+ withFix (
347
+ {Fix (MainFile.range (" insert_quoted2" ),
348
+ " #include \" quoted2.h\"\n " , " #include \" quoted2.h\" " ),
349
+ FixMessage (" add all missing includes" )})),
309
350
AllOf (Diag (MainFile.range (" bar" ),
310
351
" No header providing \" ns::Bar\" is directly included" ),
311
352
withFix ({Fix (MainFile.range (" insert_d" ),
0 commit comments