1 //===-- YamlSymbolIndex.cpp -----------------------------------------------===//
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-exception
7 //===----------------------------------------------------------------------===//
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"
18 using clang::find_all_symbols::SymbolAndSignals
;
21 namespace include_fixer
{
23 llvm::ErrorOr
<std::unique_ptr
<YamlSymbolIndex
>>
24 YamlSymbolIndex::createFromFile(llvm::StringRef FilePath
) {
25 auto Buffer
= llvm::MemoryBuffer::getFile(FilePath
);
27 return Buffer
.getError();
29 return std::unique_ptr
<YamlSymbolIndex
>(new YamlSymbolIndex(
30 find_all_symbols::ReadSymbolInfosFromYAML(Buffer
.get()->getBuffer())));
33 llvm::ErrorOr
<std::unique_ptr
<YamlSymbolIndex
>>
34 YamlSymbolIndex::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
))
45 return llvm::make_error_code(llvm::errc::no_such_file_or_directory
);
48 std::vector
<SymbolAndSignals
>
49 YamlSymbolIndex::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
);
58 } // namespace include_fixer