brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 7f570ee Raw
60 lines · cpp
1//===-- YamlSymbolIndex.cpp -----------------------------------------------===//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 "YamlSymbolIndex.h"10#include "llvm/ADT/SmallVector.h"11#include "llvm/Support/Errc.h"12#include "llvm/Support/FileSystem.h"13#include "llvm/Support/MemoryBuffer.h"14#include "llvm/Support/Path.h"15#include <string>16#include <vector>17 18using clang::find_all_symbols::SymbolAndSignals;19 20namespace clang {21namespace include_fixer {22 23llvm::ErrorOr<std::unique_ptr<YamlSymbolIndex>>24YamlSymbolIndex::createFromFile(llvm::StringRef FilePath) {25  auto Buffer = llvm::MemoryBuffer::getFile(FilePath, /*IsText=*/true);26  if (!Buffer)27    return Buffer.getError();28 29  return std::unique_ptr<YamlSymbolIndex>(new YamlSymbolIndex(30      find_all_symbols::ReadSymbolInfosFromYAML(Buffer.get()->getBuffer())));31}32 33llvm::ErrorOr<std::unique_ptr<YamlSymbolIndex>>34YamlSymbolIndex::createFromDirectory(llvm::StringRef Directory,35                                     llvm::StringRef Name) {36  // Walk upwards from Directory, looking for files.37  for (llvm::SmallString<128> PathStorage = Directory; !Directory.empty();38       Directory = llvm::sys::path::parent_path(Directory)) {39    assert(Directory.size() <= PathStorage.size());40    PathStorage.resize(Directory.size()); // Shrink to parent.41    llvm::sys::path::append(PathStorage, Name);42    if (auto DB = createFromFile(PathStorage))43      return DB;44  }45  return llvm::make_error_code(llvm::errc::no_such_file_or_directory);46}47 48std::vector<SymbolAndSignals>49YamlSymbolIndex::search(llvm::StringRef Identifier) {50  std::vector<SymbolAndSignals> Results;51  for (const auto &Symbol : Symbols) {52    if (Symbol.Symbol.getName() == Identifier)53      Results.push_back(Symbol);54  }55  return Results;56}57 58} // namespace include_fixer59} // namespace clang60