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; }
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; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits