brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 428f87e Raw
56 lines · cpp
1//===- DirectoryScanner.cpp - Utility functions for DirectoryWatcher ------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "DirectoryScanner.h"10 11#include "llvm/Support/Path.h"12#include <optional>13 14namespace clang {15 16using namespace llvm;17 18std::optional<sys::fs::file_status> getFileStatus(StringRef Path) {19  sys::fs::file_status Status;20  std::error_code EC = status(Path, Status);21  if (EC)22    return std::nullopt;23  return Status;24}25 26std::vector<std::string> scanDirectory(StringRef Path) {27  using namespace llvm::sys;28  std::vector<std::string> Result;29 30  std::error_code EC;31  for (auto It = fs::directory_iterator(Path, EC),32            End = fs::directory_iterator();33       !EC && It != End; It.increment(EC)) {34    auto status = getFileStatus(It->path());35    if (!status)36      continue;37    Result.emplace_back(sys::path::filename(It->path()));38  }39 40  return Result;41}42 43std::vector<DirectoryWatcher::Event>44getAsFileEvents(const std::vector<std::string> &Scan) {45  std::vector<DirectoryWatcher::Event> Events;46  Events.reserve(Scan.size());47 48  for (const auto &File : Scan) {49    Events.emplace_back(DirectoryWatcher::Event{50        DirectoryWatcher::Event::EventKind::Modified, File});51  }52  return Events;53}54 55} // namespace clang56