//===-- 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 #include 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 QuerySymbols, std::vector 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 &getHeaderInfos() const { return HeaderInfos; } /// Get information of symbols being querid. const std::vector &getQuerySymbolInfos() const { return QuerySymbolInfos; } private: friend struct llvm::yaml::MappingTraits; /// The file path to the file being processed. std::string FilePath; /// All instances of an unidentified symbol being queried. std::vector QuerySymbolInfos; /// The symbol candidates which match SymbolIdentifier. The symbols are /// sorted in a descending order based on the popularity info in SymbolInfo. std::vector MatchedSymbols; /// The header information. std::vector HeaderInfos; }; } // namespace include_fixer } // namespace clang #endif // LLVM_CLANG_TOOLS_EXTRA_INCLUDE_FIXER_INCLUDEFIXERCONTEXT_H