clang 20.0.0git
CodeCompleteConsumer.h
Go to the documentation of this file.
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"
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
35namespace clang {
36
37class ASTContext;
38class Decl;
39class DeclContext;
40class FunctionDecl;
41class FunctionTemplateDecl;
42class IdentifierInfo;
43class LangOptions;
44class NamedDecl;
45class NestedNameSpecifier;
46class Preprocessor;
47class RawComment;
48class Sema;
49class UsingShadowDecl;
50
51/// Default priority values for code-completion results based
52/// on their kind.
53enum {
54 /// Priority for the next initialization in a constructor initializer
55 /// list.
57
58 /// Priority for an enumeration constant inside a switch whose
59 /// condition is of the enumeration type.
61
62 /// Priority for a send-to-super completion.
64
65 /// Priority for a declaration that is in the local scope.
67
68 /// Priority for a member declaration found from the current
69 /// method or member function.
71
72 /// Priority for a language keyword (that isn't any of the other
73 /// categories).
75
76 /// Priority for a code pattern.
78
79 /// Priority for a non-type declaration.
81
82 /// Priority for a type.
84
85 /// Priority for a constant value (e.g., enumerator).
87
88 /// Priority for a preprocessor macro.
90
91 /// Priority for a nested-name-specifier.
93
94 /// Priority for a result that isn't likely to be what the user wants,
95 /// but is included for completeness.
97
98 /// Priority for the Objective-C "_cmd" implicit parameter.
101
102/// Priority value deltas that are added to code-completion results
103/// based on the context of the result.
104enum {
105 /// The result is in a base class.
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.
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.
116
117 /// Adjustment to the "bool" type in Objective-C, where the typedef
118 /// "BOOL" is preferred.
120
121 /// Adjustment for KVC code pattern priorities when it doesn't look
122 /// like the
124
125 /// An Objective-C method being used as a property.
127
128 /// An Objective-C block property completed as a setter with a
129 /// block placeholder.
132
133/// Priority value factors by which we will divide or multiply the
134/// priority of a code-completion result.
135enum {
136 /// Divide by this factor when a code-completion result's type exactly
137 /// matches the type we expect.
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).
145
146/// A simplified classification of types used when determining
147/// "similar" types for code completion.
159
160/// Determine the simplified type class of the given canonical type.
162
163/// Determine the type that this declaration will have if it is used
164/// as a type or in an expression.
165QualType 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.
176unsigned getMacroUsagePriority(StringRef MacroName,
177 const LangOptions &LangOpts,
178 bool PreferredTypeIsPointer = false);
179
180/// Determine the libclang cursor kind associated with the given
181/// declaration.
183
184/// The context in which code completion occurred, so that the
185/// code-completion consumer can process the results accordingly.
187public:
188 enum Kind {
189 /// An unspecified code-completion context.
191
192 /// An unspecified code-completion context where we should also add
193 /// macro completions.
195
196 /// Code completion occurred within a "top-level" completion context,
197 /// e.g., at namespace or global scope.
199
200 /// Code completion occurred within an Objective-C interface,
201 /// protocol, or category interface.
203
204 /// Code completion occurred within an Objective-C implementation
205 /// or category implementation.
207
208 /// Code completion occurred within the instance variable list of
209 /// an Objective-C interface, implementation, or category implementation.
211
212 /// Code completion occurred within a class, struct, or union.
214
215 /// Code completion occurred where a statement (or declaration) is
216 /// expected in a function, method, or block.
218
219 /// Code completion occurred where an expression is expected.
221
222 /// Code completion occurred where an Objective-C message receiver
223 /// is expected.
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().
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().
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().
249
250 /// Code completion occurred after the "enum" keyword, to indicate
251 /// an enumeration name.
253
254 /// Code completion occurred after the "union" keyword, to indicate
255 /// a union name.
257
258 /// Code completion occurred after the "struct" or "class" keyword,
259 /// to indicate a struct or class name.
261
262 /// Code completion occurred where a protocol name is expected.
264
265 /// Code completion occurred where a namespace or namespace alias
266 /// is expected.
268
269 /// Code completion occurred where a type name is expected.
271
272 /// Code completion occurred where a new name is expected.
274
275 /// Code completion occurred where both a new name and an existing symbol is
276 /// permissible.
278
279 /// Code completion occurred where an existing name(such as type, function
280 /// or variable) is expected.
282
283 /// Code completion occurred where an macro is being defined.
285
286 /// Code completion occurred where a macro name is expected
287 /// (without any arguments, in the case of a function-like macro).
289
290 /// Code completion occurred within a preprocessor expression.
292
293 /// Code completion occurred where a preprocessor directive is
294 /// expected.
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.
303
304 /// Code completion for a selector, as in an \@selector expression.
306
307 /// Code completion within a type-qualifier list.
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++).
313
314 /// Code completion where an Objective-C instance message is
315 /// expected.
317
318 /// Code completion where an Objective-C class message is expected.
320
321 /// Code completion where the name of an Objective-C class is
322 /// expected.
324
325 /// Code completion where an Objective-C category name is expected.
327
328 /// Code completion inside the filename part of a #include directive.
330
331 /// Code completion of an attribute name.
333
334 /// An unknown context, in which we are recovering from a parsing
335 /// error and don't know which completions we should give.
337
338 /// Code completion in a @class forward declaration.
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.
345 };
346
348
349private:
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.
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
375public:
376 /// Construct a new code-completion context of the given kind.
378 : CCKind(CCKind), IsUsingDeclaration(false), SelIdents() {}
379
380 /// Construct a new code-completion context of the given kind.
383 : CCKind(CCKind), IsUsingDeclaration(false), SelIdents(SelIdents) {
384 if (CCKind == CCC_DotMemberAccess || CCKind == CCC_ArrowMemberAccess ||
385 CCKind == CCC_ObjCPropertyAccess || CCKind == CCC_ObjCClassMessage ||
386 CCKind == CCC_ObjCInstanceMessage)
387 BaseType = T;
388 else
389 PreferredType = T;
390 }
391
392 bool isUsingDeclaration() const { return IsUsingDeclaration; }
393 void setIsUsingDeclaration(bool V) { IsUsingDeclaration = V; }
394
395 /// Retrieve the kind of code-completion context.
396 Kind getKind() const { return CCKind; }
397
398 /// Retrieve the type that this expression would prefer to have, e.g.,
399 /// if the expression is a variable initializer or a function argument, the
400 /// type of the corresponding variable or function parameter.
401 QualType getPreferredType() const { return PreferredType; }
402 void setPreferredType(QualType T) { PreferredType = T; }
403
404 /// Retrieve the type of the base object in a member-access
405 /// expression.
406 QualType getBaseType() const { return BaseType; }
407
408 /// Retrieve the Objective-C selector identifiers.
409 ArrayRef<const IdentifierInfo *> getSelIdents() const { return SelIdents; }
410
411 /// Determines whether we want C++ constructors as results within this
412 /// context.
413 bool wantConstructorResults() const;
414
415 /// Sets the scope specifier that comes before the completion token.
416 /// This is expected to be set in code completions on qualfied specifiers
417 /// (e.g. "a::b::").
419 this->ScopeSpecifier = std::move(SS);
420 }
421
422 /// Adds a visited context.
424 VisitedContexts.insert(Ctx);
425 }
426
427 /// Retrieves all visited contexts.
429 return VisitedContexts;
430 }
431
432 std::optional<const CXXScopeSpec *> getCXXScopeSpecifier() {
433 if (ScopeSpecifier)
434 return &*ScopeSpecifier;
435 return std::nullopt;
436 }
437};
438
439/// Get string representation of \p Kind, useful for debugging.
441
442/// A "string" used to describe how code completion can
443/// be performed for an entity.
444///
445/// A code completion string typically shows how a particular entity can be
446/// used. For example, the code completion string for a function would show
447/// the syntax to call it, including the parentheses, placeholders for the
448/// arguments, etc.
450public:
451 /// The different kinds of "chunks" that can occur within a code
452 /// completion string.
454 /// The piece of text that the user is expected to type to
455 /// match the code-completion string, typically a keyword or the name of a
456 /// declarator or macro.
458
459 /// A piece of text that should be placed in the buffer, e.g.,
460 /// parentheses or a comma in a function call.
462
463 /// A code completion string that is entirely optional. For example,
464 /// an optional code completion string that describes the default arguments
465 /// in a function call.
467
468 /// A string that acts as a placeholder for, e.g., a function
469 /// call argument.
471
472 /// A piece of text that describes something about the result but
473 /// should not be inserted into the buffer.
475 /// A piece of text that describes the type of an entity or, for
476 /// functions and methods, the return type.
478
479 /// A piece of text that describes the parameter that corresponds
480 /// to the code-completion location within a function call, message send,
481 /// macro invocation, etc.
483
484 /// A left parenthesis ('(').
486
487 /// A right parenthesis (')').
489
490 /// A left bracket ('[').
492
493 /// A right bracket (']').
495
496 /// A left brace ('{').
498
499 /// A right brace ('}').
501
502 /// A left angle bracket ('<').
504
505 /// A right angle bracket ('>').
507
508 /// A comma separator (',').
510
511 /// A colon (':').
513
514 /// A semicolon (';').
516
517 /// An '=' sign.
519
520 /// Horizontal whitespace (' ').
522
523 /// Vertical whitespace ('\\n' or '\\r\\n', depending on the
524 /// platform).
526 };
527
528 /// One piece of the code completion string.
529 struct Chunk {
530 /// The kind of data stored in this piece of the code completion
531 /// string.
533
534 union {
535 /// The text string associated with a CK_Text, CK_Placeholder,
536 /// CK_Informative, or CK_Comma chunk.
537 /// The string is owned by the chunk and will be deallocated
538 /// (with delete[]) when the chunk is destroyed.
539 const char *Text;
540
541 /// The code completion string associated with a CK_Optional chunk.
542 /// The optional code completion string is owned by the chunk, and will
543 /// be deallocated (with delete) when the chunk is destroyed.
545 };
546
547 Chunk() : Text(nullptr) {}
548
549 explicit Chunk(ChunkKind Kind, const char *Text = "");
550
551 /// Create a new text chunk.
552 static Chunk CreateText(const char *Text);
553
554 /// Create a new optional chunk.
556
557 /// Create a new placeholder chunk.
558 static Chunk CreatePlaceholder(const char *Placeholder);
559
560 /// Create a new informative chunk.
561 static Chunk CreateInformative(const char *Informative);
562
563 /// Create a new result type chunk.
564 static Chunk CreateResultType(const char *ResultType);
565
566 /// Create a new current-parameter chunk.
567 static Chunk CreateCurrentParameter(const char *CurrentParameter);
568 };
569
570private:
573
574 /// The number of chunks stored in this string.
575 unsigned NumChunks : 16;
576
577 /// The number of annotations for this code-completion result.
578 unsigned NumAnnotations : 16;
579
580 /// The priority of this code-completion string.
581 unsigned Priority : 16;
582
583 /// The availability of this code-completion result.
584 LLVM_PREFERRED_TYPE(CXAvailabilityKind)
585 unsigned Availability : 2;
586
587 /// The name of the parent context.
588 StringRef ParentName;
589
590 /// A brief documentation comment attached to the declaration of
591 /// entity being completed by this result.
592 const char *BriefComment;
593
594 CodeCompletionString(const Chunk *Chunks, unsigned NumChunks,
595 unsigned Priority, CXAvailabilityKind Availability,
596 const char **Annotations, unsigned NumAnnotations,
597 StringRef ParentName,
598 const char *BriefComment);
599 ~CodeCompletionString() = default;
600
601public:
604
605 using iterator = const Chunk *;
606
607 iterator begin() const { return reinterpret_cast<const Chunk *>(this + 1); }
608 iterator end() const { return begin() + NumChunks; }
609 bool empty() const { return NumChunks == 0; }
610 unsigned size() const { return NumChunks; }
611
612 const Chunk &operator[](unsigned I) const {
613 assert(I < size() && "Chunk index out-of-range");
614 return begin()[I];
615 }
616
617 /// Returns the text in the first TypedText chunk.
618 const char *getTypedText() const;
619
620 /// Returns the combined text from all TypedText chunks.
621 std::string getAllTypedText() const;
622
623 /// Retrieve the priority of this code completion result.
624 unsigned getPriority() const { return Priority; }
625
626 /// Retrieve the availability of this code completion result.
627 unsigned getAvailability() const { return Availability; }
628
629 /// Retrieve the number of annotations for this code completion result.
630 unsigned getAnnotationCount() const;
631
632 /// Retrieve the annotation string specified by \c AnnotationNr.
633 const char *getAnnotation(unsigned AnnotationNr) const;
634
635 /// Retrieve the name of the parent context.
636 StringRef getParentContextName() const {
637 return ParentName;
638 }
639
640 const char *getBriefComment() const {
641 return BriefComment;
642 }
643
644 /// Retrieve a string representation of the code completion string,
645 /// which is mainly useful for debugging.
646 std::string getAsString() const;
647};
648
649/// An allocator used specifically for the purpose of code completion.
650class CodeCompletionAllocator : public llvm::BumpPtrAllocator {
651public:
652 /// Copy the given string into this allocator.
653 const char *CopyString(const Twine &String);
654};
655
656/// Allocator for a cached set of global code completions.
658
660 llvm::DenseMap<const DeclContext *, StringRef> ParentNames;
661 std::shared_ptr<GlobalCodeCompletionAllocator> AllocatorRef;
662
663public:
665 std::shared_ptr<GlobalCodeCompletionAllocator> Allocator)
666 : AllocatorRef(std::move(Allocator)) {}
667
668 std::shared_ptr<GlobalCodeCompletionAllocator> getAllocatorRef() const {
669 return AllocatorRef;
670 }
671
673 assert(AllocatorRef);
674 return *AllocatorRef;
675 }
676
677 StringRef getParentName(const DeclContext *DC);
678};
679
680} // namespace clang
681
682namespace clang {
683
684/// A builder class used to construct new code-completion strings.
686public:
688
689private:
690 CodeCompletionAllocator &Allocator;
691 CodeCompletionTUInfo &CCTUInfo;
692 unsigned Priority = 0;
694 StringRef ParentName;
695 const char *BriefComment = nullptr;
696
697 /// The chunks stored in this string.
699
701
702public:
704 CodeCompletionTUInfo &CCTUInfo)
705 : Allocator(Allocator), CCTUInfo(CCTUInfo) {}
706
708 CodeCompletionTUInfo &CCTUInfo,
709 unsigned Priority, CXAvailabilityKind Availability)
710 : Allocator(Allocator), CCTUInfo(CCTUInfo), Priority(Priority),
711 Availability(Availability) {}
712
713 /// Retrieve the allocator into which the code completion
714 /// strings should be allocated.
715 CodeCompletionAllocator &getAllocator() const { return Allocator; }
716
717 CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
718
719 /// Take the resulting completion string.
720 ///
721 /// This operation can only be performed once.
723
724 /// Add a new typed-text chunk.
725 void AddTypedTextChunk(const char *Text);
726
727 /// Add a new text chunk.
728 void AddTextChunk(const char *Text);
729
730 /// Add a new optional chunk.
732
733 /// Add a new placeholder chunk.
734 void AddPlaceholderChunk(const char *Placeholder);
735
736 /// Add a new informative chunk.
737 void AddInformativeChunk(const char *Text);
738
739 /// Add a new result-type chunk.
740 void AddResultTypeChunk(const char *ResultType);
741
742 /// Add a new current-parameter chunk.
743 void AddCurrentParameterChunk(const char *CurrentParameter);
744
745 /// Add a new chunk.
746 void AddChunk(CodeCompletionString::ChunkKind CK, const char *Text = "");
747
748 void AddAnnotation(const char *A) { Annotations.push_back(A); }
749
750 /// Add the parent context information to this code completion.
751 void addParentContext(const DeclContext *DC);
752
753 const char *getBriefComment() const { return BriefComment; }
754 void addBriefComment(StringRef Comment);
755
756 StringRef getParentName() const { return ParentName; }
757};
758
759/// Captures a result of code completion.
761public:
762 /// Describes the kind of result generated.
764 /// Refers to a declaration.
766
767 /// Refers to a keyword or symbol.
769
770 /// Refers to a macro.
772
773 /// Refers to a precomputed pattern.
775 };
776
777 /// When Kind == RK_Declaration or RK_Pattern, the declaration we are
778 /// referring to. In the latter case, the declaration might be NULL.
779 const NamedDecl *Declaration = nullptr;
780
781 union {
782 /// When Kind == RK_Keyword, the string representing the keyword
783 /// or symbol's spelling.
784 const char *Keyword;
785
786 /// When Kind == RK_Pattern, the code-completion string that
787 /// describes the completion text to insert.
789
790 /// When Kind == RK_Macro, the identifier that refers to a macro.
792 };
793
794 /// The priority of this particular code-completion result.
795 unsigned Priority;
796
797 /// Specifies which parameter (of a function, Objective-C method,
798 /// macro, etc.) we should start with when formatting the result.
799 unsigned StartParameter = 0;
800
801 /// The kind of result stored here.
803
804 /// The cursor kind that describes this result.
806
807 /// The availability of this result.
809
810 /// Fix-its that *must* be applied before inserting the text for the
811 /// corresponding completion.
812 ///
813 /// By default, CodeCompletionBuilder only returns completions with empty
814 /// fix-its. Extra completions with non-empty fix-its should be explicitly
815 /// requested by setting CompletionOptions::IncludeFixIts.
816 ///
817 /// For the clients to be able to compute position of the cursor after
818 /// applying fix-its, the following conditions are guaranteed to hold for
819 /// RemoveRange of the stored fix-its:
820 /// - Ranges in the fix-its are guaranteed to never contain the completion
821 /// point (or identifier under completion point, if any) inside them, except
822 /// at the start or at the end of the range.
823 /// - If a fix-it range starts or ends with completion point (or starts or
824 /// ends after the identifier under completion point), it will contain at
825 /// least one character. It allows to unambiguously recompute completion
826 /// point after applying the fix-it.
827 ///
828 /// The intuition is that provided fix-its change code around the identifier
829 /// we complete, but are not allowed to touch the identifier itself or the
830 /// completion point. One example of completions with corrections are the ones
831 /// replacing '.' with '->' and vice versa:
832 ///
833 /// std::unique_ptr<std::vector<int>> vec_ptr;
834 /// In 'vec_ptr.^', one of the completions is 'push_back', it requires
835 /// replacing '.' with '->'.
836 /// In 'vec_ptr->^', one of the completions is 'release', it requires
837 /// replacing '->' with '.'.
838 std::vector<FixItHint> FixIts;
839
840 /// Whether this result is hidden by another name.
841 bool Hidden : 1;
842
843 /// Whether this is a class member from base class.
844 bool InBaseClass : 1;
845
846 /// Whether this result was found via lookup into a base class.
848
849 /// Whether this declaration is the beginning of a
850 /// nested-name-specifier and, therefore, should be followed by '::'.
852
853 /// Whether all parameters (of a function, Objective-C
854 /// method, etc.) should be considered "informative".
856
857 /// Whether we're completing a declaration of the given entity,
858 /// rather than a use of that entity.
860
861 /// When completing a function, whether it can be a call. This will usually be
862 /// true, but we have some heuristics, e.g. when a pointer to a non-static
863 /// member function is completed outside of that class' scope, it can never
864 /// be a call.
866
867 /// If the result should have a nested-name-specifier, this is it.
868 /// When \c QualifierIsInformative, the nested-name-specifier is
869 /// informative rather than required.
871
872 /// If this Decl was unshadowed by using declaration, this can store a
873 /// pointer to the UsingShadowDecl which was used in the unshadowing process.
874 /// This information can be used to uprank CodeCompletionResults / which have
875 /// corresponding `using decl::qualified::name;` nearby.
876 const UsingShadowDecl *ShadowDecl = nullptr;
877
878 /// If the result is RK_Macro, this can store the information about the macro
879 /// definition. This should be set in most cases but can be missing when
880 /// the macro has been undefined.
881 const MacroInfo *MacroDefInfo = nullptr;
882
883 /// Build a result that refers to a declaration.
886 bool QualifierIsInformative = false,
887 bool Accessible = true,
888 std::vector<FixItHint> FixIts = std::vector<FixItHint>())
894 // FIXME: Add assert to check FixIts range requirements.
895 computeCursorKindAndAvailability(Accessible);
896 }
897
898 /// Build a result that refers to a keyword or symbol.
905
906 /// Build a result that refers to a macro.
908 const MacroInfo *MI = nullptr,
909 unsigned Priority = CCP_Macro)
915
916 /// Build a result that refers to a pattern.
921 const NamedDecl *D = nullptr)
927
928 /// Build a result that refers to a pattern with an associated
929 /// declaration.
931 unsigned Priority)
936 computeCursorKindAndAvailability();
937 }
938
939 /// Retrieve the declaration stored in this result. This might be nullptr if
940 /// Kind is RK_Pattern.
941 const NamedDecl *getDeclaration() const {
942 assert(((Kind == RK_Declaration) || (Kind == RK_Pattern)) &&
943 "Not a declaration or pattern result");
944 return Declaration;
945 }
946
947 /// Retrieve the keyword stored in this result.
948 const char *getKeyword() const {
949 assert(Kind == RK_Keyword && "Not a keyword result");
950 return Keyword;
951 }
952
953 /// Create a new code-completion string that describes how to insert
954 /// this result into a program.
955 ///
956 /// \param S The semantic analysis that created the result.
957 ///
958 /// \param Allocator The allocator that will be used to allocate the
959 /// string itself.
961 const CodeCompletionContext &CCContext,
962 CodeCompletionAllocator &Allocator,
963 CodeCompletionTUInfo &CCTUInfo,
964 bool IncludeBriefComments);
966 Preprocessor &PP,
967 const CodeCompletionContext &CCContext,
968 CodeCompletionAllocator &Allocator,
969 CodeCompletionTUInfo &CCTUInfo,
970 bool IncludeBriefComments);
971 /// Creates a new code-completion string for the macro result. Similar to the
972 /// above overloads, except this only requires preprocessor information.
973 /// The result kind must be `RK_Macro`.
976 CodeCompletionAllocator &Allocator,
977 CodeCompletionTUInfo &CCTUInfo);
978
981 bool IncludeBriefComments, const CodeCompletionContext &CCContext,
982 PrintingPolicy &Policy);
983
986 bool IncludeBriefComments, const CodeCompletionContext &CCContext,
987 PrintingPolicy &Policy);
988
989 /// Retrieve the name that should be used to order a result.
990 ///
991 /// If the name needs to be constructed as a string, that string will be
992 /// saved into Saved and the returned StringRef will refer to it.
993 StringRef getOrderedName(std::string &Saved) const;
994
995private:
996 void computeCursorKindAndAvailability(bool Accessible = true);
997};
998
999bool operator<(const CodeCompletionResult &X, const CodeCompletionResult &Y);
1000
1002 const CodeCompletionResult &Y) {
1003 return Y < X;
1004}
1005
1007 const CodeCompletionResult &Y) {
1008 return !(Y < X);
1009}
1010
1012 const CodeCompletionResult &Y) {
1013 return !(X < Y);
1014}
1015
1016/// Abstract interface for a consumer of code-completion
1017/// information.
1019protected:
1021
1022public:
1024 public:
1025 /// Describes the type of overload candidate.
1027 /// The candidate is a function declaration.
1029
1030 /// The candidate is a function template, arguments are being completed.
1032
1033 /// The "candidate" is actually a variable, expression, or block
1034 /// for which we only have a function prototype.
1036
1037 /// The candidate is a variable or expression of function type
1038 /// for which we have the location of the prototype declaration.
1040
1041 /// The candidate is a template, template arguments are being completed.
1043
1044 /// The candidate is aggregate initialization of a record type.
1046 };
1047
1048 private:
1049 /// The kind of overload candidate.
1050 CandidateKind Kind;
1051
1052 union {
1053 /// The function overload candidate, available when
1054 /// Kind == CK_Function.
1056
1057 /// The function template overload candidate, available when
1058 /// Kind == CK_FunctionTemplate.
1060
1061 /// The function type that describes the entity being called,
1062 /// when Kind == CK_FunctionType.
1064
1065 /// The location of the function prototype that describes the entity being
1066 /// called, when Kind == CK_FunctionProtoTypeLoc.
1068
1069 /// The template overload candidate, available when
1070 /// Kind == CK_Template.
1072
1073 /// The class being aggregate-initialized,
1074 /// when Kind == CK_Aggregate
1076 };
1077
1078 public:
1080 : Kind(CK_Function), Function(Function) {
1081 assert(Function != nullptr);
1082 }
1083
1086 assert(FunctionTemplateDecl != nullptr);
1087 }
1088
1090 : Kind(CK_FunctionType), Type(Type) {
1091 assert(Type != nullptr);
1092 }
1093
1096 assert(!Prototype.isNull());
1097 }
1098
1101 assert(Aggregate != nullptr);
1102 }
1103
1105 : Kind(CK_Template), Template(Template) {}
1106
1107 /// Determine the kind of overload candidate.
1108 CandidateKind getKind() const { return Kind; }
1109
1110 /// Retrieve the function overload candidate or the templated
1111 /// function declaration for a function template.
1112 FunctionDecl *getFunction() const;
1113
1114 /// Retrieve the function template overload candidate.
1116 assert(getKind() == CK_FunctionTemplate && "Not a function template");
1117 return FunctionTemplate;
1118 }
1119
1120 /// Retrieve the function type of the entity, regardless of how the
1121 /// function is stored.
1122 const FunctionType *getFunctionType() const;
1123
1124 /// Retrieve the function ProtoTypeLoc candidate.
1125 /// This can be called for any Kind, but returns null for kinds
1126 /// other than CK_FunctionProtoTypeLoc.
1128
1129 const TemplateDecl *getTemplate() const {
1130 assert(getKind() == CK_Template && "Not a template");
1131 return Template;
1132 }
1133
1134 /// Retrieve the aggregate type being initialized.
1135 const RecordDecl *getAggregate() const {
1136 assert(getKind() == CK_Aggregate);
1137 return AggregateType;
1138 }
1139
1140 /// Get the number of parameters in this signature.
1141 unsigned getNumParams() const;
1142
1143 /// Get the type of the Nth parameter.
1144 /// Returns null if the type is unknown or N is out of range.
1145 QualType getParamType(unsigned N) const;
1146
1147 /// Get the declaration of the Nth parameter.
1148 /// Returns null if the decl is unknown or N is out of range.
1149 const NamedDecl *getParamDecl(unsigned N) const;
1150
1151 /// Create a new code-completion string that describes the function
1152 /// signature of this overload candidate.
1154 CreateSignatureString(unsigned CurrentArg, Sema &S,
1155 CodeCompletionAllocator &Allocator,
1156 CodeCompletionTUInfo &CCTUInfo,
1157 bool IncludeBriefComments, bool Braced) const;
1158 };
1159
1162
1163 /// Whether the code-completion consumer wants to see macros.
1164 bool includeMacros() const {
1166 }
1167
1168 /// Whether the code-completion consumer wants to see code patterns.
1169 bool includeCodePatterns() const {
1171 }
1172
1173 /// Whether to include global (top-level) declaration results.
1175
1176 /// Whether to include declarations in namespace contexts (including
1177 /// the global namespace). If this is false, `includeGlobals()` will be
1178 /// ignored.
1181 }
1182
1183 /// Whether to include brief documentation comments within the set of
1184 /// code completions returned.
1187 }
1188
1189 /// Whether to include completion items with small fix-its, e.g. change
1190 /// '.' to '->' on member access, etc.
1192
1193 /// Hint whether to load data from the external AST in order to provide
1194 /// full results. If false, declarations from the preamble may be omitted.
1195 bool loadExternal() const {
1197 }
1198
1199 /// Deregisters and destroys this code-completion consumer.
1201
1202 /// \name Code-completion filtering
1203 /// Check if the result should be filtered out.
1204 virtual bool isResultFilteredOut(StringRef Filter,
1205 CodeCompletionResult Results) {
1206 return false;
1207 }
1208
1209 /// \name Code-completion callbacks
1210 //@{
1211 /// Process the finalized code-completion results.
1213 CodeCompletionContext Context,
1214 CodeCompletionResult *Results,
1215 unsigned NumResults) {}
1216
1217 /// \param S the semantic-analyzer object for which code-completion is being
1218 /// done.
1219 ///
1220 /// \param CurrentArg the index of the current argument.
1221 ///
1222 /// \param Candidates an array of overload candidates.
1223 ///
1224 /// \param NumCandidates the number of overload candidates
1225 ///
1226 /// \param OpenParLoc location of the opening parenthesis of the argument
1227 /// list.
1228 virtual void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg,
1229 OverloadCandidate *Candidates,
1230 unsigned NumCandidates,
1231 SourceLocation OpenParLoc,
1232 bool Braced) {}
1233 //@}
1234
1235 /// Retrieve the allocator that will be used to allocate
1236 /// code completion strings.
1238
1240};
1241
1242/// Get the documentation comment used to produce
1243/// CodeCompletionString::BriefComment for RK_Declaration.
1245 const NamedDecl *Decl);
1246
1247/// Get the documentation comment used to produce
1248/// CodeCompletionString::BriefComment for RK_Pattern.
1250 const NamedDecl *Decl);
1251
1252/// Get the documentation comment used to produce
1253/// CodeCompletionString::BriefComment for OverloadCandidate.
1254const RawComment *
1257 unsigned ArgIndex);
1258
1259/// A simple code-completion consumer that prints the results it
1260/// receives in a simple format.
1262 /// The raw output stream.
1263 raw_ostream &OS;
1264
1265 CodeCompletionTUInfo CCTUInfo;
1266
1267public:
1268 /// Create a new printing code-completion consumer that prints its
1269 /// results to the given raw output stream.
1271 raw_ostream &OS)
1273 CCTUInfo(std::make_shared<GlobalCodeCompletionAllocator>()) {}
1274
1275 /// Prints the finalized code-completion results.
1277 CodeCompletionResult *Results,
1278 unsigned NumResults) override;
1279
1280 void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg,
1281 OverloadCandidate *Candidates,
1282 unsigned NumCandidates,
1283 SourceLocation OpenParLoc,
1284 bool Braced) override;
1285
1286 bool isResultFilteredOut(StringRef Filter, CodeCompletionResult Results) override;
1287
1289 return CCTUInfo.getAllocator();
1290 }
1291
1292 CodeCompletionTUInfo &getCodeCompletionTUInfo() override { return CCTUInfo; }
1293};
1294
1295} // namespace clang
1296
1297#endif // LLVM_CLANG_SEMA_CODECOMPLETECONSUMER_H
#define V(N, I)
Definition: ASTContext.h:3443
const Decl * D
enum clang::sema::@1718::IndirectLocalPathEntry::EntryKind Kind
StringRef Text
Definition: Format.cpp:3033
int Priority
Definition: Format.cpp:3036
#define X(type, name)
Definition: Value.h:144
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::MacroInfo and clang::MacroDirective classes.
C Language Family Type Representation.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:188
Represents a C++ nested-name-specifier or a global scope specifier.
Definition: DeclSpec.h:74
const FunctionType * Type
The function type that describes the entity being called, when Kind == CK_FunctionType.
const RecordDecl * AggregateType
The class being aggregate-initialized, when Kind == CK_Aggregate.
FunctionProtoTypeLoc ProtoTypeLoc
The location of the function prototype that describes the entity being called, when Kind == CK_Functi...
CodeCompletionString * CreateSignatureString(unsigned CurrentArg, Sema &S, CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo, bool IncludeBriefComments, bool Braced) const
Create a new code-completion string that describes the function signature of this overload candidate.
QualType getParamType(unsigned N) const
Get the type of the Nth parameter.
const FunctionType * getFunctionType() const
Retrieve the function type of the entity, regardless of how the function is stored.
CandidateKind getKind() const
Determine the kind of overload candidate.
const RecordDecl * getAggregate() const
Retrieve the aggregate type being initialized.
OverloadCandidate(FunctionTemplateDecl *FunctionTemplateDecl)
FunctionDecl * getFunction() const
Retrieve the function overload candidate or the templated function declaration for a function templat...
FunctionDecl * Function
The function overload candidate, available when Kind == CK_Function.
const FunctionProtoTypeLoc getFunctionProtoTypeLoc() const
Retrieve the function ProtoTypeLoc candidate.
CandidateKind
Describes the type of overload candidate.
@ CK_Aggregate
The candidate is aggregate initialization of a record type.
@ CK_FunctionType
The "candidate" is actually a variable, expression, or block for which we only have a function protot...
@ CK_Function
The candidate is a function declaration.
@ CK_FunctionProtoTypeLoc
The candidate is a variable or expression of function type for which we have the location of the prot...
@ CK_Template
The candidate is a template, template arguments are being completed.
@ CK_FunctionTemplate
The candidate is a function template, arguments are being completed.
FunctionTemplateDecl * FunctionTemplate
The function template overload candidate, available when Kind == CK_FunctionTemplate.
const NamedDecl * getParamDecl(unsigned N) const
Get the declaration of the Nth parameter.
unsigned getNumParams() const
Get the number of parameters in this signature.
const TemplateDecl * Template
The template overload candidate, available when Kind == CK_Template.
FunctionTemplateDecl * getFunctionTemplate() const
Retrieve the function template overload candidate.
Abstract interface for a consumer of code-completion information.
CodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts)
bool includeNamespaceLevelDecls() const
Whether to include declarations in namespace contexts (including the global namespace).
bool includeMacros() const
Whether the code-completion consumer wants to see macros.
virtual ~CodeCompleteConsumer()
Deregisters and destroys this code-completion consumer.
bool includeFixIts() const
Whether to include completion items with small fix-its, e.g.
virtual CodeCompletionAllocator & getAllocator()=0
Retrieve the allocator that will be used to allocate code completion strings.
virtual bool isResultFilteredOut(StringRef Filter, CodeCompletionResult Results)
bool includeGlobals() const
Whether to include global (top-level) declaration results.
virtual void ProcessCodeCompleteResults(Sema &S, CodeCompletionContext Context, CodeCompletionResult *Results, unsigned NumResults)
Process the finalized code-completion results.
virtual CodeCompletionTUInfo & getCodeCompletionTUInfo()=0
bool includeCodePatterns() const
Whether the code-completion consumer wants to see code patterns.
bool loadExternal() const
Hint whether to load data from the external AST in order to provide full results.
const CodeCompleteOptions CodeCompleteOpts
bool includeBriefComments() const
Whether to include brief documentation comments within the set of code completions returned.
virtual void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg, OverloadCandidate *Candidates, unsigned NumCandidates, SourceLocation OpenParLoc, bool Braced)
Options controlling the behavior of code completion.
unsigned IncludeCodePatterns
Show code patterns in code completion results.
unsigned IncludeNamespaceLevelDecls
Show decls in namespace (including the global namespace) in code completion results.
unsigned IncludeFixIts
Include results after corrections (small fix-its), e.g.
unsigned LoadExternal
Hint whether to load data from the external AST to provide full results.
unsigned IncludeMacros
Show macros in code completion results.
unsigned IncludeBriefComments
Show brief documentation comments in code completion results.
unsigned IncludeGlobals
Show top-level decls in code completion results.
An allocator used specifically for the purpose of code completion.
const char * CopyString(const Twine &String)
Copy the given string into this allocator.
A builder class used to construct new code-completion strings.
CodeCompletionString * TakeString()
Take the resulting completion string.
CodeCompletionBuilder(CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo, unsigned Priority, CXAvailabilityKind Availability)
void AddPlaceholderChunk(const char *Placeholder)
Add a new placeholder chunk.
CodeCompletionBuilder(CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo)
void AddTextChunk(const char *Text)
Add a new text chunk.
void addParentContext(const DeclContext *DC)
Add the parent context information to this code completion.
const char * getBriefComment() const
void addBriefComment(StringRef Comment)
void AddCurrentParameterChunk(const char *CurrentParameter)
Add a new current-parameter chunk.
CodeCompletionTUInfo & getCodeCompletionTUInfo() const
void AddResultTypeChunk(const char *ResultType)
Add a new result-type chunk.
void AddInformativeChunk(const char *Text)
Add a new informative chunk.
void AddOptionalChunk(CodeCompletionString *Optional)
Add a new optional chunk.
void AddTypedTextChunk(const char *Text)
Add a new typed-text chunk.
void AddChunk(CodeCompletionString::ChunkKind CK, const char *Text="")
Add a new chunk.
CodeCompletionAllocator & getAllocator() const
Retrieve the allocator into which the code completion strings should be allocated.
The context in which code completion occurred, so that the code-completion consumer can process the r...
std::optional< const CXXScopeSpec * > getCXXScopeSpecifier()
Kind getKind() const
Retrieve the kind of code-completion context.
void setCXXScopeSpecifier(CXXScopeSpec SS)
Sets the scope specifier that comes before the completion token.
@ CCC_TypeQualifiers
Code completion within a type-qualifier list.
@ CCC_ObjCMessageReceiver
Code completion occurred where an Objective-C message receiver is expected.
@ CCC_PreprocessorExpression
Code completion occurred within a preprocessor expression.
@ CCC_ObjCCategoryName
Code completion where an Objective-C category name is expected.
@ CCC_ObjCIvarList
Code completion occurred within the instance variable list of an Objective-C interface,...
@ CCC_Statement
Code completion occurred where a statement (or declaration) is expected in a function,...
@ CCC_Type
Code completion occurred where a type name is expected.
@ CCC_ArrowMemberAccess
Code completion occurred on the right-hand side of a member access expression using the arrow operato...
@ CCC_ClassStructUnion
Code completion occurred within a class, struct, or union.
@ CCC_ObjCInterface
Code completion occurred within an Objective-C interface, protocol, or category interface.
@ CCC_ObjCPropertyAccess
Code completion occurred on the right-hand side of an Objective-C property access expression.
@ CCC_Expression
Code completion occurred where an expression is expected.
@ CCC_SelectorName
Code completion for a selector, as in an @selector expression.
@ CCC_TopLevelOrExpression
Code completion at a top level, i.e.
@ CCC_EnumTag
Code completion occurred after the "enum" keyword, to indicate an enumeration name.
@ CCC_UnionTag
Code completion occurred after the "union" keyword, to indicate a union name.
@ CCC_ParenthesizedExpression
Code completion in a parenthesized expression, which means that we may also have types here in C and ...
@ CCC_TopLevel
Code completion occurred within a "top-level" completion context, e.g., at namespace or global scope.
@ CCC_ClassOrStructTag
Code completion occurred after the "struct" or "class" keyword, to indicate a struct or class name.
@ CCC_ObjCClassMessage
Code completion where an Objective-C class message is expected.
@ CCC_ObjCImplementation
Code completion occurred within an Objective-C implementation or category implementation.
@ CCC_IncludedFile
Code completion inside the filename part of a #include directive.
@ CCC_ObjCInstanceMessage
Code completion where an Objective-C instance message is expected.
@ CCC_SymbolOrNewName
Code completion occurred where both a new name and an existing symbol is permissible.
@ CCC_Recovery
An unknown context, in which we are recovering from a parsing error and don't know which completions ...
@ CCC_ObjCProtocolName
Code completion occurred where a protocol name is expected.
@ CCC_OtherWithMacros
An unspecified code-completion context where we should also add macro completions.
@ CCC_NewName
Code completion occurred where a new name is expected.
@ CCC_MacroNameUse
Code completion occurred where a macro name is expected (without any arguments, in the case of a func...
@ CCC_Symbol
Code completion occurred where an existing name(such as type, function or variable) is expected.
@ CCC_Attribute
Code completion of an attribute name.
@ CCC_Other
An unspecified code-completion context.
@ CCC_DotMemberAccess
Code completion occurred on the right-hand side of a member access expression using the dot operator.
@ CCC_MacroName
Code completion occurred where an macro is being defined.
@ CCC_Namespace
Code completion occurred where a namespace or namespace alias is expected.
@ CCC_PreprocessorDirective
Code completion occurred where a preprocessor directive is expected.
@ CCC_NaturalLanguage
Code completion occurred in a context where natural language is expected, e.g., a comment or string l...
@ CCC_ObjCInterfaceName
Code completion where the name of an Objective-C class is expected.
QualType getBaseType() const
Retrieve the type of the base object in a member-access expression.
bool wantConstructorResults() const
Determines whether we want C++ constructors as results within this context.
QualType getPreferredType() const
Retrieve the type that this expression would prefer to have, e.g., if the expression is a variable in...
void addVisitedContext(DeclContext *Ctx)
Adds a visited context.
CodeCompletionContext(Kind CCKind, QualType T, ArrayRef< const IdentifierInfo * > SelIdents={})
Construct a new code-completion context of the given kind.
const VisitedContextSet & getVisitedContexts() const
Retrieves all visited contexts.
CodeCompletionContext(Kind CCKind)
Construct a new code-completion context of the given kind.
ArrayRef< const IdentifierInfo * > getSelIdents() const
Retrieve the Objective-C selector identifiers.
Captures a result of code completion.
bool DeclaringEntity
Whether we're completing a declaration of the given entity, rather than a use of that entity.
ResultKind Kind
The kind of result stored here.
const char * Keyword
When Kind == RK_Keyword, the string representing the keyword or symbol's spelling.
CXAvailabilityKind Availability
The availability of this result.
CodeCompletionResult(const char *Keyword, unsigned Priority=CCP_Keyword)
Build a result that refers to a keyword or symbol.
CodeCompletionResult(CodeCompletionString *Pattern, const NamedDecl *D, unsigned Priority)
Build a result that refers to a pattern with an associated declaration.
NestedNameSpecifier * Qualifier
If the result should have a nested-name-specifier, this is it.
CodeCompletionResult(const IdentifierInfo *Macro, const MacroInfo *MI=nullptr, unsigned Priority=CCP_Macro)
Build a result that refers to a macro.
const UsingShadowDecl * ShadowDecl
If this Decl was unshadowed by using declaration, this can store a pointer to the UsingShadowDecl whi...
CodeCompletionString * CreateCodeCompletionString(Sema &S, const CodeCompletionContext &CCContext, CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo, bool IncludeBriefComments)
Create a new code-completion string that describes how to insert this result into a program.
bool QualifierIsInformative
Whether this result was found via lookup into a base class.
std::vector< FixItHint > FixIts
Fix-its that must be applied before inserting the text for the corresponding completion.
CodeCompletionResult(CodeCompletionString *Pattern, unsigned Priority=CCP_CodePattern, CXCursorKind CursorKind=CXCursor_NotImplemented, CXAvailabilityKind Availability=CXAvailability_Available, const NamedDecl *D=nullptr)
Build a result that refers to a pattern.
const NamedDecl * Declaration
When Kind == RK_Declaration or RK_Pattern, the declaration we are referring to.
CodeCompletionString * createCodeCompletionStringForDecl(Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result, bool IncludeBriefComments, const CodeCompletionContext &CCContext, PrintingPolicy &Policy)
CodeCompletionString * CreateCodeCompletionStringForMacro(Preprocessor &PP, CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo)
Creates a new code-completion string for the macro result.
unsigned StartParameter
Specifies which parameter (of a function, Objective-C method, macro, etc.) we should start with when ...
bool InBaseClass
Whether this is a class member from base class.
StringRef getOrderedName(std::string &Saved) const
Retrieve the name that should be used to order a result.
unsigned Priority
The priority of this particular code-completion result.
bool StartsNestedNameSpecifier
Whether this declaration is the beginning of a nested-name-specifier and, therefore,...
bool Hidden
Whether this result is hidden by another name.
CodeCompletionString * Pattern
When Kind == RK_Pattern, the code-completion string that describes the completion text to insert.
bool FunctionCanBeCall
When completing a function, whether it can be a call.
bool AllParametersAreInformative
Whether all parameters (of a function, Objective-C method, etc.) should be considered "informative".
const char * getKeyword() const
Retrieve the keyword stored in this result.
const NamedDecl * getDeclaration() const
Retrieve the declaration stored in this result.
CodeCompletionString * createCodeCompletionStringForOverride(Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result, bool IncludeBriefComments, const CodeCompletionContext &CCContext, PrintingPolicy &Policy)
const MacroInfo * MacroDefInfo
If the result is RK_Macro, this can store the information about the macro definition.
CodeCompletionResult(const NamedDecl *Declaration, unsigned Priority, NestedNameSpecifier *Qualifier=nullptr, bool QualifierIsInformative=false, bool Accessible=true, std::vector< FixItHint > FixIts=std::vector< FixItHint >())
Build a result that refers to a declaration.
CXCursorKind CursorKind
The cursor kind that describes this result.
const IdentifierInfo * Macro
When Kind == RK_Macro, the identifier that refers to a macro.
ResultKind
Describes the kind of result generated.
@ RK_Pattern
Refers to a precomputed pattern.
@ RK_Declaration
Refers to a declaration.
@ RK_Keyword
Refers to a keyword or symbol.
A "string" used to describe how code completion can be performed for an entity.
unsigned getPriority() const
Retrieve the priority of this code completion result.
CodeCompletionString(const CodeCompletionString &)=delete
ChunkKind
The different kinds of "chunks" that can occur within a code completion string.
@ CK_Optional
A code completion string that is entirely optional.
@ CK_CurrentParameter
A piece of text that describes the parameter that corresponds to the code-completion location within ...
@ CK_Comma
A comma separator (',').
@ CK_Text
A piece of text that should be placed in the buffer, e.g., parentheses or a comma in a function call.
@ CK_Placeholder
A string that acts as a placeholder for, e.g., a function call argument.
@ CK_LeftParen
A left parenthesis ('(').
@ CK_HorizontalSpace
Horizontal whitespace (' ').
@ CK_RightAngle
A right angle bracket ('>').
@ CK_Informative
A piece of text that describes something about the result but should not be inserted into the buffer.
@ CK_LeftBracket
A left bracket ('[').
@ CK_RightParen
A right parenthesis (')').
@ CK_RightBrace
A right brace ('}').
@ CK_VerticalSpace
Vertical whitespace ('\n' or '\r\n', depending on the platform).
@ CK_TypedText
The piece of text that the user is expected to type to match the code-completion string,...
@ CK_ResultType
A piece of text that describes the type of an entity or, for functions and methods,...
@ CK_RightBracket
A right bracket (']').
@ CK_LeftBrace
A left brace ('{').
@ CK_LeftAngle
A left angle bracket ('<').
const Chunk & operator[](unsigned I) const
std::string getAsString() const
Retrieve a string representation of the code completion string, which is mainly useful for debugging.
StringRef getParentContextName() const
Retrieve the name of the parent context.
std::string getAllTypedText() const
Returns the combined text from all TypedText chunks.
const char * getTypedText() const
Returns the text in the first TypedText chunk.
CodeCompletionString & operator=(const CodeCompletionString &)=delete
unsigned getAvailability() const
Retrieve the availability of this code completion result.
const char * getBriefComment() const
unsigned getAnnotationCount() const
Retrieve the number of annotations for this code completion result.
const char * getAnnotation(unsigned AnnotationNr) const
Retrieve the annotation string specified by AnnotationNr.
std::shared_ptr< GlobalCodeCompletionAllocator > getAllocatorRef() const
StringRef getParentName(const DeclContext *DC)
CodeCompletionTUInfo(std::shared_ptr< GlobalCodeCompletionAllocator > Allocator)
CodeCompletionAllocator & getAllocator() const
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Definition: DeclBase.h:1435
Decl - This represents one declaration (or definition), e.g.
Definition: DeclBase.h:86
Represents a function declaration or definition.
Definition: Decl.h:1935
Declaration of a template function.
Definition: DeclTemplate.h:959
FunctionType - C99 6.7.5.3 - Function Declarators.
Definition: Type.h:4321
Allocator for a cached set of global code completions.
One of these records is kept for each identifier that is lexed.
Encapsulates the data about a macro definition (e.g.
Definition: MacroInfo.h:39
This represents a decl that may have a name.
Definition: Decl.h:253
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Definition: Preprocessor.h:138
A simple code-completion consumer that prints the results it receives in a simple format.
void ProcessCodeCompleteResults(Sema &S, CodeCompletionContext Context, CodeCompletionResult *Results, unsigned NumResults) override
Prints the finalized code-completion results.
void ProcessOverloadCandidates(Sema &S, unsigned CurrentArg, OverloadCandidate *Candidates, unsigned NumCandidates, SourceLocation OpenParLoc, bool Braced) override
CodeCompletionTUInfo & getCodeCompletionTUInfo() override
CodeCompletionAllocator & getAllocator() override
Retrieve the allocator that will be used to allocate code completion strings.
bool isResultFilteredOut(StringRef Filter, CodeCompletionResult Results) override
PrintingCodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts, raw_ostream &OS)
Create a new printing code-completion consumer that prints its results to the given raw output stream...
A (possibly-)qualified type.
Definition: Type.h:929
Represents a struct/union/class.
Definition: Decl.h:4148
Sema - This implements semantic analysis and AST building for C.
Definition: Sema.h:463
Encodes a location in the source.
The base class of all kinds of template declarations (e.g., class, function, etc.).
Definition: DeclTemplate.h:399
The base class of the type hierarchy.
Definition: Type.h:1828
Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...
Definition: DeclCXX.h:3338
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
@ CXCursor_MacroDefinition
Definition: Index.h:2264
@ CXCursor_NotImplemented
Definition: Index.h:1384
@ CXAvailability_Available
The entity is available.
Definition: Index.h:134
@ Decl
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
The JSON file list parser is used to communicate input to InstallAPI.
@ CCD_SelectorMatch
The selector of the given message exactly matches the selector of the current method,...
@ CCD_ObjectQualifierMatch
The result is a C++ non-static member function whose qualifiers exactly match the object type on whic...
@ CCD_bool_in_ObjC
Adjustment to the "bool" type in Objective-C, where the typedef "BOOL" is preferred.
@ CCD_InBaseClass
The result is in a base class.
@ CCD_ProbablyNotObjCCollection
Adjustment for KVC code pattern priorities when it doesn't look like the.
@ CCD_BlockPropertySetter
An Objective-C block property completed as a setter with a block placeholder.
@ CCD_MethodAsProperty
An Objective-C method being used as a property.
QualType getDeclUsageType(ASTContext &C, const NamedDecl *ND)
Determine the type that this declaration will have if it is used as a type or in an expression.
CXCursorKind getCursorKindForDecl(const Decl *D)
Determine the libclang cursor kind associated with the given declaration.
const RawComment * getParameterComment(const ASTContext &Ctx, const CodeCompleteConsumer::OverloadCandidate &Result, unsigned ArgIndex)
Get the documentation comment used to produce CodeCompletionString::BriefComment for OverloadCandidat...
bool operator<(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
CanQual< Type > CanQualType
Represents a canonical, potentially-qualified type.
@ Result
The result type of a method or function.
SimplifiedTypeClass
A simplified classification of types used when determining "similar" types for code completion.
const RawComment * getPatternCompletionComment(const ASTContext &Ctx, const NamedDecl *Decl)
Get the documentation comment used to produce CodeCompletionString::BriefComment for RK_Pattern.
@ CCF_ExactTypeMatch
Divide by this factor when a code-completion result's type exactly matches the type we expect.
@ CCF_SimilarTypeMatch
Divide by this factor when a code-completion result's type is similar to the type we expect (e....
const RawComment * getCompletionComment(const ASTContext &Ctx, const NamedDecl *Decl)
Get the documentation comment used to produce CodeCompletionString::BriefComment for RK_Declaration.
SimplifiedTypeClass getSimplifiedTypeClass(CanQualType T)
Determine the simplified type class of the given canonical type.
bool operator<=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
llvm::StringRef getCompletionKindString(CodeCompletionContext::Kind Kind)
Get string representation of Kind, useful for debugging.
@ CCP_Type
Priority for a type.
@ CCP_ObjC_cmd
Priority for the Objective-C "_cmd" implicit parameter.
@ CCP_Keyword
Priority for a language keyword (that isn't any of the other categories).
@ CCP_Macro
Priority for a preprocessor macro.
@ CCP_LocalDeclaration
Priority for a declaration that is in the local scope.
@ CCP_Unlikely
Priority for a result that isn't likely to be what the user wants, but is included for completeness.
@ CCP_NestedNameSpecifier
Priority for a nested-name-specifier.
@ CCP_SuperCompletion
Priority for a send-to-super completion.
@ CCP_NextInitializer
Priority for the next initialization in a constructor initializer list.
@ CCP_Declaration
Priority for a non-type declaration.
@ CCP_Constant
Priority for a constant value (e.g., enumerator).
@ CCP_MemberDeclaration
Priority for a member declaration found from the current method or member function.
@ CCP_EnumInCase
Priority for an enumeration constant inside a switch whose condition is of the enumeration type.
@ CCP_CodePattern
Priority for a code pattern.
bool operator>(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
const FunctionProtoType * T
unsigned getMacroUsagePriority(StringRef MacroName, const LangOptions &LangOpts, bool PreferredTypeIsPointer=false)
Determine the priority to be given to a macro code completion result with the given name.
bool operator>=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
#define true
Definition: stdbool.h:25
#define false
Definition: stdbool.h:26
One piece of the code completion string.
static Chunk CreateOptional(CodeCompletionString *Optional)
Create a new optional chunk.
ChunkKind Kind
The kind of data stored in this piece of the code completion string.
static Chunk CreatePlaceholder(const char *Placeholder)
Create a new placeholder chunk.
static Chunk CreateCurrentParameter(const char *CurrentParameter)
Create a new current-parameter chunk.
static Chunk CreateInformative(const char *Informative)
Create a new informative chunk.
CodeCompletionString * Optional
The code completion string associated with a CK_Optional chunk.
static Chunk CreateResultType(const char *ResultType)
Create a new result type chunk.
const char * Text
The text string associated with a CK_Text, CK_Placeholder, CK_Informative, or CK_Comma chunk.
static Chunk CreateText(const char *Text)
Create a new text chunk.
OverloadCandidate - A single candidate in an overload set (C++ 13.3).
Definition: Overload.h:872
Describes how types, statements, expressions, and declarations should be printed.
Definition: PrettyPrinter.h:57