13#ifndef LLVM_CLANG_FRONTEND_ASTUNIT_H
14#define LLVM_CLANG_FRONTEND_ASTUNIT_H
33#include "llvm/ADT/ArrayRef.h"
34#include "llvm/ADT/DenseMap.h"
35#include "llvm/ADT/IntrusiveRefCntPtr.h"
36#include "llvm/ADT/STLExtras.h"
37#include "llvm/ADT/SmallVector.h"
38#include "llvm/ADT/StringMap.h"
39#include "llvm/ADT/StringRef.h"
40#include "llvm/ADT/iterator_range.h"
41#include "llvm/Bitstream/BitstreamWriter.h"
94 std::unique_ptr<LangOptions> LangOpts;
95 std::unique_ptr<CodeGenOptions> CodeGenOpts;
100 std::shared_ptr<DiagnosticOptions> DiagOpts;
105 std::unique_ptr<HeaderSearch> HeaderInfo;
107 std::shared_ptr<Preprocessor> PP;
109 std::shared_ptr<TargetOptions> TargetOpts;
110 std::unique_ptr<HeaderSearchOptions> HSOpts;
111 std::shared_ptr<PreprocessorOptions> PPOpts;
113 bool HadModuleLoaderFatalFailure =
false;
114 bool StorePreamblesInMemory =
false;
117 struct ASTWriterData {
119 llvm::BitstreamWriter Stream;
123 : Stream(Buffer), Writer(Stream, Buffer, ModCache, CGOpts, {}) {}
125 std::unique_ptr<ASTWriterData> WriterData;
128 std::string PreambleStoragePath;
132 std::unique_ptr<ASTConsumer> Consumer;
136 std::unique_ptr<Sema> TheSema;
140 std::shared_ptr<CompilerInvocation> Invocation;
143 std::shared_ptr<CompilerInvocation> CCInvocation;
147 std::shared_ptr<CompilerInvocation> ModifiedInvocation;
155 bool OnlyLocalDecls =
false;
170 bool OwnsRemappedFileBuffers =
true;
179 std::vector<Decl*> TopLevelDecls;
183 using FileDeclsTy = llvm::DenseMap<FileID, std::unique_ptr<LocDeclsTy>>;
187 FileDeclsTy FileDecls;
190 std::string OriginalSourceFile;
208 unsigned NumStoredDiagnosticsFromDriver = 0;
219 unsigned PreambleRebuildCountdown = 0;
222 unsigned PreambleCounter = 0;
230 llvm::StringMap<SourceLocation> PreambleSrcLocCache;
233 std::optional<PrecompiledPreamble> Preamble;
238 std::unique_ptr<llvm::MemoryBuffer> SavedMainFileBuffer;
246 unsigned NumWarningsInPreamble = 0;
250 std::vector<LocalDeclID> TopLevelDeclsInPreamble;
253 bool ShouldCacheCodeCompletionResults : 1;
257 bool IncludeBriefCommentsInCodeCompletion : 1;
261 bool UserFilesAreVolatile : 1;
266 void clearFileLevelDecls();
310 return CachedCompletionTypes;
314 std::shared_ptr<GlobalCodeCompletionAllocator>
316 return CachedCompletionAllocator;
321 CCTUInfo = std::make_unique<CodeCompletionTUInfo>(
322 std::make_shared<GlobalCodeCompletionAllocator>());
328 std::shared_ptr<GlobalCodeCompletionAllocator> CachedCompletionAllocator;
330 std::unique_ptr<CodeCompletionTUInfo> CCTUInfo;
333 std::vector<CachedCodeCompletionResult> CachedCompletionResults;
337 llvm::StringMap<unsigned> CachedCompletionTypes;
344 unsigned CompletionCacheTopLevelHashValue = 0;
351 unsigned PreambleTopLevelHashValue = 0;
355 unsigned CurrentTopLevelHashValue = 0;
359 LLVM_PREFERRED_TYPE(
bool)
360 unsigned UnsafeToFree : 1;
367 void CacheCodeCompletionResults();
370 void ClearCachedCompletionResults();
372 explicit ASTUnit(
bool MainFileIsAST);
374 bool Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
375 std::unique_ptr<llvm::MemoryBuffer> OverrideMainBuffer,
378 std::unique_ptr<llvm::MemoryBuffer> getMainBufferWithPrecompiledPreamble(
379 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
382 unsigned MaxLines = 0);
383 void RealizeTopLevelDeclsFromPreamble();
396 class ConcurrencyState {
406 ConcurrencyState ConcurrencyCheckValue;
416 Self.ConcurrencyCheckValue.start();
420 Self.ConcurrencyCheckValue.finish();
454 Ctx = std::move(ctx);
467 bool hasSema()
const {
return (
bool)TheSema; }
470 assert(TheSema &&
"ASTUnit does not have a Sema object!");
475 assert(LangOpts &&
"ASTUnit does not have language options");
480 assert(HSOpts &&
"ASTUnit does not have header search options");
485 assert(PPOpts &&
"ASTUnit does not have preprocessor options");
491 return FileMgr->getVirtualFileSystemPtr();
503 return OriginalSourceFile;
522 assert(!
isMainFileAST() &&
"Invalid call for AST based ASTUnit!");
523 if (!TopLevelDeclsInPreamble.empty())
524 RealizeTopLevelDeclsFromPreamble();
525 return TopLevelDecls.begin();
529 assert(!
isMainFileAST() &&
"Invalid call for AST based ASTUnit!");
530 if (!TopLevelDeclsInPreamble.empty())
531 RealizeTopLevelDeclsFromPreamble();
532 return TopLevelDecls.end();
536 assert(!
isMainFileAST() &&
"Invalid call for AST based ASTUnit!");
537 return TopLevelDeclsInPreamble.size() + TopLevelDecls.size();
541 assert(!
isMainFileAST() &&
"Invalid call for AST based ASTUnit!");
542 return TopLevelDeclsInPreamble.empty() && TopLevelDecls.empty();
547 TopLevelDecls.push_back(D);
570 unsigned Line,
unsigned Col)
const;
609 return StoredDiagnostics.begin();
613 return StoredDiagnostics.begin();
617 return StoredDiagnostics.end();
621 return StoredDiagnostics.end();
638 if (NumStoredDiagnosticsFromDriver > StoredDiagnostics.size())
639 NumStoredDiagnosticsFromDriver = 0;
640 return StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver;
644 std::vector<CachedCodeCompletionResult>::iterator;
647 return CachedCompletionResults.begin();
651 return CachedCompletionResults.end();
655 return CachedCompletionResults.size();
661 llvm::iterator_range<PreprocessingRecord::iterator>
681 std::unique_ptr<llvm::MemoryBuffer>
695 static std::unique_ptr<ASTUnit>
696 create(std::shared_ptr<CompilerInvocation> CI,
697 std::shared_ptr<DiagnosticOptions> DiagOpts,
725 std::shared_ptr<DiagnosticOptions> DiagOpts,
729 bool OnlyLocalDecls =
false,
731 bool AllowASTWithCompilerErrors =
false,
732 bool UserFilesAreVolatile =
false);
749 bool LoadFromCompilerInvocation(
750 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
751 unsigned PrecompilePreambleAfterNParses,
784 std::shared_ptr<CompilerInvocation> CI,
785 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
786 std::shared_ptr<DiagnosticOptions> DiagOpts,
789 bool Persistent =
true, StringRef ResourceFilesPath = StringRef(),
790 bool OnlyLocalDecls =
false,
792 unsigned PrecompilePreambleAfterNParses = 0,
793 bool CacheCodeCompletionResults =
false,
794 bool UserFilesAreVolatile =
false,
795 std::unique_ptr<ASTUnit> *ErrAST =
nullptr);
811 static std::unique_ptr<ASTUnit> LoadFromCompilerInvocation(
812 std::shared_ptr<CompilerInvocation> CI,
813 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
814 std::shared_ptr<DiagnosticOptions> DiagOpts,
818 unsigned PrecompilePreambleAfterNParses = 0,
820 bool CacheCodeCompletionResults =
false,
821 bool IncludeBriefCommentsInCodeCompletion =
false,
822 bool UserFilesAreVolatile =
false);
825 const char **ArgBegin,
const char **ArgEnd,
826 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
827 std::shared_ptr<DiagnosticOptions> DiagOpts,
829 bool StorePreamblesInMemory, StringRef PreambleStoragePath,
832 bool RemappedFilesKeepOriginalName,
834 bool CacheCodeCompletionResults,
835 bool IncludeBriefCommentsInCodeCompletion,
836 bool AllowPCHWithCompilerErrors,
838 bool UserFilesAreVolatile,
bool ForSerialization,
839 bool RetainExcludedConditionalBlocks,
840 std::optional<StringRef> ModuleFormat, std::unique_ptr<ASTUnit> *ErrAST,
854 bool Reparse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
889 bool IncludeCodePatterns,
bool IncludeBriefComments,
891 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
898 std::unique_ptr<SyntaxOnlyAction> Act);
916 bool CaptureNonErrorsFromIncludes =
true;
924 bool CaptureNonErrorsFromIncludes);
939 std::unique_ptr<DiagnosticConsumer> OwningPreviousClient;
Defines the clang::ASTContext interface.
Defines the Diagnostic-related interfaces.
Defines the clang::FileSystemOptions interface.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::LangOptions interface.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
Defines the clang::SourceLocation class and associated facilities.
Defines the SourceManager interface.
Defines the clang::TargetOptions class.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
An abstract interface that should be implemented by listeners that want to be notified when an AST en...
Reads an AST files chain containing the contents of a translation unit.
ConcurrencyCheck(ASTUnit &Self)
Utility class for loading a ASTContext from an AST file.
const PreprocessorOptions & getPreprocessorOpts() const
unsigned & getCurrentTopLevelHashValue()
Retrieve a reference to the current top-level name hash value.
ASTContext & getASTContext()
CodeCompletionTUInfo & getCodeCompletionTUInfo()
void enableSourceFileDiagnostics()
Enable source-range based diagnostic messages.
stored_diag_iterator stored_diag_end()
void addFileLevelDecl(Decl *D)
Add a new local file-level declaration.
const FileManager & getFileManager() const
void setOwnsRemappedFileBuffers(bool val)
bool isUnsafeToFree() const
void CodeComplete(StringRef File, unsigned Line, unsigned Column, ArrayRef< RemappedFile > RemappedFiles, bool IncludeMacros, bool IncludeCodePatterns, bool IncludeBriefComments, CodeCompleteConsumer &Consumer, std::shared_ptr< PCHContainerOperations > PCHContainerOps, llvm::IntrusiveRefCntPtr< DiagnosticsEngine > Diag, LangOptions &LangOpts, llvm::IntrusiveRefCntPtr< SourceManager > SourceMgr, llvm::IntrusiveRefCntPtr< FileManager > FileMgr, SmallVectorImpl< StoredDiagnostic > &StoredDiagnostics, SmallVectorImpl< const llvm::MemoryBuffer * > &OwnedBuffers, std::unique_ptr< SyntaxOnlyAction > Act)
Perform code completion at the given file, line, and column within this translation unit.
cached_completion_iterator cached_completion_end()
SourceRange mapRangeFromPreamble(SourceRange R) const
static std::unique_ptr< ASTUnit > LoadFromASTFile(StringRef Filename, const PCHContainerReader &PCHContainerRdr, WhatToLoad ToLoad, IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS, std::shared_ptr< DiagnosticOptions > DiagOpts, IntrusiveRefCntPtr< DiagnosticsEngine > Diags, const FileSystemOptions &FileSystemOpts, const HeaderSearchOptions &HSOpts, const LangOptions *LangOpts=nullptr, bool OnlyLocalDecls=false, CaptureDiagsKind CaptureDiagnostics=CaptureDiagsKind::None, bool AllowASTWithCompilerErrors=false, bool UserFilesAreVolatile=false)
Create a ASTUnit from an AST file.
bool top_level_empty() const
llvm::IntrusiveRefCntPtr< ASTContext > getASTContextPtr()
bool serialize(raw_ostream &OS)
Serialize this translation unit with the given output stream.
llvm::iterator_range< stored_diag_iterator > diags_range
bool getOwnsRemappedFileBuffers() const
const FileSystemOptions & getFileSystemOpts() const
ASTDeserializationListener * getDeserializationListener()
stored_diag_const_iterator stored_diag_end() const
bool Reparse(std::shared_ptr< PCHContainerOperations > PCHContainerOps, ArrayRef< RemappedFile > RemappedFiles={}, IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS=nullptr)
Reparse the source files using the same command-line options that were originally used to produce thi...
void setUnsafeToFree(bool Value)
std::unique_ptr< llvm::MemoryBuffer > getBufferForFile(StringRef Filename, std::string *ErrorStr=nullptr)
llvm::StringMap< unsigned > & getCachedCompletionTypes()
Retrieve the mapping from formatted type names to unique type identifiers.
const DiagnosticsEngine & getDiagnostics() const
SourceLocation getLocation(const FileEntry *File, unsigned Line, unsigned Col) const
Get the source location for the given file:line:col triplet.
void ResetForParse()
Free data that will be re-generated on the next parse.
llvm::IntrusiveRefCntPtr< SourceManager > getSourceManagerPtr()
bool getOnlyLocalDecls() const
InputKind getInputKind() const
Determine the input kind this AST unit represents.
OptionalFileEntryRef getPCHFile()
Get the PCH file if one was included.
StringRef getMainFileName() const
ASTUnit(const ASTUnit &)=delete
stored_diag_const_iterator stored_diag_begin() const
SourceLocation mapLocationToPreamble(SourceLocation Loc) const
If Loc is a local location of the main file but inside the preamble chunk, returns the corresponding ...
cached_completion_iterator cached_completion_begin()
const LangOptions & getLangOpts() const
bool isMainFileAST() const
std::vector< Decl * >::iterator top_level_iterator
const SourceManager & getSourceManager() const
ASTUnit & operator=(const ASTUnit &)=delete
unsigned stored_diag_size() const
const_diags_range storedDiagnostics() const
Preprocessor & getPreprocessor()
DiagnosticsEngine & getDiagnostics()
const StoredDiagnostic * stored_diag_const_iterator
SourceLocation getEndOfPreambleFileID() const
std::vector< CachedCodeCompletionResult >::iterator cached_completion_iterator
stored_diag_iterator stored_diag_afterDriver_begin()
llvm::IntrusiveRefCntPtr< DiagnosticsEngine > getDiagnosticsPtr()
static ASTUnit * LoadFromCompilerInvocationAction(std::shared_ptr< CompilerInvocation > CI, std::shared_ptr< PCHContainerOperations > PCHContainerOps, std::shared_ptr< DiagnosticOptions > DiagOpts, IntrusiveRefCntPtr< DiagnosticsEngine > Diags, FrontendAction *Action=nullptr, ASTUnit *Unit=nullptr, bool Persistent=true, StringRef ResourceFilesPath=StringRef(), bool OnlyLocalDecls=false, CaptureDiagsKind CaptureDiagnostics=CaptureDiagsKind::None, unsigned PrecompilePreambleAfterNParses=0, bool CacheCodeCompletionResults=false, bool UserFilesAreVolatile=false, std::unique_ptr< ASTUnit > *ErrAST=nullptr)
Create an ASTUnit from a source file, via a CompilerInvocation object, by invoking the optionally pro...
@ LoadPreprocessorOnly
Load options and the preprocessor state.
@ LoadASTOnly
Load the AST, but do not restore Sema state.
@ LoadEverything
Load everything, including Sema.
top_level_iterator top_level_end()
SourceLocation getStartOfMainFileID() const
SourceRange mapRangeToPreamble(SourceRange R) const
diags_range storedDiagnostics()
FileManager & getFileManager()
IntrusiveRefCntPtr< ASTReader > getASTReader() const
IntrusiveRefCntPtr< FileManager > getFileManagerPtr()
bool(*)(void *context, const Decl *D) DeclVisitorFn
Type for a function iterating over a number of declarations.
StoredDiagnostic * stored_diag_iterator
bool visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn)
Iterate over local declarations (locally parsed if this is a parsed source file or the loaded declara...
IntrusiveRefCntPtr< llvm::vfs::FileSystem > getVirtualFileSystemPtr()
llvm::iterator_range< PreprocessingRecord::iterator > getLocalPreprocessingEntities() const
Returns an iterator range for the local preprocessing entities of the local Preprocessor,...
StringRef getOriginalSourceFileName() const
top_level_iterator top_level_begin()
ASTMutationListener * getASTMutationListener()
stored_diag_iterator stored_diag_begin()
TranslationUnitKind getTranslationUnitKind() const
Determine what kind of translation unit this AST represents.
std::shared_ptr< Preprocessor > getPreprocessorPtr() const
void setPreprocessor(std::shared_ptr< Preprocessor > pp)
StringRef getASTFileName() const
If this ASTUnit came from an AST file, returns the filename for it.
bool Save(StringRef File)
Save this translation unit to a file with the given name.
SourceManager & getSourceManager()
const HeaderSearchOptions & getHeaderSearchOpts() const
friend std::unique_ptr< ASTUnit > CreateASTUnitFromCommandLine(const char **ArgBegin, const char **ArgEnd, std::shared_ptr< PCHContainerOperations > PCHContainerOps, std::shared_ptr< DiagnosticOptions > DiagOpts, IntrusiveRefCntPtr< DiagnosticsEngine > Diags, StringRef ResourceFilesPath, bool StorePreamblesInMemory, StringRef PreambleStoragePath, bool OnlyLocalDecls, CaptureDiagsKind CaptureDiagnostics, ArrayRef< ASTUnit::RemappedFile > RemappedFiles, bool RemappedFilesKeepOriginalName, unsigned PrecompilePreambleAfterNParses, TranslationUnitKind TUKind, bool CacheCodeCompletionResults, bool IncludeBriefCommentsInCodeCompletion, bool AllowPCHWithCompilerErrors, SkipFunctionBodiesScope SkipFunctionBodies, bool SingleFileParse, bool UserFilesAreVolatile, bool ForSerialization, bool RetainExcludedConditionalBlocks, std::optional< StringRef > ModuleFormat, std::unique_ptr< ASTUnit > *ErrAST, IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS)
Create an ASTUnit from a vector of command line arguments, which must specify exactly one source file...
void setASTContext(llvm::IntrusiveRefCntPtr< ASTContext > ctx)
unsigned getPreambleCounterForTests() const
unsigned cached_completion_size() const
static std::unique_ptr< ASTUnit > create(std::shared_ptr< CompilerInvocation > CI, std::shared_ptr< DiagnosticOptions > DiagOpts, IntrusiveRefCntPtr< DiagnosticsEngine > Diags, CaptureDiagsKind CaptureDiagnostics, bool UserFilesAreVolatile)
Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
void addTopLevelDecl(Decl *D)
Add a new top-level declaration.
const Preprocessor & getPreprocessor() const
std::shared_ptr< GlobalCodeCompletionAllocator > getCachedCompletionAllocator()
Retrieve the allocator used to cache global code completions.
llvm::iterator_range< stored_diag_const_iterator > const_diags_range
bool isInMainFileID(SourceLocation Loc) const
bool isModuleFile() const
Returns true if the ASTUnit was constructed from a serialized module file.
void findFileRegionDecls(FileID File, unsigned Offset, unsigned Length, SmallVectorImpl< Decl * > &Decls)
Get the decls that are contained in a file in the Offset/Length range.
const ASTContext & getASTContext() const
bool isInPreambleFileID(SourceLocation Loc) const
SourceLocation mapLocationFromPreamble(SourceLocation Loc) const
If Loc is a loaded location from the preamble, returns the corresponding local location of the main f...
std::pair< std::string, llvm::MemoryBuffer * > RemappedFile
A mapping from a file name to the memory buffer that stores the remapped contents of that file.
std::size_t top_level_size() const
Writes an AST file containing the contents of a translation unit.
~CaptureDroppedDiagnostics()
CaptureDroppedDiagnostics(CaptureDiagsKind CaptureDiagnostics, DiagnosticsEngine &Diags, SmallVectorImpl< StoredDiagnostic > *StoredDiags, SmallVectorImpl< StandaloneDiagnostic > *StandaloneDiags)
Abstract interface for a consumer of code-completion information.
A "string" used to describe how code completion can be performed for an entity.
CodeGenOptions - Track various options which control how the code is optimized and passed to the back...
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
Helper class for holding the data necessary to invoke the compiler.
Decl - This represents one declaration (or definition), e.g.
Abstract interface, implemented by clients of the front-end, which formats and prints fully processed...
DiagnosticConsumer()=default
A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine a...
Concrete class used by the front-end to report problems and issues.
Level
The level of the diagnostic, after it has been through mapping.
Cached information about one file (either on disk or in the virtual file system).
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Implements support for file system lookup, file system caching, and directory search management.
Keeps track of options that affect how file operations are performed.
Diagnostic consumer that saves each diagnostic it is given.
void BeginSourceFile(const LangOptions &LangOpts, const Preprocessor *PP=nullptr) override
Callback to inform the diagnostic client that processing of a source file is beginning.
FilterAndStoreDiagnosticConsumer(SmallVectorImpl< StoredDiagnostic > *StoredDiags, SmallVectorImpl< StandaloneDiagnostic > *StandaloneDiags, bool CaptureNonErrorsFromIncludes)
void HandleDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info) override
Handle this diagnostic, reporting it to the user or capturing it to a log as needed.
Abstract base class for actions which can be performed by the frontend.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
The module cache used for compiling modules implicitly.
A registry of PCHContainerWriter and -Reader objects for different formats.
This abstract interface provides operations for unwrapping containers for serialized ASTs (precompile...
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Sema - This implements semantic analysis and AST building for C.
Encodes a location in the source.
This class handles loading and caching of source files into memory.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
Represents a diagnostic in a form that can be retained until its corresponding source manager is dest...
Exposes information about the current target.
A module loader that doesn't know how to create or load modules.
CXCursorKind
Describes the kind of entity that a cursor refers to.
CXAvailabilityKind
Describes the availability of a particular entity, which indicates whether the use of this entity wil...
The JSON file list parser is used to communicate input to InstallAPI.
CustomizableOptional< FileEntryRef > OptionalFileEntryRef
SkipFunctionBodiesScope
Enumerates the available scopes for skipping function bodies.
@ Parse
Parse the block; this code is always used.
SimplifiedTypeClass
A simplified classification of types used when determining "similar" types for code completion.
CaptureDiagsKind
Enumerates the available kinds for capturing diagnostics.
@ AllWithoutNonErrorsFromIncludes
TranslationUnitKind
Describes the kind of translation unit being processed.
@ TU_Complete
The translation unit is a complete translation unit.
@ None
The alignment was not explicit in code.
Diagnostic wrappers for TextAPI types for error reporting.
A cached code-completion result, which may be introduced in one of many different contexts.
unsigned Type
The type of a non-macro completion result, stored as a unique integer used by the string map of cache...
CXCursorKind Kind
The libclang cursor kind corresponding to this code-completion result.
CXAvailabilityKind Availability
The availability of this code-completion result.
unsigned Priority
The priority given to this code-completion result.
SimplifiedTypeClass TypeClass
The simplified type class for a non-macro completion result.
uint64_t ShowInContexts
A bitmask that indicates which code-completion contexts should contain this completion result.
CodeCompletionString * Completion
The code-completion string corresponding to this completion result.