annotate clang-tools-extra/clang-include-fixer/YamlSymbolIndex.cpp @ 160:dbfec6499728

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