clang 24.0.0git
ASTUnit.h
Go to the documentation of this file.
1//===- ASTUnit.h - ASTUnit utility ------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// ASTUnit utility class.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_FRONTEND_ASTUNIT_H
14#define LLVM_CLANG_FRONTEND_ASTUNIT_H
15
16#include "clang-c/Index.h"
20#include "clang/Basic/LLVM.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"
42#include "llvm/Support/VirtualFileSystemFwd.h"
43#include <cassert>
44#include <cstddef>
45#include <cstdint>
46#include <memory>
47#include <optional>
48#include <string>
49#include <utility>
50#include <vector>
51
52namespace llvm {
53
54class MemoryBuffer;
55
56} // namespace llvm
57
58namespace clang {
59
60class ASTContext;
63class ASTReader;
64class CodeGenOptions;
67class Decl;
68class FileEntry;
69class FileManager;
70class FrontendAction;
71class HeaderSearch;
72class InputKind;
73class ModuleCache;
76class Preprocessor;
78class Sema;
79class TargetInfo;
81
82/// \brief Enumerates the available scopes for skipping function bodies.
84
85/// \brief Enumerates the available kinds for capturing diagnostics.
87
88/// Utility class for loading a ASTContext from an AST file.
89class ASTUnit {
90 std::unique_ptr<LangOptions> LangOpts;
91 std::unique_ptr<CodeGenOptions> CodeGenOpts;
92 // FIXME: The documentation on \c LoadFrom* member functions states that the
93 // DiagnosticsEngine (and therefore DiagnosticOptions) must outlive the
94 // returned ASTUnit. This is not the case. Enfore it by storing non-owning
95 // pointers here.
96 std::shared_ptr<DiagnosticOptions> DiagOpts;
100 std::shared_ptr<ModuleCache> ModCache;
101 std::unique_ptr<HeaderSearch> HeaderInfo;
103 std::shared_ptr<Preprocessor> PP;
105 std::shared_ptr<TargetOptions> TargetOpts;
106 std::unique_ptr<HeaderSearchOptions> HSOpts;
107 std::shared_ptr<PreprocessorOptions> PPOpts;
109 bool HadModuleLoaderFatalFailure = false;
110 bool StorePreamblesInMemory = false;
111
112 /// Utility struct for managing ASTWriter and its associated data streams.
113 struct ASTWriterData {
114 SmallString<128> Buffer;
115 llvm::BitstreamWriter Stream;
116 ASTWriter Writer;
117
118 ASTWriterData(ModuleCache &ModCache, const CodeGenOptions &CGOpts)
119 : Stream(Buffer), Writer(Stream, Buffer, ModCache, CGOpts, {}) {}
120 };
121 std::unique_ptr<ASTWriterData> WriterData;
122
123 FileSystemOptions FileSystemOpts;
124 std::string PreambleStoragePath;
125
126 /// The AST consumer that received information about the translation
127 /// unit as it was parsed or loaded.
128 std::unique_ptr<ASTConsumer> Consumer;
129
130 /// The semantic analysis object used to type-check the translation
131 /// unit.
132 std::unique_ptr<Sema> TheSema;
133
134 /// Optional owned invocation, just used to make the invocation used in
135 /// LoadFromCommandLine available.
136 std::shared_ptr<CompilerInvocation> Invocation;
137 /// Optional owned invocation, just used to make the invocation used in
138 /// Parse available.
139 std::shared_ptr<CompilerInvocation> CCInvocation;
140
141 /// Optional owned invocation, just used to keep the invocation alive for the
142 /// members initialized in transferASTDataFromCompilerInstance.
143 std::shared_ptr<CompilerInvocation> ModifiedInvocation;
144
145 /// Fake module loader: the AST unit doesn't need to load any modules.
146 TrivialModuleLoader ModuleLoader;
147
148 // OnlyLocalDecls - when true, walking this AST should only visit declarations
149 // that come from the AST itself, not from included precompiled headers.
150 // FIXME: This is temporary; eventually, CIndex will always do this.
151 bool OnlyLocalDecls = false;
152
153 /// Whether to capture any diagnostics produced.
154 CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None;
155
156 /// Track whether the main file was loaded from an AST or not.
157 bool MainFileIsAST;
158
159 /// What kind of translation unit this AST represents.
161
162 /// Whether we should time each operation.
163 bool WantTiming;
164
165 /// Whether the ASTUnit should delete the remapped buffers.
166 bool OwnsRemappedFileBuffers = true;
167
168 /// Track the top-level decls which appeared in an ASTUnit which was loaded
169 /// from a source file.
170 //
171 // FIXME: This is just an optimization hack to avoid deserializing large parts
172 // of a PCH file when using the Index library on an ASTUnit loaded from
173 // source. In the long term we should make the Index library use efficient and
174 // more scalable search mechanisms.
175 std::vector<Decl*> TopLevelDecls;
176
177 /// Sorted (by file offset) vector of pairs of file offset/Decl.
178 using LocDeclsTy = SmallVector<std::pair<unsigned, Decl *>, 64>;
179 using FileDeclsTy = llvm::DenseMap<FileID, std::unique_ptr<LocDeclsTy>>;
180
181 /// Map from FileID to the file-level declarations that it contains.
182 /// The files and decls are only local (and non-preamble) ones.
183 FileDeclsTy FileDecls;
184
185 /// The name of the original source file used to generate this ASTUnit.
186 std::string OriginalSourceFile;
187
188 /// The set of diagnostics produced when creating the preamble.
189 SmallVector<StandaloneDiagnostic, 4> PreambleDiagnostics;
190
191 /// The set of diagnostics produced when creating this
192 /// translation unit.
193 SmallVector<StoredDiagnostic, 4> StoredDiagnostics;
194
195 /// The set of diagnostics produced when failing to parse, e.g. due
196 /// to failure to load the PCH.
197 SmallVector<StoredDiagnostic, 4> FailedParseDiagnostics;
198
199 /// The number of stored diagnostics that come from the driver
200 /// itself.
201 ///
202 /// Diagnostics that come from the driver are retained from one parse to
203 /// the next.
204 unsigned NumStoredDiagnosticsFromDriver = 0;
205
206 /// Counter that determines when we want to try building a
207 /// precompiled preamble.
208 ///
209 /// If zero, we will never build a precompiled preamble. Otherwise,
210 /// it's treated as a counter that decrements each time we reparse
211 /// without the benefit of a precompiled preamble. When it hits 1,
212 /// we'll attempt to rebuild the precompiled header. This way, if
213 /// building the precompiled preamble fails, we won't try again for
214 /// some number of calls.
215 unsigned PreambleRebuildCountdown = 0;
216
217 /// Counter indicating how often the preamble was build in total.
218 unsigned PreambleCounter = 0;
219
220 /// Cache pairs "filename - source location"
221 ///
222 /// Cache contains only source locations from preamble so it is
223 /// guaranteed that they stay valid when the SourceManager is recreated.
224 /// This cache is used when loading preamble to increase performance
225 /// of that loading. It must be cleared when preamble is recreated.
226 llvm::StringMap<SourceLocation> PreambleSrcLocCache;
227
228 /// The contents of the preamble.
229 std::optional<PrecompiledPreamble> Preamble;
230
231 /// When non-NULL, this is the buffer used to store the contents of
232 /// the main file when it has been padded for use with the precompiled
233 /// preamble.
234 std::unique_ptr<llvm::MemoryBuffer> SavedMainFileBuffer;
235
236 /// The number of warnings that occurred while parsing the preamble.
237 ///
238 /// This value will be used to restore the state of the \c DiagnosticsEngine
239 /// object when re-using the precompiled preamble. Note that only the
240 /// number of warnings matters, since we will not save the preamble
241 /// when any errors are present.
242 unsigned NumWarningsInPreamble = 0;
243
244 /// A list of the serialization ID numbers for each of the top-level
245 /// declarations parsed within the precompiled preamble.
246 std::vector<LocalDeclID> TopLevelDeclsInPreamble;
247
248 /// Whether we should be caching code-completion results.
249 bool ShouldCacheCodeCompletionResults : 1;
250
251 /// Whether to include brief documentation within the set of code
252 /// completions cached.
253 bool IncludeBriefCommentsInCodeCompletion : 1;
254
255 /// True if non-system source files should be treated as volatile
256 /// (likely to change while trying to use them).
257 bool UserFilesAreVolatile : 1;
258
259 static void ConfigureDiags(IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
260 ASTUnit &AST, CaptureDiagsKind CaptureDiagnostics);
261
262 void clearFileLevelDecls();
263
264public:
265 /// A cached code-completion result, which may be introduced in one of
266 /// many different contexts.
268 /// The code-completion string corresponding to this completion
269 /// result.
271
272 /// A bitmask that indicates which code-completion contexts should
273 /// contain this completion result.
274 ///
275 /// The bits in the bitmask correspond to the values of
276 /// CodeCompleteContext::Kind. To map from a completion context kind to a
277 /// bit, shift 1 by that number of bits. Many completions can occur in
278 /// several different contexts.
280
281 /// The priority given to this code-completion result.
282 unsigned Priority;
283
284 /// The libclang cursor kind corresponding to this code-completion
285 /// result.
287
288 /// The availability of this code-completion result.
290
291 /// The simplified type class for a non-macro completion result.
293
294 /// The type of a non-macro completion result, stored as a unique
295 /// integer used by the string map of cached completion types.
296 ///
297 /// This value will be zero if the type is not known, or a unique value
298 /// determined by the formatted type string. Se \c CachedCompletionTypes
299 /// for more information.
300 unsigned Type;
301 };
302
303 /// Retrieve the mapping from formatted type names to unique type
304 /// identifiers.
305 llvm::StringMap<unsigned> &getCachedCompletionTypes() {
306 return CachedCompletionTypes;
307 }
308
309 /// Retrieve the allocator used to cache global code completions.
310 std::shared_ptr<GlobalCodeCompletionAllocator>
312 return CachedCompletionAllocator;
313 }
314
316 if (!CCTUInfo)
317 CCTUInfo = std::make_unique<CodeCompletionTUInfo>(
318 std::make_shared<GlobalCodeCompletionAllocator>());
319 return *CCTUInfo;
320 }
321
322private:
323 /// Allocator used to store cached code completions.
324 std::shared_ptr<GlobalCodeCompletionAllocator> CachedCompletionAllocator;
325
326 std::unique_ptr<CodeCompletionTUInfo> CCTUInfo;
327
328 /// The set of cached code-completion results.
329 std::vector<CachedCodeCompletionResult> CachedCompletionResults;
330
331 /// A mapping from the formatted type name to a unique number for that
332 /// type, which is used for type equality comparisons.
333 llvm::StringMap<unsigned> CachedCompletionTypes;
334
335 /// A string hash of the top-level declaration and macro definition
336 /// names processed the last time that we reparsed the file.
337 ///
338 /// This hash value is used to determine when we need to refresh the
339 /// global code-completion cache.
340 unsigned CompletionCacheTopLevelHashValue = 0;
341
342 /// A string hash of the top-level declaration and macro definition
343 /// names processed the last time that we reparsed the precompiled preamble.
344 ///
345 /// This hash value is used to determine when we need to refresh the
346 /// global code-completion cache after a rebuild of the precompiled preamble.
347 unsigned PreambleTopLevelHashValue = 0;
348
349 /// The current hash value for the top-level declaration and macro
350 /// definition names
351 unsigned CurrentTopLevelHashValue = 0;
352
353 /// Bit used by CIndex to mark when a translation unit may be in an
354 /// inconsistent state, and is not safe to free.
355 LLVM_PREFERRED_TYPE(bool)
356 unsigned UnsafeToFree : 1;
357
358 /// \brief Enumerator specifying the scope for skipping function bodies.
360
361 /// Cache any "global" code-completion results, so that we can avoid
362 /// recomputing them with each completion.
363 void CacheCodeCompletionResults();
364
365 /// Clear out and deallocate
366 void ClearCachedCompletionResults();
367
368 explicit ASTUnit(bool MainFileIsAST);
369
370 bool Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
371 std::unique_ptr<llvm::MemoryBuffer> OverrideMainBuffer,
373
374 std::unique_ptr<llvm::MemoryBuffer> getMainBufferWithPrecompiledPreamble(
375 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
376 CompilerInvocation &PreambleInvocationIn,
377 IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, bool AllowRebuild = true,
378 unsigned MaxLines = 0);
379 void RealizeTopLevelDeclsFromPreamble();
380
381 /// Transfers ownership of the objects (like SourceManager) from
382 /// \param CI to this ASTUnit.
383 void transferASTDataFromCompilerInstance(CompilerInstance &CI);
384
385 /// Allows us to assert that ASTUnit is not being used concurrently,
386 /// which is not supported.
387 ///
388 /// Clients should create instances of the ConcurrencyCheck class whenever
389 /// using the ASTUnit in a way that isn't intended to be concurrent, which is
390 /// just about any usage.
391 /// Becomes a noop in release mode; only useful for debug mode checking.
392 class ConcurrencyState {
393 void *Mutex; // a std::recursive_mutex in debug;
394
395 public:
396 ConcurrencyState();
397 ~ConcurrencyState();
398 ConcurrencyState(const ConcurrencyState &) = delete;
399 ConcurrencyState &operator=(const ConcurrencyState &) = delete;
400
401 void start();
402 void finish();
403 };
404 ConcurrencyState ConcurrencyCheckValue;
405
406public:
407 friend class ConcurrencyCheck;
408
410 ASTUnit &Self;
411
412 public:
413 explicit ConcurrencyCheck(ASTUnit &Self) : Self(Self) {
414 Self.ConcurrencyCheckValue.start();
415 }
416
418 Self.ConcurrencyCheckValue.finish();
419 }
420 };
421
422 ASTUnit(const ASTUnit &) = delete;
423 ASTUnit &operator=(const ASTUnit &) = delete;
424 ~ASTUnit();
425
426 bool isMainFileAST() const { return MainFileIsAST; }
427
428 bool isUnsafeToFree() const { return UnsafeToFree; }
429 void setUnsafeToFree(bool Value) { UnsafeToFree = Value; }
430
431 const DiagnosticsEngine &getDiagnostics() const { return *Diagnostics; }
432 DiagnosticsEngine &getDiagnostics() { return *Diagnostics; }
436
437 const SourceManager &getSourceManager() const { return *SourceMgr; }
438 SourceManager &getSourceManager() { return *SourceMgr; }
442
443 const Preprocessor &getPreprocessor() const { return *PP; }
444 Preprocessor &getPreprocessor() { return *PP; }
445 std::shared_ptr<Preprocessor> getPreprocessorPtr() const { return PP; }
446
447 const ASTContext &getASTContext() const { return *Ctx; }
448 ASTContext &getASTContext() { return *Ctx; }
450
452 Ctx = std::move(ctx);
453 }
454 void setPreprocessor(std::shared_ptr<Preprocessor> pp);
455
456 /// Enable source-range based diagnostic messages.
457 ///
458 /// If diagnostic messages with source-range information are to be expected
459 /// and AST comes not from file (e.g. after LoadFromCompilerInvocation) this
460 /// function has to be called.
461 /// The function is to be called only once and the AST should be associated
462 /// with the same source file afterwards.
464
465 bool hasSema() const { return (bool)TheSema; }
466
467 Sema &getSema() const {
468 assert(TheSema && "ASTUnit does not have a Sema object!");
469 return *TheSema;
470 }
471
472 const LangOptions &getLangOpts() const {
473 assert(LangOpts && "ASTUnit does not have language options");
474 return *LangOpts;
475 }
476
478 assert(CodeGenOpts && "ASTUnit does not have codegen options");
479 return *CodeGenOpts;
480 }
481
483 assert(HSOpts && "ASTUnit does not have header search options");
484 return *HSOpts;
485 }
486
488 assert(PPOpts && "ASTUnit does not have preprocessor options");
489 return *PPOpts;
490 }
491
493 // FIXME: Don't defer VFS ownership to the FileManager.
494 return FileMgr->getVirtualFileSystemPtr();
495 }
496
497 const FileManager &getFileManager() const { return *FileMgr; }
498 FileManager &getFileManager() { return *FileMgr; }
500
501 const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; }
502
504
505 StringRef getOriginalSourceFileName() const {
506 return OriginalSourceFile;
507 }
508
511
512 bool getOnlyLocalDecls() const { return OnlyLocalDecls; }
513
514 bool getOwnsRemappedFileBuffers() const { return OwnsRemappedFileBuffers; }
515 void setOwnsRemappedFileBuffers(bool val) { OwnsRemappedFileBuffers = val; }
516
517 StringRef getMainFileName() const;
518
519 /// If this ASTUnit came from an AST file, returns the filename for it.
520 StringRef getASTFileName() const;
521
522 using top_level_iterator = std::vector<Decl *>::iterator;
523
525 assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
526 if (!TopLevelDeclsInPreamble.empty())
527 RealizeTopLevelDeclsFromPreamble();
528 return TopLevelDecls.begin();
529 }
530
532 assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
533 if (!TopLevelDeclsInPreamble.empty())
534 RealizeTopLevelDeclsFromPreamble();
535 return TopLevelDecls.end();
536 }
537
538 std::size_t top_level_size() const {
539 assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
540 return TopLevelDeclsInPreamble.size() + TopLevelDecls.size();
541 }
542
543 bool top_level_empty() const {
544 assert(!isMainFileAST() && "Invalid call for AST based ASTUnit!");
545 return TopLevelDeclsInPreamble.empty() && TopLevelDecls.empty();
546 }
547
548 /// Add a new top-level declaration.
550 TopLevelDecls.push_back(D);
551 }
552
553 /// Add a new local file-level declaration.
554 void addFileLevelDecl(Decl *D);
555
556 /// Get the decls that are contained in a file in the Offset/Length
557 /// range. \p Length can be 0 to indicate a point at \p Offset instead of
558 /// a range.
559 void findFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
561
562 /// Retrieve a reference to the current top-level name hash value.
563 ///
564 /// Note: This is used internally by the top-level tracking action
565 unsigned &getCurrentTopLevelHashValue() { return CurrentTopLevelHashValue; }
566
567 /// Get the source location for the given file:line:col triplet.
568 ///
569 /// The difference with SourceManager::getLocation is that this method checks
570 /// whether the requested location points inside the precompiled preamble
571 /// in which case the returned source location will be a "loaded" one.
573 unsigned Line, unsigned Col) const;
574
575 /// Get the source location for the given file:offset pair.
576 SourceLocation getLocation(const FileEntry *File, unsigned Offset) const;
577
578 /// If \p Loc is a loaded location from the preamble, returns
579 /// the corresponding local location of the main file, otherwise it returns
580 /// \p Loc.
582
583 /// If \p Loc is a local location of the main file but inside the
584 /// preamble chunk, returns the corresponding loaded location from the
585 /// preamble, otherwise it returns \p Loc.
587
588 bool isInPreambleFileID(SourceLocation Loc) const;
589 bool isInMainFileID(SourceLocation Loc) const;
592
593 /// \see mapLocationFromPreamble.
598
599 /// \see mapLocationToPreamble.
601 return SourceRange(mapLocationToPreamble(R.getBegin()),
602 mapLocationToPreamble(R.getEnd()));
603 }
604
605 unsigned getPreambleCounterForTests() const { return PreambleCounter; }
606
607 // Retrieve the diagnostics associated with this AST
610
612 return StoredDiagnostics.begin();
613 }
614
616 return StoredDiagnostics.begin();
617 }
618
620 return StoredDiagnostics.end();
621 }
622
624 return StoredDiagnostics.end();
625 }
626
627 using diags_range = llvm::iterator_range<stored_diag_iterator>;
628 using const_diags_range = llvm::iterator_range<stored_diag_const_iterator>;
629
633
637
638 unsigned stored_diag_size() const { return StoredDiagnostics.size(); }
639
641 if (NumStoredDiagnosticsFromDriver > StoredDiagnostics.size())
642 NumStoredDiagnosticsFromDriver = 0;
643 return StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver;
644 }
645
647 std::vector<CachedCodeCompletionResult>::iterator;
648
650 return CachedCompletionResults.begin();
651 }
652
654 return CachedCompletionResults.end();
655 }
656
657 unsigned cached_completion_size() const {
658 return CachedCompletionResults.size();
659 }
660
661 /// Returns an iterator range for the local preprocessing entities
662 /// of the local Preprocessor, if this is a parsed source file, or the loaded
663 /// preprocessing entities of the primary module if this is an AST file.
664 llvm::iterator_range<PreprocessingRecord::iterator>
666
667 /// Type for a function iterating over a number of declarations.
668 /// \returns true to continue iteration and false to abort.
669 using DeclVisitorFn = bool (*)(void *context, const Decl *D);
670
671 /// Iterate over local declarations (locally parsed if this is a parsed
672 /// source file or the loaded declarations of the primary module if this is an
673 /// AST file).
674 /// \returns true if the iteration was complete or false if it was aborted.
675 bool visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn);
676
677 /// Get the PCH file if one was included.
678 std::optional<StringRef> getPCHFile();
679
680 /// Returns true if the ASTUnit was constructed from a serialized
681 /// module file.
682 bool isModuleFile() const;
683
684 std::unique_ptr<llvm::MemoryBuffer>
685 getBufferForFile(StringRef Filename, std::string *ErrorStr = nullptr);
686
687 /// Determine what kind of translation unit this AST represents.
689
690 /// Determine the input kind this AST unit represents.
691 InputKind getInputKind() const;
692
693 /// A mapping from a file name to the memory buffer that stores the
694 /// remapped contents of that file.
695 using RemappedFile = std::pair<std::string, llvm::MemoryBuffer *>;
696
697 /// Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
698 static std::unique_ptr<ASTUnit>
699 create(std::shared_ptr<CompilerInvocation> CI,
700 std::shared_ptr<DiagnosticOptions> DiagOpts,
702 CaptureDiagsKind CaptureDiagnostics, bool UserFilesAreVolatile);
703
705 /// Load options and the preprocessor state.
707
708 /// Load the AST, but do not restore Sema state.
710
711 /// Load everything, including Sema.
713 };
714
715 /// Create a ASTUnit from an AST file.
716 ///
717 /// \param Filename - The AST file to load.
718 ///
719 /// \param PCHContainerRdr - The PCHContainerOperations to use for loading and
720 /// creating modules.
721 /// \param Diags - The diagnostics engine to use for reporting errors; its
722 /// lifetime is expected to extend past that of the returned ASTUnit.
723 ///
724 /// \returns - The initialized ASTUnit or null if the AST failed to load.
725 static std::unique_ptr<ASTUnit> LoadFromASTFile(
726 StringRef Filename, const PCHContainerReader &PCHContainerRdr,
728 std::shared_ptr<DiagnosticOptions> DiagOpts,
730 const FileSystemOptions &FileSystemOpts,
731 const HeaderSearchOptions &HSOpts, const LangOptions *LangOpts = nullptr,
732 bool OnlyLocalDecls = false,
733 CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
734 bool AllowASTWithCompilerErrors = false,
735 bool UserFilesAreVolatile = false);
736
737private:
738 /// Helper function for \c LoadFromCompilerInvocation() and
739 /// \c LoadFromCommandLine(), which loads an AST from a compiler invocation.
740 ///
741 /// \param PrecompilePreambleAfterNParses After how many parses the preamble
742 /// of this translation unit should be precompiled, to improve the performance
743 /// of reparsing. Set to zero to disable preambles.
744 ///
745 /// \param VFS - A llvm::vfs::FileSystem to be used for all file accesses.
746 /// Note that preamble is saved to a temporary directory on a RealFileSystem,
747 /// so in order for it to be loaded correctly, VFS should have access to
748 /// it(i.e., be an overlay over RealFileSystem).
749 ///
750 /// \returns \c true if a catastrophic failure occurred (which means that the
751 /// \c ASTUnit itself is invalid), or \c false otherwise.
752 bool LoadFromCompilerInvocation(
753 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
754 unsigned PrecompilePreambleAfterNParses,
756
757public:
758 /// Create an ASTUnit from a source file, via a CompilerInvocation
759 /// object, by invoking the optionally provided ASTFrontendAction.
760 ///
761 /// \param CI - The compiler invocation to use; it must have exactly one input
762 /// source file. The ASTUnit takes ownership of the CompilerInvocation object.
763 ///
764 /// \param PCHContainerOps - The PCHContainerOperations to use for loading and
765 /// creating modules.
766 ///
767 /// \param Diags - The diagnostics engine to use for reporting errors; its
768 /// lifetime is expected to extend past that of the returned ASTUnit.
769 ///
770 /// \param Action - The ASTFrontendAction to invoke. Its ownership is not
771 /// transferred.
772 ///
773 /// \param Unit - optionally an already created ASTUnit. Its ownership is not
774 /// transferred.
775 ///
776 /// \param Persistent - if true the returned ASTUnit will be complete.
777 /// false means the caller is only interested in getting info through the
778 /// provided \see Action.
779 ///
780 /// \param ErrAST - If non-null and parsing failed without any AST to return
781 /// (e.g. because the PCH could not be loaded), this accepts the ASTUnit
782 /// mainly to allow the caller to see the diagnostics.
783 /// This will only receive an ASTUnit if a new one was created. If an already
784 /// created ASTUnit was passed in \p Unit then the caller can check that.
785 ///
787 std::shared_ptr<CompilerInvocation> CI,
788 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
789 std::shared_ptr<DiagnosticOptions> DiagOpts,
791 FrontendAction *Action = nullptr, ASTUnit *Unit = nullptr,
792 bool Persistent = true, StringRef ResourceFilesPath = StringRef(),
793 bool OnlyLocalDecls = false,
794 CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
795 unsigned PrecompilePreambleAfterNParses = 0,
796 bool CacheCodeCompletionResults = false,
797 bool UserFilesAreVolatile = false,
798 std::unique_ptr<ASTUnit> *ErrAST = nullptr);
799
800 /// LoadFromCompilerInvocation - Create an ASTUnit from a source file, via a
801 /// CompilerInvocation object.
802 ///
803 /// \param CI - The compiler invocation to use; it must have exactly one input
804 /// source file. The ASTUnit takes ownership of the CompilerInvocation object.
805 ///
806 /// \param PCHContainerOps - The PCHContainerOperations to use for loading and
807 /// creating modules.
808 ///
809 /// \param Diags - The diagnostics engine to use for reporting errors; its
810 /// lifetime is expected to extend past that of the returned ASTUnit.
811 //
812 // FIXME: Move OnlyLocalDecls, UseBumpAllocator to setters on the ASTUnit, we
813 // shouldn't need to specify them at construction time.
814 static std::unique_ptr<ASTUnit> LoadFromCompilerInvocation(
815 std::shared_ptr<CompilerInvocation> CI,
816 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
817 std::shared_ptr<DiagnosticOptions> DiagOpts,
819 IntrusiveRefCntPtr<FileManager> FileMgr, bool OnlyLocalDecls = false,
820 CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
821 unsigned PrecompilePreambleAfterNParses = 0,
823 bool CacheCodeCompletionResults = false,
824 bool IncludeBriefCommentsInCodeCompletion = false,
825 bool UserFilesAreVolatile = false);
826
827 friend std::unique_ptr<ASTUnit> CreateASTUnitFromCommandLine(
828 const char **ArgBegin, const char **ArgEnd,
829 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
830 std::shared_ptr<DiagnosticOptions> DiagOpts,
831 IntrusiveRefCntPtr<DiagnosticsEngine> Diags, StringRef ResourceFilesPath,
832 bool StorePreamblesInMemory, StringRef PreambleStoragePath,
833 bool OnlyLocalDecls, CaptureDiagsKind CaptureDiagnostics,
835 bool RemappedFilesKeepOriginalName,
836 unsigned PrecompilePreambleAfterNParses, TranslationUnitKind TUKind,
837 bool CacheCodeCompletionResults,
838 bool IncludeBriefCommentsInCodeCompletion,
839 bool AllowPCHWithCompilerErrors,
840 SkipFunctionBodiesScope SkipFunctionBodies, bool SingleFileParse,
841 bool UserFilesAreVolatile, bool ForSerialization,
842 bool RetainExcludedConditionalBlocks,
843 std::optional<StringRef> ModuleFormat, std::unique_ptr<ASTUnit> *ErrAST,
845
846 /// Reparse the source files using the same command-line options that
847 /// were originally used to produce this translation unit.
848 ///
849 /// \param VFS - A llvm::vfs::FileSystem to be used for all file accesses.
850 /// Note that preamble is saved to a temporary directory on a RealFileSystem,
851 /// so in order for it to be loaded correctly, VFS should give an access to
852 /// this(i.e. be an overlay over RealFileSystem).
853 /// FileMgr->getVirtualFileSystem() will be used if \p VFS is nullptr.
854 ///
855 /// \returns True if a failure occurred that causes the ASTUnit not to
856 /// contain any translation-unit information, false otherwise.
857 bool Reparse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
858 ArrayRef<RemappedFile> RemappedFiles = {},
860
861 /// Free data that will be re-generated on the next parse.
862 ///
863 /// Preamble-related data is not affected.
864 void ResetForParse();
865
866 /// Perform code completion at the given file, line, and
867 /// column within this translation unit.
868 ///
869 /// \param File The file in which code completion will occur.
870 ///
871 /// \param Line The line at which code completion will occur.
872 ///
873 /// \param Column The column at which code completion will occur.
874 ///
875 /// \param IncludeMacros Whether to include macros in the code-completion
876 /// results.
877 ///
878 /// \param IncludeCodePatterns Whether to include code patterns (such as a
879 /// for loop) in the code-completion results.
880 ///
881 /// \param IncludeBriefComments Whether to include brief documentation within
882 /// the set of code completions returned.
883 ///
884 /// \param Act If supplied, this argument is used to parse the input file,
885 /// allowing customized parsing by overriding SyntaxOnlyAction lifecycle
886 /// methods.
887 ///
888 /// FIXME: The Diag, LangOpts, SourceMgr, FileMgr, StoredDiagnostics, and
889 /// OwnedBuffers parameters are all disgusting hacks. They will go away.
890 void CodeComplete(StringRef File, unsigned Line, unsigned Column,
891 ArrayRef<RemappedFile> RemappedFiles, bool IncludeMacros,
892 bool IncludeCodePatterns, bool IncludeBriefComments,
893 CodeCompleteConsumer &Consumer,
894 std::shared_ptr<PCHContainerOperations> PCHContainerOps,
896 LangOptions &LangOpts,
899 SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
901 std::unique_ptr<SyntaxOnlyAction> Act);
902
903 /// Save this translation unit to a file with the given name.
904 ///
905 /// \returns true if there was a file error or false if the save was
906 /// successful.
907 bool Save(StringRef File);
908
909 /// Serialize this translation unit with the given output stream.
910 ///
911 /// \returns True if an error occurred, false otherwise.
912 bool serialize(raw_ostream &OS);
913};
914
915/// Diagnostic consumer that saves each diagnostic it is given.
919 bool CaptureNonErrorsFromIncludes = true;
920 const LangOptions *LangOpts = nullptr;
921 SourceManager *SourceMgr = nullptr;
922
923public:
927 bool CaptureNonErrorsFromIncludes);
928
929 void BeginSourceFile(const LangOptions &LangOpts,
930 const Preprocessor *PP = nullptr) override;
931
933 const Diagnostic &Info) override;
934};
935
936/// RAII object that optionally captures and filters diagnostics, if
937/// there is no diagnostic client to capture them already.
939 DiagnosticsEngine &Diags;
941 DiagnosticConsumer *PreviousClient = nullptr;
942 std::unique_ptr<DiagnosticConsumer> OwningPreviousClient;
943
944public:
946 CaptureDiagsKind CaptureDiagnostics, DiagnosticsEngine &Diags,
949
954};
955
956} // namespace clang
957
958#endif // LLVM_CLANG_FRONTEND_ASTUNIT_H
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 ...
Definition ASTContext.h:239
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.
Definition ASTReader.h:427
ConcurrencyCheck(ASTUnit &Self)
Definition ASTUnit.h:413
Utility class for loading a ASTContext from an AST file.
Definition ASTUnit.h:89
const PreprocessorOptions & getPreprocessorOpts() const
Definition ASTUnit.h:487
unsigned & getCurrentTopLevelHashValue()
Retrieve a reference to the current top-level name hash value.
Definition ASTUnit.h:565
ASTContext & getASTContext()
Definition ASTUnit.h:448
CodeCompletionTUInfo & getCodeCompletionTUInfo()
Definition ASTUnit.h:315
void enableSourceFileDiagnostics()
Enable source-range based diagnostic messages.
Definition ASTUnit.cpp:260
stored_diag_iterator stored_diag_end()
Definition ASTUnit.h:623
void addFileLevelDecl(Decl *D)
Add a new local file-level declaration.
Definition ASTUnit.cpp:2228
const FileManager & getFileManager() const
Definition ASTUnit.h:497
void setOwnsRemappedFileBuffers(bool val)
Definition ASTUnit.h:515
bool isUnsafeToFree() const
Definition ASTUnit.h:428
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.
Definition ASTUnit.cpp:2026
cached_completion_iterator cached_completion_end()
Definition ASTUnit.h:653
SourceRange mapRangeFromPreamble(SourceRange R) const
Definition ASTUnit.h:594
bool hasSema() const
Definition ASTUnit.h:465
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.
Definition ASTUnit.cpp:685
bool top_level_empty() const
Definition ASTUnit.h:543
llvm::IntrusiveRefCntPtr< ASTContext > getASTContextPtr()
Definition ASTUnit.h:449
bool serialize(raw_ostream &OS)
Serialize this translation unit with the given output stream.
Definition ASTUnit.cpp:2217
llvm::iterator_range< stored_diag_iterator > diags_range
Definition ASTUnit.h:627
bool getOwnsRemappedFileBuffers() const
Definition ASTUnit.h:514
const CodeGenOptions & getCodeGenOpts() const
Definition ASTUnit.h:477
const FileSystemOptions & getFileSystemOpts() const
Definition ASTUnit.h:501
ASTDeserializationListener * getDeserializationListener()
Definition ASTUnit.cpp:657
stored_diag_const_iterator stored_diag_end() const
Definition ASTUnit.h:619
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...
Definition ASTUnit.cpp:1710
void setUnsafeToFree(bool Value)
Definition ASTUnit.h:429
std::unique_ptr< llvm::MemoryBuffer > getBufferForFile(StringRef Filename, std::string *ErrorStr=nullptr)
Definition ASTUnit.cpp:664
llvm::StringMap< unsigned > & getCachedCompletionTypes()
Retrieve the mapping from formatted type names to unique type identifiers.
Definition ASTUnit.h:305
const DiagnosticsEngine & getDiagnostics() const
Definition ASTUnit.h:431
SourceLocation getLocation(const FileEntry *File, unsigned Line, unsigned Col) const
Get the source location for the given file:line:col triplet.
Definition ASTUnit.cpp:2310
void ResetForParse()
Free data that will be re-generated on the next parse.
Definition ASTUnit.cpp:1769
llvm::IntrusiveRefCntPtr< SourceManager > getSourceManagerPtr()
Definition ASTUnit.h:439
bool getOnlyLocalDecls() const
Definition ASTUnit.h:512
InputKind getInputKind() const
Determine the input kind this AST unit represents.
Definition ASTUnit.cpp:2479
std::optional< StringRef > getPCHFile()
Get the PCH file if one was included.
Definition ASTUnit.cpp:2447
StringRef getMainFileName() const
Definition ASTUnit.cpp:1442
Sema & getSema() const
Definition ASTUnit.h:467
ASTUnit(const ASTUnit &)=delete
stored_diag_const_iterator stored_diag_begin() const
Definition ASTUnit.h:611
SourceLocation mapLocationToPreamble(SourceLocation Loc) const
If Loc is a local location of the main file but inside the preamble chunk, returns the corresponding ...
Definition ASTUnit.cpp:2348
cached_completion_iterator cached_completion_begin()
Definition ASTUnit.h:649
const LangOptions & getLangOpts() const
Definition ASTUnit.h:472
bool isMainFileAST() const
Definition ASTUnit.h:426
std::vector< Decl * >::iterator top_level_iterator
Definition ASTUnit.h:522
const SourceManager & getSourceManager() const
Definition ASTUnit.h:437
ASTUnit & operator=(const ASTUnit &)=delete
unsigned stored_diag_size() const
Definition ASTUnit.h:638
const_diags_range storedDiagnostics() const
Definition ASTUnit.h:634
Preprocessor & getPreprocessor()
Definition ASTUnit.h:444
DiagnosticsEngine & getDiagnostics()
Definition ASTUnit.h:432
const StoredDiagnostic * stored_diag_const_iterator
Definition ASTUnit.h:609
SourceLocation getEndOfPreambleFileID() const
Definition ASTUnit.cpp:2388
std::vector< CachedCodeCompletionResult >::iterator cached_completion_iterator
Definition ASTUnit.h:646
stored_diag_iterator stored_diag_afterDriver_begin()
Definition ASTUnit.h:640
llvm::IntrusiveRefCntPtr< DiagnosticsEngine > getDiagnosticsPtr()
Definition ASTUnit.h:433
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...
Definition ASTUnit.cpp:1493
@ LoadPreprocessorOnly
Load options and the preprocessor state.
Definition ASTUnit.h:706
@ LoadASTOnly
Load the AST, but do not restore Sema state.
Definition ASTUnit.h:709
@ LoadEverything
Load everything, including Sema.
Definition ASTUnit.h:712
top_level_iterator top_level_end()
Definition ASTUnit.h:531
SourceLocation getStartOfMainFileID() const
Definition ASTUnit.cpp:2399
SourceRange mapRangeToPreamble(SourceRange R) const
Definition ASTUnit.h:600
diags_range storedDiagnostics()
Definition ASTUnit.h:630
FileManager & getFileManager()
Definition ASTUnit.h:498
IntrusiveRefCntPtr< ASTReader > getASTReader() const
Definition ASTUnit.cpp:647
IntrusiveRefCntPtr< FileManager > getFileManagerPtr()
Definition ASTUnit.h:499
bool(*)(void *context, const Decl *D) DeclVisitorFn
Type for a function iterating over a number of declarations.
Definition ASTUnit.h:669
StoredDiagnostic * stored_diag_iterator
Definition ASTUnit.h:608
bool visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn)
Iterate over local declarations (locally parsed if this is a parsed source file or the loaded declara...
Definition ASTUnit.cpp:2425
IntrusiveRefCntPtr< llvm::vfs::FileSystem > getVirtualFileSystemPtr()
Definition ASTUnit.h:492
llvm::iterator_range< PreprocessingRecord::iterator > getLocalPreprocessingEntities() const
Returns an iterator range for the local preprocessing entities of the local Preprocessor,...
Definition ASTUnit.cpp:2411
StringRef getOriginalSourceFileName() const
Definition ASTUnit.h:505
top_level_iterator top_level_begin()
Definition ASTUnit.h:524
ASTMutationListener * getASTMutationListener()
Definition ASTUnit.cpp:651
stored_diag_iterator stored_diag_begin()
Definition ASTUnit.h:615
TranslationUnitKind getTranslationUnitKind() const
Determine what kind of translation unit this AST represents.
Definition ASTUnit.h:688
std::shared_ptr< Preprocessor > getPreprocessorPtr() const
Definition ASTUnit.h:445
void setPreprocessor(std::shared_ptr< Preprocessor > pp)
Definition ASTUnit.cpp:256
StringRef getASTFileName() const
If this ASTUnit came from an AST file, returns the filename for it.
Definition ASTUnit.cpp:1460
bool Save(StringRef File)
Save this translation unit to a file with the given name.
Definition ASTUnit.cpp:2186
SourceManager & getSourceManager()
Definition ASTUnit.h:438
const HeaderSearchOptions & getHeaderSearchOpts() const
Definition ASTUnit.h:482
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)
Definition ASTUnit.h:451
unsigned getPreambleCounterForTests() const
Definition ASTUnit.h:605
unsigned cached_completion_size() const
Definition ASTUnit.h:657
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.
Definition ASTUnit.cpp:1470
void addTopLevelDecl(Decl *D)
Add a new top-level declaration.
Definition ASTUnit.h:549
const Preprocessor & getPreprocessor() const
Definition ASTUnit.h:443
std::shared_ptr< GlobalCodeCompletionAllocator > getCachedCompletionAllocator()
Retrieve the allocator used to cache global code completions.
Definition ASTUnit.h:311
llvm::iterator_range< stored_diag_const_iterator > const_diags_range
Definition ASTUnit.h:628
bool isInMainFileID(SourceLocation Loc) const
Definition ASTUnit.cpp:2377
bool isModuleFile() const
Returns true if the ASTUnit was constructed from a serialized module file.
Definition ASTUnit.cpp:2475
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.
Definition ASTUnit.cpp:2267
const ASTContext & getASTContext() const
Definition ASTUnit.h:447
bool isInPreambleFileID(SourceLocation Loc) const
Definition ASTUnit.cpp:2366
SourceLocation mapLocationFromPreamble(SourceLocation Loc) const
If Loc is a loaded location from the preamble, returns the corresponding local location of the main f...
Definition ASTUnit.cpp:2327
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.
Definition ASTUnit.h:695
std::size_t top_level_size() const
Definition ASTUnit.h:538
Writes an AST file containing the contents of a translation unit.
Definition ASTWriter.h:97
CaptureDroppedDiagnostics(const CaptureDroppedDiagnostics &)=delete
CaptureDroppedDiagnostics(CaptureDiagsKind CaptureDiagnostics, DiagnosticsEngine &Diags, SmallVectorImpl< StoredDiagnostic > *StoredDiags, SmallVectorImpl< StandaloneDiagnostic > *StandaloneDiags)
Definition ASTUnit.cpp:626
CaptureDroppedDiagnostics & operator=(const CaptureDroppedDiagnostics &)=delete
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.
Definition DeclBase.h:86
Abstract interface, implemented by clients of the front-end, which formats and prints fully processed...
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.
Definition Diagnostic.h:232
Level
The level of the diagnostic, after it has been through mapping.
Definition Diagnostic.h:237
Cached information about one file (either on disk or in the virtual file system).
Definition FileEntry.h:273
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.
Definition FileManager.h:57
Keeps track of options that affect how file operations are performed.
Diagnostic consumer that saves each diagnostic it is given.
Definition ASTUnit.h:916
void BeginSourceFile(const LangOptions &LangOpts, const Preprocessor *PP=nullptr) override
Callback to inform the diagnostic client that processing of a source file is beginning.
Definition ASTUnit.cpp:580
FilterAndStoreDiagnosticConsumer(SmallVectorImpl< StoredDiagnostic > *StoredDiags, SmallVectorImpl< StandaloneDiagnostic > *StandaloneDiags, bool CaptureNonErrorsFromIncludes)
Definition ASTUnit.cpp:570
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.
Definition ASTUnit.cpp:595
Abstract base class for actions which can be performed by the frontend.
HeaderSearchOptions - Helper class for storing options related to the initialization of the HeaderSea...
Encapsulates the information needed to find the file referenced by a #include or #include_next,...
The kind of a file that we've been handed as an input.
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.
Definition ModuleCache.h:39
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.
Definition Sema.h:863
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.
Represents a diagnostic in a form that can be retained until its corresponding source manager is dest...
Exposes information about the current target.
Definition TargetInfo.h:226
A module loader that doesn't know how to create or load modules.
CXCursorKind
Describes the kind of entity that a cursor refers to.
Definition Index.h:1186
CXAvailabilityKind
Describes the availability of a particular entity, which indicates whether the use of this entity wil...
Definition Index.h:130
Top level wrappers for InstallAPI frontend operations.
SkipFunctionBodiesScope
Enumerates the available scopes for skipping function bodies.
Definition ASTUnit.h:83
@ Parse
Parse the block; this code is always used.
Definition Parser.h:137
SimplifiedTypeClass
A simplified classification of types used when determining "similar" types for code completion.
CaptureDiagsKind
Enumerates the available kinds for capturing diagnostics.
Definition ASTUnit.h:86
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.
Definition ASTContext.h:176
Diagnostic wrappers for TextAPI types for error reporting.
Definition Dominators.h:30
A cached code-completion result, which may be introduced in one of many different contexts.
Definition ASTUnit.h:267
unsigned Type
The type of a non-macro completion result, stored as a unique integer used by the string map of cache...
Definition ASTUnit.h:300
CXCursorKind Kind
The libclang cursor kind corresponding to this code-completion result.
Definition ASTUnit.h:286
CXAvailabilityKind Availability
The availability of this code-completion result.
Definition ASTUnit.h:289
unsigned Priority
The priority given to this code-completion result.
Definition ASTUnit.h:282
SimplifiedTypeClass TypeClass
The simplified type class for a non-macro completion result.
Definition ASTUnit.h:292
uint64_t ShowInContexts
A bitmask that indicates which code-completion contexts should contain this completion result.
Definition ASTUnit.h:279
CodeCompletionString * Completion
The code-completion string corresponding to this completion result.
Definition ASTUnit.h:270