diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp index 5db9e99ab2370..335c3de25b861 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp @@ -1408,13 +1408,16 @@ const IdentifierNamingCheck::FileStyle & IdentifierNamingCheck::getStyleForFile(StringRef FileName) const { if (!GetConfigPerFile) return *MainFileStyle; - StringRef Parent = llvm::sys::path::parent_path(FileName); + + SmallString<128> RealFileName; + llvm::sys::fs::real_path(FileName, RealFileName); + StringRef Parent = llvm::sys::path::parent_path(RealFileName); auto Iter = NamingStylesCache.find(Parent); if (Iter != NamingStylesCache.end()) return Iter->getValue(); llvm::StringRef CheckName = getID(); - ClangTidyOptions Options = Context->getOptionsForFile(FileName); + ClangTidyOptions Options = Context->getOptionsForFile(RealFileName); if (Options.Checks && GlobList(*Options.Checks).contains(CheckName)) { auto It = NamingStylesCache.try_emplace( Parent, diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 6b0c85ea84e6c..574996de772af 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -173,6 +173,10 @@ Changes in existing checks ` check to properly emit warnings for static data member with an in-class initializer. +- Improved :doc:`readability-identifier-naming + ` check in `GetConfigPerFile` + mode by resolving symbolic links to header files. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/.clang-tidy new file mode 100644 index 0000000000000..296550f3aab1e --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/.clang-tidy @@ -0,0 +1,4 @@ +Checks: readability-identifier-naming +CheckOptions: + readability-identifier-naming.GlobalConstantCase: CamelCase + readability-identifier-naming.GlobalConstantPrefix: k diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/test.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/test.h new file mode 100644 index 0000000000000..f3560e4e50b9e --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/symlink/include/test.h @@ -0,0 +1 @@ +const int global_const = 5; diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-symlink.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-symlink.cpp new file mode 100644 index 0000000000000..34dc340178dcc --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-symlink.cpp @@ -0,0 +1,18 @@ +// Specify `-std=c++20` to run test only once becuase test expects changes +// in the header file so it fails if runs multiple times with different +// `-std` flags as check_clang_tidy doesn by default. +// +// RUN: rm -rf %T/symlink +// RUN: cp -r %S/Inputs/identifier-naming/symlink %T/symlink +// RUN: mkdir -p %T/symlink/build +// RUN: ln -s %T/symlink/include/test.h %T/symlink/build/test.h +// RUN: %check_clang_tidy -std=c++20 %s readability-identifier-naming %t -- --header-filter="test.h" --config-file=%S/Inputs/identifier-naming/symlink/include/.clang-tidy -- -I %T/symlink/build +// UNSUPPORTED: system-windows + +#include "test.h" + +int foo() { + return global_const; + // CHECK-MESSAGES: warning: invalid case style for global constant 'global_const' [readability-identifier-naming] + // CHECK-FIXES: return kGlobalConst; +}