xref: /freebsd/contrib/llvm-project/clang/include/clang/Sema/CodeCompleteConsumer.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1  //===- CodeCompleteConsumer.h - Code Completion Interface -------*- 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  //  This file defines the CodeCompleteConsumer class.
10  //
11  //===----------------------------------------------------------------------===//
12  
13  #ifndef LLVM_CLANG_SEMA_CODECOMPLETECONSUMER_H
14  #define LLVM_CLANG_SEMA_CODECOMPLETECONSUMER_H
15  
16  #include "clang-c/Index.h"
17  #include "clang/AST/Type.h"
18  #include "clang/Basic/LLVM.h"
19  #include "clang/Lex/MacroInfo.h"
20  #include "clang/Sema/CodeCompleteOptions.h"
21  #include "clang/Sema/DeclSpec.h"
22  #include "llvm/ADT/ArrayRef.h"
23  #include "llvm/ADT/DenseMap.h"
24  #include "llvm/ADT/SmallPtrSet.h"
25  #include "llvm/ADT/SmallVector.h"
26  #include "llvm/ADT/StringRef.h"
27  #include "llvm/Support/Allocator.h"
28  #include "llvm/Support/type_traits.h"
29  #include <cassert>
30  #include <memory>
31  #include <optional>
32  #include <string>
33  #include <utility>
34  
35  namespace clang {
36  
37  class ASTContext;
38  class Decl;
39  class DeclContext;
40  class FunctionDecl;
41  class FunctionTemplateDecl;
42  class IdentifierInfo;
43  class LangOptions;
44  class NamedDecl;
45  class NestedNameSpecifier;
46  class Preprocessor;
47  class RawComment;
48  class Sema;
49  class UsingShadowDecl;
50  
51  /// Default priority values for code-completion results based
52  /// on their kind.
53  enum {
54    /// Priority for the next initialization in a constructor initializer
55    /// list.
56    CCP_NextInitializer = 7,
57  
58    /// Priority for an enumeration constant inside a switch whose
59    /// condition is of the enumeration type.
60    CCP_EnumInCase = 7,
61  
62    /// Priority for a send-to-super completion.
63    CCP_SuperCompletion = 20,
64  
65    /// Priority for a declaration that is in the local scope.
66    CCP_LocalDeclaration = 34,
67  
68    /// Priority for a member declaration found from the current
69    /// method or member function.
70    CCP_MemberDeclaration = 35,
71  
72    /// Priority for a language keyword (that isn't any of the other
73    /// categories).
74    CCP_Keyword = 40,
75  
76    /// Priority for a code pattern.
77    CCP_CodePattern = 40,
78  
79    /// Priority for a non-type declaration.
80    CCP_Declaration = 50,
81  
82    /// Priority for a type.
83    CCP_Type = CCP_Declaration,
84  
85    /// Priority for a constant value (e.g., enumerator).
86    CCP_Constant = 65,
87  
88    /// Priority for a preprocessor macro.
89    CCP_Macro = 70,
90  
91    /// Priority for a nested-name-specifier.
92    CCP_NestedNameSpecifier = 75,
93  
94    /// Priority for a result that isn't likely to be what the user wants,
95    /// but is included for completeness.
96    CCP_Unlikely = 80,
97  
98    /// Priority for the Objective-C "_cmd" implicit parameter.
99    CCP_ObjC_cmd = CCP_Unlikely
100  };
101  
102  /// Priority value deltas that are added to code-completion results
103  /// based on the context of the result.
104  enum {
105    /// The result is in a base class.
106    CCD_InBaseClass = 2,
107  
108    /// The result is a C++ non-static member function whose qualifiers
109    /// exactly match the object type on which the member function can be called.
110    CCD_ObjectQualifierMatch = -1,
111  
112    /// The selector of the given message exactly matches the selector
113    /// of the current method, which might imply that some kind of delegation
114    /// is occurring.
115    CCD_SelectorMatch = -3,
116  
117    /// Adjustment to the "bool" type in Objective-C, where the typedef
118    /// "BOOL" is preferred.
119    CCD_bool_in_ObjC = 1,
120  
121    /// Adjustment for KVC code pattern priorities when it doesn't look
122    /// like the
123    CCD_ProbablyNotObjCCollection = 15,
124  
125    /// An Objective-C method being used as a property.
126    CCD_MethodAsProperty = 2,
127  
128    /// An Objective-C block property completed as a setter with a
129    /// block placeholder.
130    CCD_BlockPropertySetter = 3
131  };
132  
133  /// Priority value factors by which we will divide or multiply the
134  /// priority of a code-completion result.
135  enum {
136    /// Divide by this factor when a code-completion result's type exactly
137    /// matches the type we expect.
138    CCF_ExactTypeMatch = 4,
139  
140    /// Divide by this factor when a code-completion result's type is
141    /// similar to the type we expect (e.g., both arithmetic types, both
142    /// Objective-C object pointer types).
143    CCF_SimilarTypeMatch = 2
144  };
145  
146  /// A simplified classification of types used when determining
147  /// "similar" types for code completion.
148  enum SimplifiedTypeClass {
149    STC_Arithmetic,
150    STC_Array,
151    STC_Block,
152    STC_Function,
153    STC_ObjectiveC,
154    STC_Other,
155    STC_Pointer,
156    STC_Record,
157    STC_Void
158  };
159  
160  /// Determine the simplified type class of the given canonical type.
161  SimplifiedTypeClass getSimplifiedTypeClass(CanQualType T);
162  
163  /// Determine the type that this declaration will have if it is used
164  /// as a type or in an expression.
165  QualType getDeclUsageType(ASTContext &C, const NamedDecl *ND);
166  
167  /// Determine the priority to be given to a macro code completion result
168  /// with the given name.
169  ///
170  /// \param MacroName The name of the macro.
171  ///
172  /// \param LangOpts Options describing the current language dialect.
173  ///
174  /// \param PreferredTypeIsPointer Whether the preferred type for the context
175  /// of this macro is a pointer type.
176  unsigned getMacroUsagePriority(StringRef MacroName,
177                                 const LangOptions &LangOpts,
178                                 bool PreferredTypeIsPointer = false);
179  
180  /// Determine the libclang cursor kind associated with the given
181  /// declaration.
182  CXCursorKind getCursorKindForDecl(const Decl *D);
183  
184  /// The context in which code completion occurred, so that the
185  /// code-completion consumer can process the results accordingly.
186  class CodeCompletionContext {
187  public:
188    enum Kind {
189      /// An unspecified code-completion context.
190      CCC_Other,
191  
192      /// An unspecified code-completion context where we should also add
193      /// macro completions.
194      CCC_OtherWithMacros,
195  
196      /// Code completion occurred within a "top-level" completion context,
197      /// e.g., at namespace or global scope.
198      CCC_TopLevel,
199  
200      /// Code completion occurred within an Objective-C interface,
201      /// protocol, or category interface.
202      CCC_ObjCInterface,
203  
204      /// Code completion occurred within an Objective-C implementation
205      /// or category implementation.
206      CCC_ObjCImplementation,
207  
208      /// Code completion occurred within the instance variable list of
209      /// an Objective-C interface, implementation, or category implementation.
210      CCC_ObjCIvarList,
211  
212      /// Code completion occurred within a class, struct, or union.
213      CCC_ClassStructUnion,
214  
215      /// Code completion occurred where a statement (or declaration) is
216      /// expected in a function, method, or block.
217      CCC_Statement,
218  
219      /// Code completion occurred where an expression is expected.
220      CCC_Expression,
221  
222      /// Code completion occurred where an Objective-C message receiver
223      /// is expected.
224      CCC_ObjCMessageReceiver,
225  
226      /// Code completion occurred on the right-hand side of a member
227      /// access expression using the dot operator.
228      ///
229      /// The results of this completion are the members of the type being
230      /// accessed. The type itself is available via
231      /// \c CodeCompletionContext::getType().
232      CCC_DotMemberAccess,
233  
234      /// Code completion occurred on the right-hand side of a member
235      /// access expression using the arrow operator.
236      ///
237      /// The results of this completion are the members of the type being
238      /// accessed. The type itself is available via
239      /// \c CodeCompletionContext::getType().
240      CCC_ArrowMemberAccess,
241  
242      /// Code completion occurred on the right-hand side of an Objective-C
243      /// property access expression.
244      ///
245      /// The results of this completion are the members of the type being
246      /// accessed. The type itself is available via
247      /// \c CodeCompletionContext::getType().
248      CCC_ObjCPropertyAccess,
249  
250      /// Code completion occurred after the "enum" keyword, to indicate
251      /// an enumeration name.
252      CCC_EnumTag,
253  
254      /// Code completion occurred after the "union" keyword, to indicate
255      /// a union name.
256      CCC_UnionTag,
257  
258      /// Code completion occurred after the "struct" or "class" keyword,
259      /// to indicate a struct or class name.
260      CCC_ClassOrStructTag,
261  
262      /// Code completion occurred where a protocol name is expected.
263      CCC_ObjCProtocolName,
264  
265      /// Code completion occurred where a namespace or namespace alias
266      /// is expected.
267      CCC_Namespace,
268  
269      /// Code completion occurred where a type name is expected.
270      CCC_Type,
271  
272      /// Code completion occurred where a new name is expected.
273      CCC_NewName,
274  
275      /// Code completion occurred where both a new name and an existing symbol is
276      /// permissible.
277      CCC_SymbolOrNewName,
278  
279      /// Code completion occurred where an existing name(such as type, function
280      /// or variable) is expected.
281      CCC_Symbol,
282  
283      /// Code completion occurred where an macro is being defined.
284      CCC_MacroName,
285  
286      /// Code completion occurred where a macro name is expected
287      /// (without any arguments, in the case of a function-like macro).
288      CCC_MacroNameUse,
289  
290      /// Code completion occurred within a preprocessor expression.
291      CCC_PreprocessorExpression,
292  
293      /// Code completion occurred where a preprocessor directive is
294      /// expected.
295      CCC_PreprocessorDirective,
296  
297      /// Code completion occurred in a context where natural language is
298      /// expected, e.g., a comment or string literal.
299      ///
300      /// This context usually implies that no completions should be added,
301      /// unless they come from an appropriate natural-language dictionary.
302      CCC_NaturalLanguage,
303  
304      /// Code completion for a selector, as in an \@selector expression.
305      CCC_SelectorName,
306  
307      /// Code completion within a type-qualifier list.
308      CCC_TypeQualifiers,
309  
310      /// Code completion in a parenthesized expression, which means that
311      /// we may also have types here in C and Objective-C (as well as in C++).
312      CCC_ParenthesizedExpression,
313  
314      /// Code completion where an Objective-C instance message is
315      /// expected.
316      CCC_ObjCInstanceMessage,
317  
318      /// Code completion where an Objective-C class message is expected.
319      CCC_ObjCClassMessage,
320  
321      /// Code completion where the name of an Objective-C class is
322      /// expected.
323      CCC_ObjCInterfaceName,
324  
325      /// Code completion where an Objective-C category name is expected.
326      CCC_ObjCCategoryName,
327  
328      /// Code completion inside the filename part of a #include directive.
329      CCC_IncludedFile,
330  
331      /// Code completion of an attribute name.
332      CCC_Attribute,
333  
334      /// An unknown context, in which we are recovering from a parsing
335      /// error and don't know which completions we should give.
336      CCC_Recovery,
337  
338      /// Code completion in a @class forward declaration.
339      CCC_ObjCClassForwardDecl,
340  
341      /// Code completion at a top level, i.e. in a namespace or global scope,
342      /// but also in expression statements. This is because REPL inputs can be
343      /// declarations or expression statements.
344      CCC_TopLevelOrExpression,
345    };
346  
347    using VisitedContextSet = llvm::SmallPtrSet<DeclContext *, 8>;
348  
349  private:
350    Kind CCKind;
351  
352    /// Indicates whether we are completing a name of a using declaration, e.g.
353    ///     using ^;
354    ///     using a::^;
355    bool IsUsingDeclaration;
356  
357    /// The type that would prefer to see at this point (e.g., the type
358    /// of an initializer or function parameter).
359    QualType PreferredType;
360  
361    /// The type of the base object in a member access expression.
362    QualType BaseType;
363  
364    /// The identifiers for Objective-C selector parts.
365    ArrayRef<const IdentifierInfo *> SelIdents;
366  
367    /// The scope specifier that comes before the completion token e.g.
368    /// "a::b::"
369    std::optional<CXXScopeSpec> ScopeSpecifier;
370  
371    /// A set of declaration contexts visited by Sema when doing lookup for
372    /// code completion.
373    VisitedContextSet VisitedContexts;
374  
375  public:
376    /// Construct a new code-completion context of the given kind.
CodeCompletionContext(Kind CCKind)377    CodeCompletionContext(Kind CCKind)
378        : CCKind(CCKind), IsUsingDeclaration(false), SelIdents(std::nullopt) {}
379  
380    /// Construct a new code-completion context of the given kind.
381    CodeCompletionContext(
382        Kind CCKind, QualType T,
383        ArrayRef<const IdentifierInfo *> SelIdents = std::nullopt)
CCKind(CCKind)384        : CCKind(CCKind), IsUsingDeclaration(false), SelIdents(SelIdents) {
385      if (CCKind == CCC_DotMemberAccess || CCKind == CCC_ArrowMemberAccess ||
386          CCKind == CCC_ObjCPropertyAccess || CCKind == CCC_ObjCClassMessage ||
387          CCKind == CCC_ObjCInstanceMessage)
388        BaseType = T;
389      else
390        PreferredType = T;
391    }
392  
isUsingDeclaration()393    bool isUsingDeclaration() const { return IsUsingDeclaration; }
setIsUsingDeclaration(bool V)394    void setIsUsingDeclaration(bool V) { IsUsingDeclaration = V; }
395  
396    /// Retrieve the kind of code-completion context.
getKind()397    Kind getKind() const { return CCKind; }
398  
399    /// Retrieve the type that this expression would prefer to have, e.g.,
400    /// if the expression is a variable initializer or a function argument, the
401    /// type of the corresponding variable or function parameter.
getPreferredType()402    QualType getPreferredType() const { return PreferredType; }
setPreferredType(QualType T)403    void setPreferredType(QualType T) { PreferredType = T; }
404  
405    /// Retrieve the type of the base object in a member-access
406    /// expression.
getBaseType()407    QualType getBaseType() const { return BaseType; }
408  
409    /// Retrieve the Objective-C selector identifiers.
getSelIdents()410    ArrayRef<const IdentifierInfo *> getSelIdents() const { return SelIdents; }
411  
412    /// Determines whether we want C++ constructors as results within this
413    /// context.
414    bool wantConstructorResults() const;
415  
416    /// Sets the scope specifier that comes before the completion token.
417    /// This is expected to be set in code completions on qualfied specifiers
418    /// (e.g. "a::b::").
setCXXScopeSpecifier(CXXScopeSpec SS)419    void setCXXScopeSpecifier(CXXScopeSpec SS) {
420      this->ScopeSpecifier = std::move(SS);
421    }
422  
423    /// Adds a visited context.
addVisitedContext(DeclContext * Ctx)424    void addVisitedContext(DeclContext *Ctx) {
425      VisitedContexts.insert(Ctx);
426    }
427  
428    /// Retrieves all visited contexts.
getVisitedContexts()429    const VisitedContextSet &getVisitedContexts() const {
430      return VisitedContexts;
431    }
432  
getCXXScopeSpecifier()433    std::optional<const CXXScopeSpec *> getCXXScopeSpecifier() {
434      if (ScopeSpecifier)
435        return &*ScopeSpecifier;
436      return std::nullopt;
437    }
438  };
439  
440  /// Get string representation of \p Kind, useful for debugging.
441  llvm::StringRef getCompletionKindString(CodeCompletionContext::Kind Kind);
442  
443  /// A "string" used to describe how code completion can
444  /// be performed for an entity.
445  ///
446  /// A code completion string typically shows how a particular entity can be
447  /// used. For example, the code completion string for a function would show
448  /// the syntax to call it, including the parentheses, placeholders for the
449  /// arguments, etc.
450  class CodeCompletionString {
451  public:
452    /// The different kinds of "chunks" that can occur within a code
453    /// completion string.
454    enum ChunkKind {
455      /// The piece of text that the user is expected to type to
456      /// match the code-completion string, typically a keyword or the name of a
457      /// declarator or macro.
458      CK_TypedText,
459  
460      /// A piece of text that should be placed in the buffer, e.g.,
461      /// parentheses or a comma in a function call.
462      CK_Text,
463  
464      /// A code completion string that is entirely optional. For example,
465      /// an optional code completion string that describes the default arguments
466      /// in a function call.
467      CK_Optional,
468  
469      /// A string that acts as a placeholder for, e.g., a function
470      /// call argument.
471      CK_Placeholder,
472  
473      /// A piece of text that describes something about the result but
474      /// should not be inserted into the buffer.
475      CK_Informative,
476      /// A piece of text that describes the type of an entity or, for
477      /// functions and methods, the return type.
478      CK_ResultType,
479  
480      /// A piece of text that describes the parameter that corresponds
481      /// to the code-completion location within a function call, message send,
482      /// macro invocation, etc.
483      CK_CurrentParameter,
484  
485      /// A left parenthesis ('(').
486      CK_LeftParen,
487  
488      /// A right parenthesis (')').
489      CK_RightParen,
490  
491      /// A left bracket ('[').
492      CK_LeftBracket,
493  
494      /// A right bracket (']').
495      CK_RightBracket,
496  
497      /// A left brace ('{').
498      CK_LeftBrace,
499  
500      /// A right brace ('}').
501      CK_RightBrace,
502  
503      /// A left angle bracket ('<').
504      CK_LeftAngle,
505  
506      /// A right angle bracket ('>').
507      CK_RightAngle,
508  
509      /// A comma separator (',').
510      CK_Comma,
511  
512      /// A colon (':').
513      CK_Colon,
514  
515      /// A semicolon (';').
516      CK_SemiColon,
517  
518      /// An '=' sign.
519      CK_Equal,
520  
521      /// Horizontal whitespace (' ').
522      CK_HorizontalSpace,
523  
524      /// Vertical whitespace ('\\n' or '\\r\\n', depending on the
525      /// platform).
526      CK_VerticalSpace
527    };
528  
529    /// One piece of the code completion string.
530    struct Chunk {
531      /// The kind of data stored in this piece of the code completion
532      /// string.
533      ChunkKind Kind = CK_Text;
534  
535      union {
536        /// The text string associated with a CK_Text, CK_Placeholder,
537        /// CK_Informative, or CK_Comma chunk.
538        /// The string is owned by the chunk and will be deallocated
539        /// (with delete[]) when the chunk is destroyed.
540        const char *Text;
541  
542        /// The code completion string associated with a CK_Optional chunk.
543        /// The optional code completion string is owned by the chunk, and will
544        /// be deallocated (with delete) when the chunk is destroyed.
545        CodeCompletionString *Optional;
546      };
547  
ChunkChunk548      Chunk() : Text(nullptr) {}
549  
550      explicit Chunk(ChunkKind Kind, const char *Text = "");
551  
552      /// Create a new text chunk.
553      static Chunk CreateText(const char *Text);
554  
555      /// Create a new optional chunk.
556      static Chunk CreateOptional(CodeCompletionString *Optional);
557  
558      /// Create a new placeholder chunk.
559      static Chunk CreatePlaceholder(const char *Placeholder);
560  
561      /// Create a new informative chunk.
562      static Chunk CreateInformative(const char *Informative);
563  
564      /// Create a new result type chunk.
565      static Chunk CreateResultType(const char *ResultType);
566  
567      /// Create a new current-parameter chunk.
568      static Chunk CreateCurrentParameter(const char *CurrentParameter);
569    };
570  
571  private:
572    friend class CodeCompletionBuilder;
573    friend class CodeCompletionResult;
574  
575    /// The number of chunks stored in this string.
576    unsigned NumChunks : 16;
577  
578    /// The number of annotations for this code-completion result.
579    unsigned NumAnnotations : 16;
580  
581    /// The priority of this code-completion string.
582    unsigned Priority : 16;
583  
584    /// The availability of this code-completion result.
585    LLVM_PREFERRED_TYPE(CXAvailabilityKind)
586    unsigned Availability : 2;
587  
588    /// The name of the parent context.
589    StringRef ParentName;
590  
591    /// A brief documentation comment attached to the declaration of
592    /// entity being completed by this result.
593    const char *BriefComment;
594  
595    CodeCompletionString(const Chunk *Chunks, unsigned NumChunks,
596                         unsigned Priority, CXAvailabilityKind Availability,
597                         const char **Annotations, unsigned NumAnnotations,
598                         StringRef ParentName,
599                         const char *BriefComment);
600    ~CodeCompletionString() = default;
601  
602  public:
603    CodeCompletionString(const CodeCompletionString &) = delete;
604    CodeCompletionString &operator=(const CodeCompletionString &) = delete;
605  
606    using iterator = const Chunk *;
607  
begin()608    iterator begin() const { return reinterpret_cast<const Chunk *>(this + 1); }
end()609    iterator end() const { return begin() + NumChunks; }
empty()610    bool empty() const { return NumChunks == 0; }
size()611    unsigned size() const { return NumChunks; }
612  
613    const Chunk &operator[](unsigned I) const {
614      assert(I < size() && "Chunk index out-of-range");
615      return begin()[I];
616    }
617  
618    /// Returns the text in the first TypedText chunk.
619    const char *getTypedText() const;
620  
621    /// Returns the combined text from all TypedText chunks.
622    std::string getAllTypedText() const;
623  
624    /// Retrieve the priority of this code completion result.
getPriority()625    unsigned getPriority() const { return Priority; }
626  
627    /// Retrieve the availability of this code completion result.
getAvailability()628    unsigned getAvailability() const { return Availability; }
629  
630    /// Retrieve the number of annotations for this code completion result.
631    unsigned getAnnotationCount() const;
632  
633    /// Retrieve the annotation string specified by \c AnnotationNr.
634    const char *getAnnotation(unsigned AnnotationNr) const;
635  
636    /// Retrieve the name of the parent context.
getParentContextName()637    StringRef getParentContextName() const {
638      return ParentName;
639    }
640  
getBriefComment()641    const char *getBriefComment() const {
642      return BriefComment;
643    }
644  
645    /// Retrieve a string representation of the code completion string,
646    /// which is mainly useful for debugging.
647    std::string getAsString() const;
648  };
649  
650  /// An allocator used specifically for the purpose of code completion.
651  class CodeCompletionAllocator : public llvm::BumpPtrAllocator {
652  public:
653    /// Copy the given string into this allocator.
654    const char *CopyString(const Twine &String);
655  };
656  
657  /// Allocator for a cached set of global code completions.
658  class GlobalCodeCompletionAllocator : public CodeCompletionAllocator {};
659  
660  class CodeCompletionTUInfo {
661    llvm::DenseMap<const DeclContext *, StringRef> ParentNames;
662    std::shared_ptr<GlobalCodeCompletionAllocator> AllocatorRef;
663  
664  public:
CodeCompletionTUInfo(std::shared_ptr<GlobalCodeCompletionAllocator> Allocator)665    explicit CodeCompletionTUInfo(
666        std::shared_ptr<GlobalCodeCompletionAllocator> Allocator)
667        : AllocatorRef(std::move(Allocator)) {}
668  
getAllocatorRef()669    std::shared_ptr<GlobalCodeCompletionAllocator> getAllocatorRef() const {
670      return AllocatorRef;
671    }
672  
getAllocator()673    CodeCompletionAllocator &getAllocator() const {
674      assert(AllocatorRef);
675      return *AllocatorRef;
676    }
677  
678    StringRef getParentName(const DeclContext *DC);
679  };
680  
681  } // namespace clang
682  
683  namespace clang {
684  
685  /// A builder class used to construct new code-completion strings.
686  class CodeCompletionBuilder {
687  public:
688    using Chunk = CodeCompletionString::Chunk;
689  
690  private:
691    CodeCompletionAllocator &Allocator;
692    CodeCompletionTUInfo &CCTUInfo;
693    unsigned Priority = 0;
694    CXAvailabilityKind Availability = CXAvailability_Available;
695    StringRef ParentName;
696    const char *BriefComment = nullptr;
697  
698    /// The chunks stored in this string.
699    SmallVector<Chunk, 4> Chunks;
700  
701    SmallVector<const char *, 2> Annotations;
702  
703  public:
CodeCompletionBuilder(CodeCompletionAllocator & Allocator,CodeCompletionTUInfo & CCTUInfo)704    CodeCompletionBuilder(CodeCompletionAllocator &Allocator,
705                          CodeCompletionTUInfo &CCTUInfo)
706        : Allocator(Allocator), CCTUInfo(CCTUInfo) {}
707  
CodeCompletionBuilder(CodeCompletionAllocator & Allocator,CodeCompletionTUInfo & CCTUInfo,unsigned Priority,CXAvailabilityKind Availability)708    CodeCompletionBuilder(CodeCompletionAllocator &Allocator,
709                          CodeCompletionTUInfo &CCTUInfo,
710                          unsigned Priority, CXAvailabilityKind Availability)
711        : Allocator(Allocator), CCTUInfo(CCTUInfo), Priority(Priority),
712          Availability(Availability) {}
713  
714    /// Retrieve the allocator into which the code completion
715    /// strings should be allocated.
getAllocator()716    CodeCompletionAllocator &getAllocator() const { return Allocator; }
717  
getCodeCompletionTUInfo()718    CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
719  
720    /// Take the resulting completion string.
721    ///
722    /// This operation can only be performed once.
723    CodeCompletionString *TakeString();
724  
725    /// Add a new typed-text chunk.
726    void AddTypedTextChunk(const char *Text);
727  
728    /// Add a new text chunk.
729    void AddTextChunk(const char *Text);
730  
731    /// Add a new optional chunk.
732    void AddOptionalChunk(CodeCompletionString *Optional);
733  
734    /// Add a new placeholder chunk.
735    void AddPlaceholderChunk(const char *Placeholder);
736  
737    /// Add a new informative chunk.
738    void AddInformativeChunk(const char *Text);
739  
740    /// Add a new result-type chunk.
741    void AddResultTypeChunk(const char *ResultType);
742  
743    /// Add a new current-parameter chunk.
744    void AddCurrentParameterChunk(const char *CurrentParameter);
745  
746    /// Add a new chunk.
747    void AddChunk(CodeCompletionString::ChunkKind CK, const char *Text = "");
748  
AddAnnotation(const char * A)749    void AddAnnotation(const char *A) { Annotations.push_back(A); }
750  
751    /// Add the parent context information to this code completion.
752    void addParentContext(const DeclContext *DC);
753  
getBriefComment()754    const char *getBriefComment() const { return BriefComment; }
755    void addBriefComment(StringRef Comment);
756  
getParentName()757    StringRef getParentName() const { return ParentName; }
758  };
759  
760  /// Captures a result of code completion.
761  class CodeCompletionResult {
762  public:
763    /// Describes the kind of result generated.
764    enum ResultKind {
765      /// Refers to a declaration.
766      RK_Declaration = 0,
767  
768      /// Refers to a keyword or symbol.
769      RK_Keyword,
770  
771      /// Refers to a macro.
772      RK_Macro,
773  
774      /// Refers to a precomputed pattern.
775      RK_Pattern
776    };
777  
778    /// When Kind == RK_Declaration or RK_Pattern, the declaration we are
779    /// referring to. In the latter case, the declaration might be NULL.
780    const NamedDecl *Declaration = nullptr;
781  
782    union {
783      /// When Kind == RK_Keyword, the string representing the keyword
784      /// or symbol's spelling.
785      const char *Keyword;
786  
787      /// When Kind == RK_Pattern, the code-completion string that
788      /// describes the completion text to insert.
789      CodeCompletionString *Pattern;
790  
791      /// When Kind == RK_Macro, the identifier that refers to a macro.
792      const IdentifierInfo *Macro;
793    };
794  
795    /// The priority of this particular code-completion result.
796    unsigned Priority;
797  
798    /// Specifies which parameter (of a function, Objective-C method,
799    /// macro, etc.) we should start with when formatting the result.
800    unsigned StartParameter = 0;
801  
802    /// The kind of result stored here.
803    ResultKind Kind;
804  
805    /// The cursor kind that describes this result.
806    CXCursorKind CursorKind;
807  
808    /// The availability of this result.
809    CXAvailabilityKind Availability = CXAvailability_Available;
810  
811    /// Fix-its that *must* be applied before inserting the text for the
812    /// corresponding completion.
813    ///
814    /// By default, CodeCompletionBuilder only returns completions with empty
815    /// fix-its. Extra completions with non-empty fix-its should be explicitly
816    /// requested by setting CompletionOptions::IncludeFixIts.
817    ///
818    /// For the clients to be able to compute position of the cursor after
819    /// applying fix-its, the following conditions are guaranteed to hold for
820    /// RemoveRange of the stored fix-its:
821    ///  - Ranges in the fix-its are guaranteed to never contain the completion
822    ///  point (or identifier under completion point, if any) inside them, except
823    ///  at the start or at the end of the range.
824    ///  - If a fix-it range starts or ends with completion point (or starts or
825    ///  ends after the identifier under completion point), it will contain at
826    ///  least one character. It allows to unambiguously recompute completion
827    ///  point after applying the fix-it.
828    ///
829    /// The intuition is that provided fix-its change code around the identifier
830    /// we complete, but are not allowed to touch the identifier itself or the
831    /// completion point. One example of completions with corrections are the ones
832    /// replacing '.' with '->' and vice versa:
833    ///
834    /// std::unique_ptr<std::vector<int>> vec_ptr;
835    /// In 'vec_ptr.^', one of the completions is 'push_back', it requires
836    /// replacing '.' with '->'.
837    /// In 'vec_ptr->^', one of the completions is 'release', it requires
838    /// replacing '->' with '.'.
839    std::vector<FixItHint> FixIts;
840  
841    /// Whether this result is hidden by another name.
842    bool Hidden : 1;
843  
844    /// Whether this is a class member from base class.
845    bool InBaseClass : 1;
846  
847    /// Whether this result was found via lookup into a base class.
848    bool QualifierIsInformative : 1;
849  
850    /// Whether this declaration is the beginning of a
851    /// nested-name-specifier and, therefore, should be followed by '::'.
852    bool StartsNestedNameSpecifier : 1;
853  
854    /// Whether all parameters (of a function, Objective-C
855    /// method, etc.) should be considered "informative".
856    bool AllParametersAreInformative : 1;
857  
858    /// Whether we're completing a declaration of the given entity,
859    /// rather than a use of that entity.
860    bool DeclaringEntity : 1;
861  
862    /// When completing a function, whether it can be a call. This will usually be
863    /// true, but we have some heuristics, e.g. when a pointer to a non-static
864    /// member function is completed outside of that class' scope, it can never
865    /// be a call.
866    bool FunctionCanBeCall : 1;
867  
868    /// If the result should have a nested-name-specifier, this is it.
869    /// When \c QualifierIsInformative, the nested-name-specifier is
870    /// informative rather than required.
871    NestedNameSpecifier *Qualifier = nullptr;
872  
873    /// If this Decl was unshadowed by using declaration, this can store a
874    /// pointer to the UsingShadowDecl which was used in the unshadowing process.
875    /// This information can be used to uprank CodeCompletionResults / which have
876    /// corresponding `using decl::qualified::name;` nearby.
877    const UsingShadowDecl *ShadowDecl = nullptr;
878  
879    /// If the result is RK_Macro, this can store the information about the macro
880    /// definition. This should be set in most cases but can be missing when
881    /// the macro has been undefined.
882    const MacroInfo *MacroDefInfo = nullptr;
883  
884    /// Build a result that refers to a declaration.
885    CodeCompletionResult(const NamedDecl *Declaration, unsigned Priority,
886                         NestedNameSpecifier *Qualifier = nullptr,
887                         bool QualifierIsInformative = false,
888                         bool Accessible = true,
889                         std::vector<FixItHint> FixIts = std::vector<FixItHint>())
Declaration(Declaration)890        : Declaration(Declaration), Priority(Priority), Kind(RK_Declaration),
891          FixIts(std::move(FixIts)), Hidden(false), InBaseClass(false),
892          QualifierIsInformative(QualifierIsInformative),
893          StartsNestedNameSpecifier(false), AllParametersAreInformative(false),
894          DeclaringEntity(false), FunctionCanBeCall(true), Qualifier(Qualifier) {
895      // FIXME: Add assert to check FixIts range requirements.
896      computeCursorKindAndAvailability(Accessible);
897    }
898  
899    /// Build a result that refers to a keyword or symbol.
900    CodeCompletionResult(const char *Keyword, unsigned Priority = CCP_Keyword)
Keyword(Keyword)901        : Keyword(Keyword), Priority(Priority), Kind(RK_Keyword),
902          CursorKind(CXCursor_NotImplemented), Hidden(false), InBaseClass(false),
903          QualifierIsInformative(false), StartsNestedNameSpecifier(false),
904          AllParametersAreInformative(false), DeclaringEntity(false),
905          FunctionCanBeCall(true) {}
906  
907    /// Build a result that refers to a macro.
908    CodeCompletionResult(const IdentifierInfo *Macro,
909                         const MacroInfo *MI = nullptr,
910                         unsigned Priority = CCP_Macro)
Macro(Macro)911        : Macro(Macro), Priority(Priority), Kind(RK_Macro),
912          CursorKind(CXCursor_MacroDefinition), Hidden(false), InBaseClass(false),
913          QualifierIsInformative(false), StartsNestedNameSpecifier(false),
914          AllParametersAreInformative(false), DeclaringEntity(false),
915          FunctionCanBeCall(true), MacroDefInfo(MI) {}
916  
917    /// Build a result that refers to a pattern.
918    CodeCompletionResult(
919        CodeCompletionString *Pattern, unsigned Priority = CCP_CodePattern,
920        CXCursorKind CursorKind = CXCursor_NotImplemented,
921        CXAvailabilityKind Availability = CXAvailability_Available,
922        const NamedDecl *D = nullptr)
Declaration(D)923        : Declaration(D), Pattern(Pattern), Priority(Priority), Kind(RK_Pattern),
924          CursorKind(CursorKind), Availability(Availability), Hidden(false),
925          InBaseClass(false), QualifierIsInformative(false),
926          StartsNestedNameSpecifier(false), AllParametersAreInformative(false),
927          DeclaringEntity(false), FunctionCanBeCall(true) {}
928  
929    /// Build a result that refers to a pattern with an associated
930    /// declaration.
CodeCompletionResult(CodeCompletionString * Pattern,const NamedDecl * D,unsigned Priority)931    CodeCompletionResult(CodeCompletionString *Pattern, const NamedDecl *D,
932                         unsigned Priority)
933        : Declaration(D), Pattern(Pattern), Priority(Priority), Kind(RK_Pattern),
934          Hidden(false), InBaseClass(false), QualifierIsInformative(false),
935          StartsNestedNameSpecifier(false), AllParametersAreInformative(false),
936          DeclaringEntity(false), FunctionCanBeCall(true) {
937      computeCursorKindAndAvailability();
938    }
939  
940    /// Retrieve the declaration stored in this result. This might be nullptr if
941    /// Kind is RK_Pattern.
getDeclaration()942    const NamedDecl *getDeclaration() const {
943      assert(((Kind == RK_Declaration) || (Kind == RK_Pattern)) &&
944             "Not a declaration or pattern result");
945      return Declaration;
946    }
947  
948    /// Retrieve the keyword stored in this result.
getKeyword()949    const char *getKeyword() const {
950      assert(Kind == RK_Keyword && "Not a keyword result");
951      return Keyword;
952    }
953  
954    /// Create a new code-completion string that describes how to insert
955    /// this result into a program.
956    ///
957    /// \param S The semantic analysis that created the result.
958    ///
959    /// \param Allocator The allocator that will be used to allocate the
960    /// string itself.
961    CodeCompletionString *CreateCodeCompletionString(Sema &S,
962                                           const CodeCompletionContext &CCContext,
963                                             CodeCompletionAllocator &Allocator,
964                                             CodeCompletionTUInfo &CCTUInfo,
965                                             bool IncludeBriefComments);
966    CodeCompletionString *CreateCodeCompletionString(ASTContext &Ctx,
967                                                     Preprocessor &PP,
968                                           const CodeCompletionContext &CCContext,
969                                             CodeCompletionAllocator &Allocator,
970                                             CodeCompletionTUInfo &CCTUInfo,
971                                             bool IncludeBriefComments);
972    /// Creates a new code-completion string for the macro result. Similar to the
973    /// above overloads, except this only requires preprocessor information.
974    /// The result kind must be `RK_Macro`.
975    CodeCompletionString *
976    CreateCodeCompletionStringForMacro(Preprocessor &PP,
977                                       CodeCompletionAllocator &Allocator,
978                                       CodeCompletionTUInfo &CCTUInfo);
979  
980    CodeCompletionString *createCodeCompletionStringForDecl(
981        Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
982        bool IncludeBriefComments, const CodeCompletionContext &CCContext,
983        PrintingPolicy &Policy);
984  
985    CodeCompletionString *createCodeCompletionStringForOverride(
986        Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
987        bool IncludeBriefComments, const CodeCompletionContext &CCContext,
988        PrintingPolicy &Policy);
989  
990    /// Retrieve the name that should be used to order a result.
991    ///
992    /// If the name needs to be constructed as a string, that string will be
993    /// saved into Saved and the returned StringRef will refer to it.
994    StringRef getOrderedName(std::string &Saved) const;
995  
996  private:
997    void computeCursorKindAndAvailability(bool Accessible = true);
998  };
999  
1000  bool operator<(const CodeCompletionResult &X, const CodeCompletionResult &Y);
1001  
1002  inline bool operator>(const CodeCompletionResult &X,
1003                        const CodeCompletionResult &Y) {
1004    return Y < X;
1005  }
1006  
1007  inline bool operator<=(const CodeCompletionResult &X,
1008                        const CodeCompletionResult &Y) {
1009    return !(Y < X);
1010  }
1011  
1012  inline bool operator>=(const CodeCompletionResult &X,
1013                         const CodeCompletionResult &Y) {
1014    return !(X < Y);
1015  }
1016  
1017  /// Abstract interface for a consumer of code-completion
1018  /// information.
1019  class CodeCompleteConsumer {
1020  protected:
1021    const CodeCompleteOptions CodeCompleteOpts;
1022  
1023  public:
1024    class OverloadCandidate {
1025    public:
1026      /// Describes the type of overload candidate.
1027      enum CandidateKind {
1028        /// The candidate is a function declaration.
1029        CK_Function,
1030  
1031        /// The candidate is a function template, arguments are being completed.
1032        CK_FunctionTemplate,
1033  
1034        /// The "candidate" is actually a variable, expression, or block
1035        /// for which we only have a function prototype.
1036        CK_FunctionType,
1037  
1038        /// The candidate is a variable or expression of function type
1039        /// for which we have the location of the prototype declaration.
1040        CK_FunctionProtoTypeLoc,
1041  
1042        /// The candidate is a template, template arguments are being completed.
1043        CK_Template,
1044  
1045        /// The candidate is aggregate initialization of a record type.
1046        CK_Aggregate,
1047      };
1048  
1049    private:
1050      /// The kind of overload candidate.
1051      CandidateKind Kind;
1052  
1053      union {
1054        /// The function overload candidate, available when
1055        /// Kind == CK_Function.
1056        FunctionDecl *Function;
1057  
1058        /// The function template overload candidate, available when
1059        /// Kind == CK_FunctionTemplate.
1060        FunctionTemplateDecl *FunctionTemplate;
1061  
1062        /// The function type that describes the entity being called,
1063        /// when Kind == CK_FunctionType.
1064        const FunctionType *Type;
1065  
1066        /// The location of the function prototype that describes the entity being
1067        /// called, when Kind == CK_FunctionProtoTypeLoc.
1068        FunctionProtoTypeLoc ProtoTypeLoc;
1069  
1070        /// The template overload candidate, available when
1071        /// Kind == CK_Template.
1072        const TemplateDecl *Template;
1073  
1074        /// The class being aggregate-initialized,
1075        /// when Kind == CK_Aggregate
1076        const RecordDecl *AggregateType;
1077      };
1078  
1079    public:
OverloadCandidate(FunctionDecl * Function)1080      OverloadCandidate(FunctionDecl *Function)
1081          : Kind(CK_Function), Function(Function) {
1082        assert(Function != nullptr);
1083      }
1084  
OverloadCandidate(FunctionTemplateDecl * FunctionTemplateDecl)1085      OverloadCandidate(FunctionTemplateDecl *FunctionTemplateDecl)
1086          : Kind(CK_FunctionTemplate), FunctionTemplate(FunctionTemplateDecl) {
1087        assert(FunctionTemplateDecl != nullptr);
1088      }
1089  
OverloadCandidate(const FunctionType * Type)1090      OverloadCandidate(const FunctionType *Type)
1091          : Kind(CK_FunctionType), Type(Type) {
1092        assert(Type != nullptr);
1093      }
1094  
OverloadCandidate(FunctionProtoTypeLoc Prototype)1095      OverloadCandidate(FunctionProtoTypeLoc Prototype)
1096          : Kind(CK_FunctionProtoTypeLoc), ProtoTypeLoc(Prototype) {
1097        assert(!Prototype.isNull());
1098      }
1099  
OverloadCandidate(const RecordDecl * Aggregate)1100      OverloadCandidate(const RecordDecl *Aggregate)
1101          : Kind(CK_Aggregate), AggregateType(Aggregate) {
1102        assert(Aggregate != nullptr);
1103      }
1104  
OverloadCandidate(const TemplateDecl * Template)1105      OverloadCandidate(const TemplateDecl *Template)
1106          : Kind(CK_Template), Template(Template) {}
1107  
1108      /// Determine the kind of overload candidate.
getKind()1109      CandidateKind getKind() const { return Kind; }
1110  
1111      /// Retrieve the function overload candidate or the templated
1112      /// function declaration for a function template.
1113      FunctionDecl *getFunction() const;
1114  
1115      /// Retrieve the function template overload candidate.
getFunctionTemplate()1116      FunctionTemplateDecl *getFunctionTemplate() const {
1117        assert(getKind() == CK_FunctionTemplate && "Not a function template");
1118        return FunctionTemplate;
1119      }
1120  
1121      /// Retrieve the function type of the entity, regardless of how the
1122      /// function is stored.
1123      const FunctionType *getFunctionType() const;
1124  
1125      /// Retrieve the function ProtoTypeLoc candidate.
1126      /// This can be called for any Kind, but returns null for kinds
1127      /// other than CK_FunctionProtoTypeLoc.
1128      const FunctionProtoTypeLoc getFunctionProtoTypeLoc() const;
1129  
getTemplate()1130      const TemplateDecl *getTemplate() const {
1131        assert(getKind() == CK_Template && "Not a template");
1132        return Template;
1133      }
1134  
1135      /// Retrieve the aggregate type being initialized.
getAggregate()1136      const RecordDecl *getAggregate() const {
1137        assert(getKind() == CK_Aggregate);
1138        return AggregateType;
1139      }
1140  
1141      /// Get the number of parameters in this signature.
1142      unsigned getNumParams() const;
1143  
1144      /// Get the type of the Nth parameter.
1145      /// Returns null if the type is unknown or N is out of range.
1146      QualType getParamType(unsigned N) const;
1147  
1148      /// Get the declaration of the Nth parameter.
1149      /// Returns null if the decl is unknown or N is out of range.
1150      const NamedDecl *getParamDecl(unsigned N) const;
1151  
1152      /// Create a new code-completion string that describes the function
1153      /// signature of this overload candidate.
1154      CodeCompletionString *
1155      CreateSignatureString(unsigned CurrentArg, Sema &S,
1156                            CodeCompletionAllocator &Allocator,
1157                            CodeCompletionTUInfo &CCTUInfo,
1158                            bool IncludeBriefComments, bool Braced) const;
1159    };
1160  
CodeCompleteConsumer(const CodeCompleteOptions & CodeCompleteOpts)1161    CodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts)
1162        : CodeCompleteOpts(CodeCompleteOpts) {}
1163  
1164    /// Whether the code-completion consumer wants to see macros.
includeMacros()1165    bool includeMacros() const {
1166      return CodeCompleteOpts.IncludeMacros;
1167    }
1168  
1169    /// Whether the code-completion consumer wants to see code patterns.
includeCodePatterns()1170    bool includeCodePatterns() const {
1171      return CodeCompleteOpts.IncludeCodePatterns;
1172    }
1173  
1174    /// Whether to include global (top-level) declaration results.
includeGlobals()1175    bool includeGlobals() const { return CodeCompleteOpts.IncludeGlobals; }
1176  
1177    /// Whether to include declarations in namespace contexts (including
1178    /// the global namespace). If this is false, `includeGlobals()` will be
1179    /// ignored.
includeNamespaceLevelDecls()1180    bool includeNamespaceLevelDecls() const {
1181      return CodeCompleteOpts.IncludeNamespaceLevelDecls;
1182    }
1183  
1184    /// Whether to include brief documentation comments within the set of
1185    /// code completions returned.
includeBriefComments()1186    bool includeBriefComments() const {
1187      return CodeCompleteOpts.IncludeBriefComments;
1188    }
1189  
1190    /// Whether to include completion items with small fix-its, e.g. change
1191    /// '.' to '->' on member access, etc.
includeFixIts()1192    bool includeFixIts() const { return CodeCompleteOpts.IncludeFixIts; }
1193  
1194    /// Hint whether to load data from the external AST in order to provide
1195    /// full results. If false, declarations from the preamble may be omitted.
loadExternal()1196    bool loadExternal() const {
1197      return CodeCompleteOpts.LoadExternal;
1198    }
1199  
1200    /// Deregisters and destroys this code-completion consumer.
1201    virtual ~CodeCompleteConsumer();
1202  
1203    /// \name Code-completion filtering
1204    /// Check if the result should be filtered out.
isResultFilteredOut(StringRef Filter,CodeCompletionResult Results)1205    virtual bool isResultFilteredOut(StringRef Filter,
1206                                     CodeCompletionResult Results) {
1207      return false;
1208    }
1209  
1210    /// \name Code-completion callbacks
1211    //@{
1212    /// Process the finalized code-completion results.
ProcessCodeCompleteResults(Sema & S,CodeCompletionContext Context,CodeCompletionResult * Results,unsigned NumResults)1213    virtual void ProcessCodeCompleteResults(Sema &S,
1214                                            CodeCompletionContext Context,
1215                                            CodeCompletionResult *Results,
1216                                            unsigned NumResults) {}
1217  
1218    /// \param S the semantic-analyzer object for which code-completion is being
1219    /// done.
1220    ///
1221    /// \param CurrentArg the index of the current argument.
1222    ///
1223    /// \param Candidates an array of overload candidates.
1224    ///
1225    /// \param NumCandidates the number of overload candidates
1226    ///
1227    /// \param OpenParLoc location of the opening parenthesis of the argument
1228    ///        list.
ProcessOverloadCandidates(Sema & S,unsigned CurrentArg,OverloadCandidate * Candidates,unsigned NumCandidates,SourceLocation OpenParLoc,bool Braced)1229    virtual void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg,
1230                                           OverloadCandidate *Candidates,
1231                                           unsigned NumCandidates,
1232                                           SourceLocation OpenParLoc,
1233                                           bool Braced) {}
1234    //@}
1235  
1236    /// Retrieve the allocator that will be used to allocate
1237    /// code completion strings.
1238    virtual CodeCompletionAllocator &getAllocator() = 0;
1239  
1240    virtual CodeCompletionTUInfo &getCodeCompletionTUInfo() = 0;
1241  };
1242  
1243  /// Get the documentation comment used to produce
1244  /// CodeCompletionString::BriefComment for RK_Declaration.
1245  const RawComment *getCompletionComment(const ASTContext &Ctx,
1246                                         const NamedDecl *Decl);
1247  
1248  /// Get the documentation comment used to produce
1249  /// CodeCompletionString::BriefComment for RK_Pattern.
1250  const RawComment *getPatternCompletionComment(const ASTContext &Ctx,
1251                                                const NamedDecl *Decl);
1252  
1253  /// Get the documentation comment used to produce
1254  /// CodeCompletionString::BriefComment for OverloadCandidate.
1255  const RawComment *
1256  getParameterComment(const ASTContext &Ctx,
1257                      const CodeCompleteConsumer::OverloadCandidate &Result,
1258                      unsigned ArgIndex);
1259  
1260  /// A simple code-completion consumer that prints the results it
1261  /// receives in a simple format.
1262  class PrintingCodeCompleteConsumer : public CodeCompleteConsumer {
1263    /// The raw output stream.
1264    raw_ostream &OS;
1265  
1266    CodeCompletionTUInfo CCTUInfo;
1267  
1268  public:
1269    /// Create a new printing code-completion consumer that prints its
1270    /// results to the given raw output stream.
PrintingCodeCompleteConsumer(const CodeCompleteOptions & CodeCompleteOpts,raw_ostream & OS)1271    PrintingCodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts,
1272                                 raw_ostream &OS)
1273        : CodeCompleteConsumer(CodeCompleteOpts), OS(OS),
1274          CCTUInfo(std::make_shared<GlobalCodeCompletionAllocator>()) {}
1275  
1276    /// Prints the finalized code-completion results.
1277    void ProcessCodeCompleteResults(Sema &S, CodeCompletionContext Context,
1278                                    CodeCompletionResult *Results,
1279                                    unsigned NumResults) override;
1280  
1281    void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg,
1282                                   OverloadCandidate *Candidates,
1283                                   unsigned NumCandidates,
1284                                   SourceLocation OpenParLoc,
1285                                   bool Braced) override;
1286  
1287    bool isResultFilteredOut(StringRef Filter, CodeCompletionResult Results) override;
1288  
getAllocator()1289    CodeCompletionAllocator &getAllocator() override {
1290      return CCTUInfo.getAllocator();
1291    }
1292  
getCodeCompletionTUInfo()1293    CodeCompletionTUInfo &getCodeCompletionTUInfo() override { return CCTUInfo; }
1294  };
1295  
1296  } // namespace clang
1297  
1298  #endif // LLVM_CLANG_SEMA_CODECOMPLETECONSUMER_H
1299