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