[PATCH] D90992: [clang-tidy] Use vfs::FileSystem when getting config
Nathan James via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 6 16:44:43 PST 2020
njames93 created this revision.
njames93 added reviewers: alexfh, aaron.ballman, gribozavr2.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.
njames93 requested review of this revision.
The config providers that look for configuration files currently take a pointer to a FileSystem in the constructor.
For some reason this isn't actually used when trying to read those configuration files, Essentially it just follows the behaviour of the real filesystem.
Using clang-tidy standalone this doesn't cause any issue.
But if its used as a library and the user wishes to use say an `InMemoryFileSystem` it will try to read the files from the disc instead.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D90992
Files:
clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
Index: clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -325,7 +325,9 @@
FileOptionsBaseProvider::tryReadConfigFile(StringRef Directory) {
assert(!Directory.empty());
- if (!llvm::sys::fs::is_directory(Directory)) {
+ llvm::ErrorOr<llvm::vfs::Status> DirectoryStatus = FS->status(Directory);
+
+ if (!DirectoryStatus || !DirectoryStatus->isDirectory()) {
llvm::errs() << "Error reading configuration from " << Directory
<< ": directory doesn't exist.\n";
return llvm::None;
@@ -336,15 +338,13 @@
llvm::sys::path::append(ConfigFile, ConfigHandler.first);
LLVM_DEBUG(llvm::dbgs() << "Trying " << ConfigFile << "...\n");
- bool IsFile = false;
- // Ignore errors from is_regular_file: we only need to know if we can read
- // the file or not.
- llvm::sys::fs::is_regular_file(Twine(ConfigFile), IsFile);
- if (!IsFile)
+ llvm::ErrorOr<llvm::vfs::Status> FileStatus = FS->status(ConfigFile);
+
+ if (!FileStatus || !FileStatus->isRegularFile())
continue;
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
- llvm::MemoryBuffer::getFile(ConfigFile.c_str());
+ FS->getBufferForFile(ConfigFile);
if (std::error_code EC = Text.getError()) {
llvm::errs() << "Can't read " << ConfigFile << ": " << EC.message()
<< "\n";
@@ -363,7 +363,7 @@
<< ParsedOptions.getError().message() << "\n";
continue;
}
- return OptionsSource(*ParsedOptions, ConfigFile.c_str());
+ return OptionsSource(*ParsedOptions, ConfigFile.str());
}
return llvm::None;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90992.303592.patch
Type: text/x-patch
Size: 1794 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201107/0519d341/attachment.bin>
More information about the cfe-commits
mailing list