|  | //===-- IncludeFixerContext.h - Include fixer context -----------*- C++ -*-===// | 
|  | // | 
|  | // 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 | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_INCLUDEFIXERCONTEXT_H | 
|  | #define LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_INCLUDEFIXERCONTEXT_H | 
|  |  | 
|  | #include "find-all-symbols/SymbolInfo.h" | 
|  | #include "clang/Tooling/Core/Replacement.h" | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | namespace clang { | 
|  | namespace include_fixer { | 
|  |  | 
|  | /// A context for a file being processed. It includes all query | 
|  | /// information, e.g. symbols being queried in database, all header candidates. | 
|  | class IncludeFixerContext { | 
|  | public: | 
|  | struct HeaderInfo { | 
|  | /// The header where QualifiedName comes from. | 
|  | std::string Header; | 
|  | /// A symbol name with completed namespace qualifiers which will | 
|  | /// replace the original symbol. | 
|  | std::string QualifiedName; | 
|  | }; | 
|  |  | 
|  | struct QuerySymbolInfo { | 
|  | /// The raw symbol name being queried in database. This name might | 
|  | /// miss some namespace qualifiers, and will be replaced by a fully | 
|  | /// qualified one. | 
|  | std::string RawIdentifier; | 
|  |  | 
|  | /// The qualifiers of the scope in which SymbolIdentifier lookup | 
|  | /// occurs. It is represented as a sequence of names and scope resolution | 
|  | /// operators ::, ending with a scope resolution operator (e.g. a::b::). | 
|  | /// Empty if SymbolIdentifier is not in a specific scope. | 
|  | std::string ScopedQualifiers; | 
|  |  | 
|  | /// The replacement range of RawIdentifier. | 
|  | tooling::Range Range; | 
|  | }; | 
|  |  | 
|  | IncludeFixerContext() = default; | 
|  | IncludeFixerContext(StringRef FilePath, | 
|  | std::vector<QuerySymbolInfo> QuerySymbols, | 
|  | std::vector<find_all_symbols::SymbolInfo> Symbols); | 
|  |  | 
|  | /// Get symbol name. | 
|  | llvm::StringRef getSymbolIdentifier() const { | 
|  | return QuerySymbolInfos.front().RawIdentifier; | 
|  | } | 
|  |  | 
|  | /// Get replacement range of the symbol. | 
|  | tooling::Range getSymbolRange() const { | 
|  | return QuerySymbolInfos.front().Range; | 
|  | } | 
|  |  | 
|  | /// Get the file path to the file being processed. | 
|  | StringRef getFilePath() const { return FilePath; } | 
|  |  | 
|  | /// Get header information. | 
|  | const std::vector<HeaderInfo> &getHeaderInfos() const { return HeaderInfos; } | 
|  |  | 
|  | /// Get information of symbols being querid. | 
|  | const std::vector<QuerySymbolInfo> &getQuerySymbolInfos() const { | 
|  | return QuerySymbolInfos; | 
|  | } | 
|  |  | 
|  | private: | 
|  | friend struct llvm::yaml::MappingTraits<IncludeFixerContext>; | 
|  |  | 
|  | /// The file path to the file being processed. | 
|  | std::string FilePath; | 
|  |  | 
|  | /// All instances of an unidentified symbol being queried. | 
|  | std::vector<QuerySymbolInfo> QuerySymbolInfos; | 
|  |  | 
|  | /// The symbol candidates which match SymbolIdentifier. The symbols are | 
|  | /// sorted in a descending order based on the popularity info in SymbolInfo. | 
|  | std::vector<find_all_symbols::SymbolInfo> MatchedSymbols; | 
|  |  | 
|  | /// The header information. | 
|  | std::vector<HeaderInfo> HeaderInfos; | 
|  | }; | 
|  |  | 
|  | } // namespace include_fixer | 
|  | } // namespace clang | 
|  |  | 
|  | #endif // LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_INCLUDEFIXERCONTEXT_H |