clang-tools 20.0.0git
YamlSymbolIndex.cpp
Go to the documentation of this file.
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-exception
6//
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
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);
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>>
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_fixer
59} // namespace clang
llvm::SmallString< 256U > Name
std::vector< CodeCompletionResult > Results
llvm::StringRef Directory
static llvm::ErrorOr< std::unique_ptr< YamlSymbolIndex > > createFromFile(llvm::StringRef FilePath)
Create a new Yaml db from a file.
std::vector< find_all_symbols::SymbolAndSignals > search(llvm::StringRef Identifier) override
Search for all SymbolInfos corresponding to an identifier.
static llvm::ErrorOr< std::unique_ptr< YamlSymbolIndex > > createFromDirectory(llvm::StringRef Directory, llvm::StringRef Name)
Look for a file called Name in Directory and all parent directories.
std::vector< SymbolAndSignals > ReadSymbolInfosFromYAML(llvm::StringRef Yaml)
Read SymbolInfos from a YAML document.
Definition: SymbolInfo.cpp:126
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//