Skip to content

Commit bad9679

Browse files
committed
[Code Completion] Extract NotRecommendedReason and CodeCompletionResultKind to top-level types
Preliminary work to split `CodeCompletionResult` into a context-free and contextual part.
1 parent 0bf1389 commit bad9679

11 files changed

+230
-257
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -630,21 +630,36 @@ enum class CodeCompletionDiagnosticSeverity : uint8_t {
630630
MAX_VALUE = Note
631631
};
632632

633+
/// Reasons why a code completion item might not be recommended in a certain
634+
/// context.
635+
enum class NotRecommendedReason : uint8_t {
636+
None = 0, // both contextual and context-free
637+
RedundantImport, // contextual
638+
RedundantImportIndirect, // contextual
639+
Deprecated, // context-free
640+
SoftDeprecated, // context-free
641+
InvalidAsyncContext, // contextual
642+
CrossActorReference, // contextual
643+
VariableUsedInOwnDefinition, // contextual
644+
645+
MAX_VALUE = VariableUsedInOwnDefinition
646+
};
647+
648+
enum class CodeCompletionResultKind : uint8_t {
649+
Declaration,
650+
Keyword,
651+
Pattern,
652+
Literal,
653+
BuiltinOperator,
654+
655+
MAX_VALUE = BuiltinOperator
656+
};
657+
633658
/// A single code completion result.
634659
class CodeCompletionResult {
635660
friend class CodeCompletionResultBuilder;
636661

637662
public:
638-
enum class ResultKind : uint8_t {
639-
Declaration,
640-
Keyword,
641-
Pattern,
642-
Literal,
643-
BuiltinOperator,
644-
645-
MAX_VALUE = BuiltinOperator
646-
};
647-
648663
/// Describes the relationship between the type of the completion results and
649664
/// the expected type at the code completion position.
650665
enum class ExpectedTypeRelation : uint8_t {
@@ -670,21 +685,9 @@ class CodeCompletionResult {
670685
MAX_VALUE = Identical
671686
};
672687

673-
enum class NotRecommendedReason : uint8_t {
674-
None = 0,
675-
RedundantImport,
676-
RedundantImportIndirect,
677-
Deprecated,
678-
SoftDeprecated,
679-
InvalidAsyncContext,
680-
CrossActorReference,
681-
VariableUsedInOwnDefinition,
682-
683-
MAX_VALUE = VariableUsedInOwnDefinition
684-
};
685688

686689
private:
687-
ResultKind Kind : 3;
690+
CodeCompletionResultKind Kind : 3;
688691
unsigned AssociatedKind : 8;
689692
CodeCompletionOperatorKind KnownOperatorKind : 6;
690693
SemanticContextKind SemanticContext : 3;
@@ -710,7 +713,7 @@ class CodeCompletionResult {
710713
StringRef DiagnosticMessage;
711714

712715
// Assertions for limiting max values of enums.
713-
static_assert(int(ResultKind::MAX_VALUE) < 1 << 3, "");
716+
static_assert(int(CodeCompletionResultKind::MAX_VALUE) < 1 << 3, "");
714717
static_assert(int(CodeCompletionOperatorKind::MAX_VALUE) < 1 << 6, "");
715718
static_assert(int(SemanticContextKind::MAX_VALUE) < 1 << 3, "");
716719
static_assert(int(NotRecommendedReason::MAX_VALUE) < 1 << 4, "");
@@ -721,7 +724,8 @@ class CodeCompletionResult {
721724
/// Constructs a \c Pattern, \c Keyword or \c BuiltinOperator result.
722725
///
723726
/// \note The caller must ensure \c CodeCompletionString outlives this result.
724-
CodeCompletionResult(ResultKind Kind, SemanticContextKind SemanticContext,
727+
CodeCompletionResult(CodeCompletionResultKind Kind,
728+
SemanticContextKind SemanticContext,
725729
CodeCompletionFlair Flair, unsigned NumBytesToErase,
726730
CodeCompletionString *CompletionString,
727731
ExpectedTypeRelation TypeDistance,
@@ -733,7 +737,8 @@ class CodeCompletionResult {
733737
NotRecommended(NotRecommendedReason::None),
734738
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
735739
BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
736-
assert(Kind != ResultKind::Declaration && "use the other constructor");
740+
assert(Kind != CodeCompletionResultKind::Declaration &&
741+
"use the other constructor");
737742
assert(CompletionString);
738743
if (isOperator() && KnownOperatorKind == CodeCompletionOperatorKind::None)
739744
this->KnownOperatorKind = getCodeCompletionOperatorKind(CompletionString);
@@ -753,7 +758,7 @@ class CodeCompletionResult {
753758
CodeCompletionString *CompletionString,
754759
ExpectedTypeRelation TypeDistance,
755760
StringRef BriefDocComment = StringRef())
756-
: Kind(ResultKind::Keyword),
761+
: Kind(CodeCompletionResultKind::Keyword),
757762
KnownOperatorKind(CodeCompletionOperatorKind::None),
758763
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
759764
NotRecommended(NotRecommendedReason::None),
@@ -773,7 +778,7 @@ class CodeCompletionResult {
773778
CodeCompletionFlair Flair, unsigned NumBytesToErase,
774779
CodeCompletionString *CompletionString,
775780
ExpectedTypeRelation TypeDistance)
776-
: Kind(ResultKind::Literal),
781+
: Kind(CodeCompletionResultKind::Literal),
777782
KnownOperatorKind(CodeCompletionOperatorKind::None),
778783
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
779784
NotRecommended(NotRecommendedReason::None),
@@ -794,11 +799,11 @@ class CodeCompletionResult {
794799
CodeCompletionFlair Flair, unsigned NumBytesToErase,
795800
CodeCompletionString *CompletionString,
796801
const Decl *AssociatedDecl, StringRef ModuleName,
797-
CodeCompletionResult::NotRecommendedReason NotRecReason,
802+
NotRecommendedReason NotRecReason,
798803
StringRef BriefDocComment,
799804
ArrayRef<StringRef> AssociatedUSRs,
800805
ExpectedTypeRelation TypeDistance)
801-
: Kind(ResultKind::Declaration),
806+
: Kind(CodeCompletionResultKind::Declaration),
802807
KnownOperatorKind(CodeCompletionOperatorKind::None),
803808
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
804809
NotRecommended(NotRecReason), NumBytesToErase(NumBytesToErase),
@@ -821,16 +826,15 @@ class CodeCompletionResult {
821826
CodeCompletionFlair Flair, unsigned NumBytesToErase,
822827
CodeCompletionString *CompletionString,
823828
CodeCompletionDeclKind DeclKind, bool IsSystem,
824-
StringRef ModuleName,
825-
CodeCompletionResult::NotRecommendedReason NotRecReason,
829+
StringRef ModuleName, NotRecommendedReason NotRecReason,
826830
CodeCompletionDiagnosticSeverity diagSeverity,
827831
StringRef DiagnosticMessage, StringRef BriefDocComment,
828832
ArrayRef<StringRef> AssociatedUSRs,
829833
ExpectedTypeRelation TypeDistance,
830834
CodeCompletionOperatorKind KnownOperatorKind)
831-
: Kind(ResultKind::Declaration), KnownOperatorKind(KnownOperatorKind),
832-
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
833-
NotRecommended(NotRecReason), IsSystem(IsSystem),
835+
: Kind(CodeCompletionResultKind::Declaration),
836+
KnownOperatorKind(KnownOperatorKind), SemanticContext(SemanticContext),
837+
Flair(Flair.toRaw()), NotRecommended(NotRecReason), IsSystem(IsSystem),
834838
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
835839
ModuleName(ModuleName), BriefDocComment(BriefDocComment),
836840
AssociatedUSRs(AssociatedUSRs), TypeDistance(TypeDistance),
@@ -847,26 +851,26 @@ class CodeCompletionResult {
847851
CodeCompletionResult *withFlair(CodeCompletionFlair newFlair,
848852
CodeCompletionResultSink &Sink);
849853

850-
ResultKind getKind() const { return Kind; }
854+
CodeCompletionResultKind getKind() const { return Kind; }
851855

852856
CodeCompletionDeclKind getAssociatedDeclKind() const {
853-
assert(getKind() == ResultKind::Declaration);
857+
assert(getKind() == CodeCompletionResultKind::Declaration);
854858
return static_cast<CodeCompletionDeclKind>(AssociatedKind);
855859
}
856860

857861
CodeCompletionLiteralKind getLiteralKind() const {
858-
assert(getKind() == ResultKind::Literal);
862+
assert(getKind() == CodeCompletionResultKind::Literal);
859863
return static_cast<CodeCompletionLiteralKind>(AssociatedKind);
860864
}
861865

862866
CodeCompletionKeywordKind getKeywordKind() const {
863-
assert(getKind() == ResultKind::Keyword);
867+
assert(getKind() == CodeCompletionResultKind::Keyword);
864868
return static_cast<CodeCompletionKeywordKind>(AssociatedKind);
865869
}
866870

867871
bool isOperator() const {
868-
if (getKind() != ResultKind::Declaration)
869-
return getKind() == ResultKind::BuiltinOperator;
872+
if (getKind() != CodeCompletionResultKind::Declaration)
873+
return getKind() == CodeCompletionResultKind::BuiltinOperator;
870874
switch (getAssociatedDeclKind()) {
871875
case CodeCompletionDeclKind::PrefixOperatorFunction:
872876
case CodeCompletionDeclKind::PostfixOperatorFunction:

0 commit comments

Comments
 (0)