[clangd] cleanup: unify the implemenation of checking a location is inside main file.
Summary: We have variant implementations in the codebase, this patch unifies them.
Reviewers: ilya-biryukov, kadircet
Subscribers: MaskRay, jkorous, arphaman, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D64915
llvm-svn: 366541
diff --git a/clang-tools-extra/clangd/unittests/SourceCodeTests.cpp b/clang-tools-extra/clangd/unittests/SourceCodeTests.cpp
index 29eda85..6f937e6 100644
--- a/clang-tools-extra/clangd/unittests/SourceCodeTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SourceCodeTests.cpp
@@ -422,6 +422,36 @@
EXPECT_THAT(*Result, MacroName("MACRO"));
}
+TEST(SourceCodeTests, IsInsideMainFile){
+ TestTU TU;
+ TU.HeaderCode = R"cpp(
+ #define DEFINE_CLASS(X) class X {};
+ #define DEFINE_YY DEFINE_CLASS(YY)
+
+ class Header1 {};
+ DEFINE_CLASS(Header2)
+ class Header {};
+ )cpp";
+ TU.Code = R"cpp(
+ class Main1 {};
+ DEFINE_CLASS(Main2)
+ DEFINE_YY
+ class Main {};
+ )cpp";
+ TU.ExtraArgs.push_back("-DHeader=Header3");
+ TU.ExtraArgs.push_back("-DMain=Main3");
+ auto AST = TU.build();
+ const auto& SM = AST.getSourceManager();
+ auto DeclLoc = [&AST](llvm::StringRef Name) {
+ return findDecl(AST, Name).getLocation();
+ };
+ for (const auto *HeaderDecl : {"Header1", "Header2", "Header3"})
+ EXPECT_FALSE(isInsideMainFile(DeclLoc(HeaderDecl), SM));
+
+ for (const auto *MainDecl : {"Main1", "Main2", "Main3", "YY"})
+ EXPECT_TRUE(isInsideMainFile(DeclLoc(MainDecl), SM));
+}
+
// Test for functions toHalfOpenFileRange and getHalfOpenFileRange
TEST(SourceCodeTests, HalfOpenFileRange) {
// Each marked range should be the file range of the decl with the same name