nridge created this revision. nridge added a reviewer: kadircet. Herald added a subscriber: arphaman. Herald added a project: All. nridge requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Fixes https://github.com/clangd/clangd/issues/1449 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D141218 Files: clang-tools-extra/clangd/IncludeFixer.cpp clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp @@ -1528,6 +1528,24 @@ "Include \"foo.h\" for symbol foo"))))); } +TEST(IncludeFixerTest, Typeid) { + Annotations Test(R"cpp( + $insert[[]]void func() { + [[typeid]](int); // error-ok + } + )cpp"); + auto TU = TestTU::withCode(Test.code()); + auto Index = buildIndexWithSymbol({}); + TU.ExternalIndex = Index.get(); + EXPECT_THAT( + *TU.build().getDiagnostics(), + ElementsAre(AllOf( + Diag(Test.range(), "you need to include <typeinfo> before using " + "the 'typeid' operator"), + withFix(Fix(Test.range("insert"), "#include <typeinfo>\n", + "Include <typeinfo>"))))); +} + TEST(DiagsInHeaders, DiagInsideHeader) { Annotations Main(R"cpp( #include [["a.h"]] Index: clang-tools-extra/clangd/IncludeFixer.cpp =================================================================== --- clang-tools-extra/clangd/IncludeFixer.cpp +++ clang-tools-extra/clangd/IncludeFixer.cpp @@ -225,7 +225,7 @@ case diag::err_implied_std_initializer_list_not_found: return only(insertHeader("<initializer_list>")); case diag::err_need_header_before_typeid: - return only(insertHeader("<typeid>")); + return only(insertHeader("<typeinfo>")); case diag::err_need_header_before_placement_new: case diag::err_implicit_coroutine_std_nothrow_type_not_found: return only(insertHeader("<new>"));
Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp @@ -1528,6 +1528,24 @@ "Include \"foo.h\" for symbol foo"))))); } +TEST(IncludeFixerTest, Typeid) { + Annotations Test(R"cpp( + $insert[[]]void func() { + [[typeid]](int); // error-ok + } + )cpp"); + auto TU = TestTU::withCode(Test.code()); + auto Index = buildIndexWithSymbol({}); + TU.ExternalIndex = Index.get(); + EXPECT_THAT( + *TU.build().getDiagnostics(), + ElementsAre(AllOf( + Diag(Test.range(), "you need to include <typeinfo> before using " + "the 'typeid' operator"), + withFix(Fix(Test.range("insert"), "#include <typeinfo>\n", + "Include <typeinfo>"))))); +} + TEST(DiagsInHeaders, DiagInsideHeader) { Annotations Main(R"cpp( #include [["a.h"]] Index: clang-tools-extra/clangd/IncludeFixer.cpp =================================================================== --- clang-tools-extra/clangd/IncludeFixer.cpp +++ clang-tools-extra/clangd/IncludeFixer.cpp @@ -225,7 +225,7 @@ case diag::err_implied_std_initializer_list_not_found: return only(insertHeader("<initializer_list>")); case diag::err_need_header_before_typeid: - return only(insertHeader("<typeid>")); + return only(insertHeader("<typeinfo>")); case diag::err_need_header_before_placement_new: case diag::err_implicit_coroutine_std_nothrow_type_not_found: return only(insertHeader("<new>"));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits