[clang-tools-extra] [clang-tidy] Optimize realpath in readability-identifier-naming (PR #92659)
Piotr Zegar via cfe-commits
cfe-commits at lists.llvm.org
Tue May 21 11:46:16 PDT 2024
https://github.com/PiotrZSL updated https://github.com/llvm/llvm-project/pull/92659
>From a2ae273d083f451f44a41bd928c42a5bbdd946ae Mon Sep 17 00:00:00 2001
From: Piotr Zegar <me at piotrzegar.pl>
Date: Tue, 21 May 2024 17:36:08 +0000
Subject: [PATCH] [clang-tidy] Optimize readability-identifier-naming
- Reduce disk IO usage by adding cache to an realpath
introduced by #81985
---
.../clang-tidy/readability/IdentifierNamingCheck.cpp | 12 ++++++++++--
.../clang-tidy/readability/IdentifierNamingCheck.h | 2 ++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index c3208392df156..828f13805a698 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1414,13 +1414,21 @@ IdentifierNamingCheck::getDiagInfo(const NamingCheckId &ID,
}};
}
+StringRef IdentifierNamingCheck::getRealFileName(StringRef FileName) const {
+ auto Iter = RealFileNameCache.try_emplace(FileName);
+ SmallString<256U> &RealFileName = Iter.first->getValue();
+ if (!Iter.second)
+ return RealFileName;
+ llvm::sys::fs::real_path(FileName, RealFileName);
+ return RealFileName;
+}
+
const IdentifierNamingCheck::FileStyle &
IdentifierNamingCheck::getStyleForFile(StringRef FileName) const {
if (!GetConfigPerFile)
return *MainFileStyle;
- SmallString<128> RealFileName;
- llvm::sys::fs::real_path(FileName, RealFileName);
+ StringRef RealFileName = getRealFileName(FileName);
StringRef Parent = llvm::sys::path::parent_path(RealFileName);
auto Iter = NamingStylesCache.find(Parent);
if (Iter != NamingStylesCache.end())
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
index 27c8e4bc768c4..646ec0eac8dd1 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -205,6 +205,7 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck {
const NamingCheckFailure &Failure) const override;
const FileStyle &getStyleForFile(StringRef FileName) const;
+ StringRef getRealFileName(StringRef FileName) const;
/// Find the style kind of a field in an anonymous record.
StyleKind findStyleKindForAnonField(
@@ -222,6 +223,7 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck {
/// Stores the style options as a vector, indexed by the specified \ref
/// StyleKind, for a given directory.
mutable llvm::StringMap<FileStyle> NamingStylesCache;
+ mutable llvm::StringMap<SmallString<256U>> RealFileNameCache;
FileStyle *MainFileStyle;
ClangTidyContext *Context;
const bool GetConfigPerFile;
More information about the cfe-commits
mailing list