mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 05:40:09 +00:00
[clang-apply-replacements] Deduplicate Implementation of collectReplacementsFromDirectory
(NFC) (#78630)
* Convert `collectReplacementsFromDirectory` into a function template. * Employ explicit specialization to maintain implementation in the source file. * Utilize the function template in the source file to eliminate code duplication. * Update the documentation for the function.
This commit is contained in:
parent
b4f24be7ef
commit
24e5229230
@ -51,19 +51,27 @@ using FileToChangesMap =
|
||||
/// Directories starting with '.' are ignored during traversal.
|
||||
///
|
||||
/// \param[in] Directory Directory to begin search for serialized
|
||||
/// TranslationUnitReplacements.
|
||||
/// TranslationUnitReplacements or TranslationUnitDiagnostics.
|
||||
/// \param[out] TUs Collection of all found and deserialized
|
||||
/// TranslationUnitReplacements or TranslationUnitDiagnostics.
|
||||
/// \param[out] TUFiles Collection of all TranslationUnitReplacement files
|
||||
/// found in \c Directory.
|
||||
/// \param[out] TUFiles Collection of all TranslationUnitReplacement or
|
||||
/// TranslationUnitDiagnostics files found in \c Directory.
|
||||
/// \param[in] Diagnostics DiagnosticsEngine used for error output.
|
||||
///
|
||||
/// \returns An error_code indicating success or failure in navigating the
|
||||
/// directory structure.
|
||||
template <typename TranslationUnits>
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TranslationUnits &TUs,
|
||||
TUReplacementFiles &TUFiles,
|
||||
clang::DiagnosticsEngine &Diagnostics) = delete;
|
||||
|
||||
template <>
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TUReplacements &TUs,
|
||||
TUReplacementFiles &TUFiles, clang::DiagnosticsEngine &Diagnostics);
|
||||
|
||||
template <>
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TUDiagnostics &TUs,
|
||||
TUReplacementFiles &TUFiles, clang::DiagnosticsEngine &Diagnostics);
|
||||
|
@ -38,8 +38,10 @@ static void eatDiagnostics(const SMDiagnostic &, void *) {}
|
||||
namespace clang {
|
||||
namespace replace {
|
||||
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TUReplacements &TUs,
|
||||
namespace detail {
|
||||
template <typename TranslationUnits>
|
||||
static std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TranslationUnits &TUs,
|
||||
TUReplacementFiles &TUFiles, clang::DiagnosticsEngine &Diagnostics) {
|
||||
using namespace llvm::sys::fs;
|
||||
using namespace llvm::sys::path;
|
||||
@ -68,7 +70,7 @@ std::error_code collectReplacementsFromDirectory(
|
||||
}
|
||||
|
||||
yaml::Input YIn(Out.get()->getBuffer(), nullptr, &eatDiagnostics);
|
||||
tooling::TranslationUnitReplacements TU;
|
||||
typename TranslationUnits::value_type TU;
|
||||
YIn >> TU;
|
||||
if (YIn.error()) {
|
||||
// File doesn't appear to be a header change description. Ignore it.
|
||||
@ -81,49 +83,22 @@ std::error_code collectReplacementsFromDirectory(
|
||||
|
||||
return ErrorCode;
|
||||
}
|
||||
} // namespace detail
|
||||
|
||||
template <>
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TUReplacements &TUs,
|
||||
TUReplacementFiles &TUFiles, clang::DiagnosticsEngine &Diagnostics) {
|
||||
return detail::collectReplacementsFromDirectory(Directory, TUs, TUFiles,
|
||||
Diagnostics);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::error_code collectReplacementsFromDirectory(
|
||||
const llvm::StringRef Directory, TUDiagnostics &TUs,
|
||||
TUReplacementFiles &TUFiles, clang::DiagnosticsEngine &Diagnostics) {
|
||||
using namespace llvm::sys::fs;
|
||||
using namespace llvm::sys::path;
|
||||
|
||||
std::error_code ErrorCode;
|
||||
|
||||
for (recursive_directory_iterator I(Directory, ErrorCode), E;
|
||||
I != E && !ErrorCode; I.increment(ErrorCode)) {
|
||||
if (filename(I->path())[0] == '.') {
|
||||
// Indicate not to descend into directories beginning with '.'
|
||||
I.no_push();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (extension(I->path()) != ".yaml")
|
||||
continue;
|
||||
|
||||
TUFiles.push_back(I->path());
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> Out =
|
||||
MemoryBuffer::getFile(I->path());
|
||||
if (std::error_code BufferError = Out.getError()) {
|
||||
errs() << "Error reading " << I->path() << ": " << BufferError.message()
|
||||
<< "\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
yaml::Input YIn(Out.get()->getBuffer(), nullptr, &eatDiagnostics);
|
||||
tooling::TranslationUnitDiagnostics TU;
|
||||
YIn >> TU;
|
||||
if (YIn.error()) {
|
||||
// File doesn't appear to be a header change description. Ignore it.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Only keep files that properly parse.
|
||||
TUs.push_back(TU);
|
||||
}
|
||||
|
||||
return ErrorCode;
|
||||
return detail::collectReplacementsFromDirectory(Directory, TUs, TUFiles,
|
||||
Diagnostics);
|
||||
}
|
||||
|
||||
/// Extract replacements from collected TranslationUnitReplacements and
|
||||
|
Loading…
Reference in New Issue
Block a user