@@ -220,13 +220,16 @@ TEST(IncludeCleaner, ComputeMissingHeaders) {
220220TEST (IncludeCleaner, GenerateMissingHeaderDiags) {
221221 Annotations MainFile (R"cpp(
222222#include "a.h"
223+ #include "angled_wrapper.h"
223224#include "all.h"
224225$insert_b[[]]#include "baz.h"
225226#include "dir/c.h"
226227$insert_d[[]]$insert_foo[[]]#include "fuzz.h"
227228#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[[]]
230233
231234#define DEF(X) const Foo *X;
232235#define BAZ(X) const X x
@@ -237,6 +240,9 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
237240
238241 void foo() {
239242 $b[[b]]();
243+ $angled[[angled]]();
244+ $quoted[[quoted]]();
245+ $quoted2[[quoted2]]();
240246
241247 ns::$bar[[Bar]] bar;
242248 bar.d();
@@ -263,12 +269,22 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
263269 TU.AdditionalFiles [" a.h" ] = guard (" #include \" b.h\" " );
264270 TU.AdditionalFiles [" b.h" ] = guard (" void b();" );
265271
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+
266279 TU.AdditionalFiles [" dir/c.h" ] = guard (" #include \" d.h\" " );
267280 TU.AdditionalFiles [" dir/d.h" ] =
268281 guard (" namespace ns { struct Bar { void d(); }; }" );
269282
270283 TU.AdditionalFiles [" system/e.h" ] = guard (" #include <f.h>" );
271284 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();" );
272288 TU.ExtraArgs .push_back (" -isystem" + testPath (" system" ));
273289
274290 TU.AdditionalFiles [" fuzz.h" ] = guard (" #include \" buzz.h\" " );
@@ -297,7 +313,15 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
297313 Findings.UnusedIncludes .clear ();
298314 std::vector<clangd::Diag> Diags = issueIncludeCleanerDiagnostics (
299315 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+ }});
301325 EXPECT_THAT (
302326 Diags,
303327 UnorderedElementsAre (
@@ -306,6 +330,23 @@ TEST(IncludeCleaner, GenerateMissingHeaderDiags) {
306330 withFix ({Fix (MainFile.range (" insert_b" ), " #include \" b.h\"\n " ,
307331 " #include \" b.h\" " ),
308332 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" )})),
309350 AllOf (Diag (MainFile.range (" bar" ),
310351 " No header providing \" ns::Bar\" is directly included" ),
311352 withFix ({Fix (MainFile.range (" insert_d" ),
0 commit comments