reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | //===-- YamlSymbolIndex.cpp -----------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "YamlSymbolIndex.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/Errc.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Path.h" #include <string> #include <vector> using clang::find_all_symbols::SymbolInfo; using clang::find_all_symbols::SymbolAndSignals; namespace clang { namespace include_fixer { llvm::ErrorOr<std::unique_ptr<YamlSymbolIndex>> YamlSymbolIndex::createFromFile(llvm::StringRef FilePath) { auto Buffer = llvm::MemoryBuffer::getFile(FilePath); if (!Buffer) return Buffer.getError(); return std::unique_ptr<YamlSymbolIndex>(new YamlSymbolIndex( find_all_symbols::ReadSymbolInfosFromYAML(Buffer.get()->getBuffer()))); } llvm::ErrorOr<std::unique_ptr<YamlSymbolIndex>> YamlSymbolIndex::createFromDirectory(llvm::StringRef Directory, llvm::StringRef Name) { // Walk upwards from Directory, looking for files. for (llvm::SmallString<128> PathStorage = Directory; !Directory.empty(); Directory = llvm::sys::path::parent_path(Directory)) { assert(Directory.size() <= PathStorage.size()); PathStorage.resize(Directory.size()); // Shrink to parent. llvm::sys::path::append(PathStorage, Name); if (auto DB = createFromFile(PathStorage)) return DB; } return llvm::make_error_code(llvm::errc::no_such_file_or_directory); } std::vector<SymbolAndSignals> YamlSymbolIndex::search(llvm::StringRef Identifier) { std::vector<SymbolAndSignals> Results; for (const auto &Symbol : Symbols) { if (Symbol.Symbol.getName() == Identifier) Results.push_back(Symbol); } return Results; } } // namespace include_fixer } // namespace clang |