[clang-tools-extra] [clang-tidy] Return error code on config parse error (PR #136167)
Galen Elias via cfe-commits
cfe-commits at lists.llvm.org
Tue May 27 10:04:24 PDT 2025
================
@@ -46,20 +46,65 @@ TEST(ClangTidyOptionsProvider, InMemoryFileSystems) {
FileOptionsProvider FileOpt({}, {}, {}, FileSystem);
- ClangTidyOptions File1Options =
+ llvm::ErrorOr<ClangTidyOptions> File1Options =
FileOpt.getOptions("ProjectRoot/SubDir1/File.cpp");
- ClangTidyOptions File2Options =
+ llvm::ErrorOr<ClangTidyOptions> File2Options =
FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/File.cpp");
- ClangTidyOptions File3Options =
+ llvm::ErrorOr<ClangTidyOptions> File3Options =
FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/SubDir3/File.cpp");
- ASSERT_TRUE(File1Options.Checks.has_value());
- EXPECT_EQ(*File1Options.Checks, "-*,clang-diagnostic-*,readability-*");
- ASSERT_TRUE(File2Options.Checks.has_value());
- EXPECT_EQ(*File2Options.Checks, "bugprone-*,misc-*,clang-diagnostic-*");
+ ASSERT_TRUE(File1Options->Checks.has_value());
+ EXPECT_EQ(*File1Options->Checks, "-*,clang-diagnostic-*,readability-*");
+ ASSERT_TRUE(File2Options->Checks.has_value());
+ EXPECT_EQ(*File2Options->Checks, "bugprone-*,misc-*,clang-diagnostic-*");
// 2 and 3 should use the same config so these should also be the same.
- EXPECT_EQ(File2Options.Checks, File3Options.Checks);
+ EXPECT_EQ(File2Options->Checks, File3Options->Checks);
+}
+
+TEST(ClangTidyOptionsProvider, InvalidConfigurationFiles) {
+ llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> FileSystem(
+ new llvm::vfs::InMemoryFileSystem);
+
+ StringRef BaseClangTidy = R"(
+ Checks: -*,clang-diagnostic-*
+ Unexpected
+ )";
+ StringRef Sub1ClangTidy = R"(
+ Checks: readability-*
+ InheritParentConfig: true
+ )";
+ StringRef Sub2ClangTidy = R"(
+ Checks: bugprone-*,misc-*,clang-diagnostic-*
+ InheritParentConfig: false
+ )";
+ FileSystem->addFile("ProjectRoot/.clang-tidy", 0,
+ llvm::MemoryBuffer::getMemBuffer(BaseClangTidy));
+ FileSystem->addFile("ProjectRoot/File.cpp", 0,
+ llvm::MemoryBuffer::getMemBuffer(""));
+ FileSystem->addFile("ProjectRoot/SubDir1/.clang-tidy", 0,
+ llvm::MemoryBuffer::getMemBuffer(Sub1ClangTidy));
+ FileSystem->addFile("ProjectRoot/SubDir1/File.cpp", 0,
+ llvm::MemoryBuffer::getMemBuffer(""));
+ FileSystem->addFile("ProjectRoot/SubDir1/SubDir2/.clang-tidy", 0,
+ llvm::MemoryBuffer::getMemBuffer(Sub2ClangTidy));
+ FileSystem->addFile("ProjectRoot/SubDir1/SubDir2/File.cpp", 0,
+ llvm::MemoryBuffer::getMemBuffer(""));
+
+ FileOptionsProvider FileOpt({}, {}, {}, FileSystem);
+
+ llvm::ErrorOr<ClangTidyOptions> File1Options =
+ FileOpt.getOptions("ProjectRoot/File.cpp");
+ llvm::ErrorOr<ClangTidyOptions> File2Options =
+ FileOpt.getOptions("ProjectRoot/SubDir1/File.cpp");
+ llvm::ErrorOr<ClangTidyOptions> File3Options =
+ FileOpt.getOptions("ProjectRoot/SubDir1/SubDir2/File.cpp");
+
+ ASSERT_TRUE(!File1Options);
----------------
galenelias wrote:
Yah, sorry - wasn't being very idiomatic here. Cleaned them up. I don't think we need the negations or double negations to coerce to booleans, it seems like we can just use the ASSERT_ macros directly. Not sure why I formulated them this way. Apologies.
https://github.com/llvm/llvm-project/pull/136167
More information about the cfe-commits
mailing list