Mercurial > hg > CbC > CbC_llvm
diff clang-tools-extra/clangd/Hover.h @ 221:79ff65ed7e25
LLVM12 Original
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Jun 2021 19:15:29 +0900 |
parents | 0572611fdcc8 |
children | 5f17cb93ff66 |
line wrap: on
line diff
--- a/clang-tools-extra/clangd/Hover.h Tue Jun 15 19:13:43 2021 +0900 +++ b/clang-tools-extra/clangd/Hover.h Tue Jun 15 19:15:29 2021 +0900 @@ -59,6 +59,9 @@ /// Source code containing the definition of the symbol. std::string Definition; + /// Access specifier for declarations inside class/struct/unions, empty for + /// others. + std::string AccessSpecifier; /// Pretty-printed variable type. /// Set only for variables. llvm::Optional<std::string> Type; @@ -74,11 +77,31 @@ llvm::Optional<uint64_t> Size; /// Contains the offset of fields within the enclosing class. llvm::Optional<uint64_t> Offset; + // Set when symbol is inside function call. Contains information extracted + // from the callee definition about the argument this is passed as. + llvm::Optional<Param> CalleeArgInfo; + struct PassType { + // How the variable is passed to callee. + enum PassMode { Ref, ConstRef, Value }; + PassMode PassBy = Ref; + // True if type conversion happened. This includes calls to implicit + // constructor, as well as built-in type conversions. Casting to base class + // is not considered conversion. + bool Converted = false; + }; + // Set only if CalleeArgInfo is set. + llvm::Optional<PassType> CallPassType; /// Produce a user-readable information. markup::Document present() const; }; +inline bool operator==(const HoverInfo::PassType &LHS, + const HoverInfo::PassType &RHS) { + return std::tie(LHS.PassBy, LHS.Converted) == + std::tie(RHS.PassBy, RHS.Converted); +} + // Try to infer structure of a documentation comment (e.g. line breaks). // FIXME: move to another file so CodeComplete doesn't depend on Hover. void parseDocumentation(llvm::StringRef Input, markup::Document &Output);