[PATCH] D96204: [clangd] Fix clang tidy provider when multiple config files exist in directory tree
Nathan James via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 12 08:56:02 PST 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rGba3ea9c60f0f: [clangd] Fix clang tidy provider when multiple config files exist in directory… (authored by njames93).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96204/new/
https://reviews.llvm.org/D96204
Files:
clang-tools-extra/clangd/TidyProvider.cpp
clang-tools-extra/clangd/unittests/CMakeLists.txt
clang-tools-extra/clangd/unittests/TidyProviderTests.cpp
Index: clang-tools-extra/clangd/unittests/TidyProviderTests.cpp
===================================================================
--- /dev/null
+++ clang-tools-extra/clangd/unittests/TidyProviderTests.cpp
@@ -0,0 +1,60 @@
+//===-- TidyProviderTests.cpp - Clang tidy configuration provider tests ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "TestFS.h"
+#include "TidyProvider.h"
+#include "gtest/gtest.h"
+
+namespace clang {
+namespace clangd {
+
+namespace {
+
+TEST(TidyProvider, NestedDirectories) {
+ MockFS FS;
+ FS.Files[testPath(".clang-tidy")] = R"yaml(
+ Checks: 'llvm-*'
+ CheckOptions:
+ - key: TestKey
+ value: 1
+)yaml";
+ FS.Files[testPath("sub1/.clang-tidy")] = R"yaml(
+ Checks: 'misc-*'
+ CheckOptions:
+ - key: TestKey
+ value: 2
+)yaml";
+ FS.Files[testPath("sub1/sub2/.clang-tidy")] = R"yaml(
+ Checks: 'bugprone-*'
+ CheckOptions:
+ - key: TestKey
+ value: 3
+ InheritParentConfig: true
+)yaml";
+
+ TidyProvider Provider = provideClangTidyFiles(FS);
+
+ auto BaseOptions = getTidyOptionsForFile(Provider, testPath("File.cpp"));
+ ASSERT_TRUE(BaseOptions.Checks.hasValue());
+ EXPECT_EQ(*BaseOptions.Checks, "llvm-*");
+ EXPECT_EQ(BaseOptions.CheckOptions.lookup("TestKey").Value, "1");
+
+ auto Sub1Options = getTidyOptionsForFile(Provider, testPath("sub1/File.cpp"));
+ ASSERT_TRUE(Sub1Options.Checks.hasValue());
+ EXPECT_EQ(*Sub1Options.Checks, "misc-*");
+ EXPECT_EQ(Sub1Options.CheckOptions.lookup("TestKey").Value, "2");
+
+ auto Sub2Options =
+ getTidyOptionsForFile(Provider, testPath("sub1/sub2/File.cpp"));
+ ASSERT_TRUE(Sub2Options.Checks.hasValue());
+ EXPECT_EQ(*Sub2Options.Checks, "misc-*,bugprone-*");
+ EXPECT_EQ(Sub2Options.CheckOptions.lookup("TestKey").Value, "3");
+}
+} // namespace
+} // namespace clangd
+} // namespace clang
Index: clang-tools-extra/clangd/unittests/CMakeLists.txt
===================================================================
--- clang-tools-extra/clangd/unittests/CMakeLists.txt
+++ clang-tools-extra/clangd/unittests/CMakeLists.txt
@@ -93,6 +93,7 @@
TestIndex.cpp
TestTU.cpp
TestWorkspace.cpp
+ TidyProviderTests.cpp
TypeHierarchyTests.cpp
URITests.cpp
XRefsTests.cpp
Index: clang-tools-extra/clangd/TidyProvider.cpp
===================================================================
--- clang-tools-extra/clangd/TidyProvider.cpp
+++ clang-tools-extra/clangd/TidyProvider.cpp
@@ -106,7 +106,7 @@
llvm::SmallVector<DotClangTidyCache *> Caches;
{
std::lock_guard<std::mutex> Lock(Mu);
- for (auto I = path::begin(Parent), E = path::end(Parent); I != E; ++I) {
+ for (auto I = path::rbegin(Parent), E = path::rend(Parent); I != E; ++I) {
assert(I->end() >= Parent.begin() && I->end() <= Parent.end() &&
"Canonical path components should be substrings");
llvm::StringRef Ancestor(Parent.begin(), I->end() - Parent.begin());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96204.323347.patch
Type: text/x-patch
Size: 3199 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210212/b49e5c76/attachment-0001.bin>
More information about the cfe-commits
mailing list