Skip to content

Commit 9514f87

Browse files
authored
Merge pull request #40141 from rintaro/ide-completion-resultenumclass
[CodeCompletion] NFC: Make enums in CodeCompletionResult scoped
2 parents 32c8bbe + 73be942 commit 9514f87

File tree

8 files changed

+164
-143
lines changed

8 files changed

+164
-143
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ class CodeCompletionResult {
625625
friend class CodeCompletionResultBuilder;
626626

627627
public:
628-
enum ResultKind {
628+
enum class ResultKind {
629629
Declaration,
630630
Keyword,
631631
Pattern,
@@ -635,7 +635,7 @@ class CodeCompletionResult {
635635

636636
/// Describes the relationship between the type of the completion results and
637637
/// the expected type at the code completion position.
638-
enum ExpectedTypeRelation {
638+
enum class ExpectedTypeRelation {
639639
/// The result does not have a type (e.g. keyword).
640640
NotApplicable,
641641

@@ -704,12 +704,13 @@ class CodeCompletionResult {
704704
CodeCompletionOperatorKind KnownOperatorKind =
705705
CodeCompletionOperatorKind::None,
706706
StringRef BriefDocComment = StringRef())
707-
: Kind(Kind), KnownOperatorKind(unsigned(KnownOperatorKind)),
708-
SemanticContext(unsigned(SemanticContext)), Flair(unsigned(Flair.toRaw())),
707+
: Kind(unsigned(Kind)), KnownOperatorKind(unsigned(KnownOperatorKind)),
708+
SemanticContext(unsigned(SemanticContext)),
709+
Flair(unsigned(Flair.toRaw())),
709710
NotRecommended(unsigned(NotRecommendedReason::None)),
710711
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
711-
BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
712-
assert(Kind != Declaration && "use the other constructor");
712+
BriefDocComment(BriefDocComment), TypeDistance(unsigned(TypeDistance)) {
713+
assert(Kind != ResultKind::Declaration && "use the other constructor");
713714
assert(CompletionString);
714715
if (isOperator() && KnownOperatorKind == CodeCompletionOperatorKind::None)
715716
this->KnownOperatorKind =
@@ -726,16 +727,16 @@ class CodeCompletionResult {
726727
/// \note The caller must ensure \c CodeCompletionString outlives this result.
727728
CodeCompletionResult(CodeCompletionKeywordKind Kind,
728729
SemanticContextKind SemanticContext,
729-
CodeCompletionFlair Flair,
730-
unsigned NumBytesToErase,
730+
CodeCompletionFlair Flair, unsigned NumBytesToErase,
731731
CodeCompletionString *CompletionString,
732732
ExpectedTypeRelation TypeDistance,
733733
StringRef BriefDocComment = StringRef())
734-
: Kind(Keyword), KnownOperatorKind(0),
735-
SemanticContext(unsigned(SemanticContext)), Flair(unsigned(Flair.toRaw())),
734+
: Kind(unsigned(ResultKind::Keyword)), KnownOperatorKind(0),
735+
SemanticContext(unsigned(SemanticContext)),
736+
Flair(unsigned(Flair.toRaw())),
736737
NotRecommended(unsigned(NotRecommendedReason::None)),
737738
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
738-
BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
739+
BriefDocComment(BriefDocComment), TypeDistance(unsigned(TypeDistance)) {
739740
assert(CompletionString);
740741
AssociatedKind = static_cast<unsigned>(Kind);
741742
IsSystem = 0;
@@ -750,11 +751,12 @@ class CodeCompletionResult {
750751
CodeCompletionFlair Flair, unsigned NumBytesToErase,
751752
CodeCompletionString *CompletionString,
752753
ExpectedTypeRelation TypeDistance)
753-
: Kind(Literal), KnownOperatorKind(0),
754-
SemanticContext(unsigned(SemanticContext)), Flair(unsigned(Flair.toRaw())),
754+
: Kind(unsigned(ResultKind::Literal)), KnownOperatorKind(0),
755+
SemanticContext(unsigned(SemanticContext)),
756+
Flair(unsigned(Flair.toRaw())),
755757
NotRecommended(unsigned(NotRecommendedReason::None)),
756758
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
757-
TypeDistance(TypeDistance) {
759+
TypeDistance(unsigned(TypeDistance)) {
758760
AssociatedKind = static_cast<unsigned>(LiteralKind);
759761
IsSystem = 0;
760762
DiagnosticSeverity = 0;
@@ -773,13 +775,13 @@ class CodeCompletionResult {
773775
CodeCompletionResult::NotRecommendedReason NotRecReason,
774776
StringRef BriefDocComment,
775777
ArrayRef<StringRef> AssociatedUSRs,
776-
enum ExpectedTypeRelation TypeDistance)
777-
: Kind(ResultKind::Declaration), KnownOperatorKind(0),
778-
SemanticContext(unsigned(SemanticContext)), Flair(unsigned(Flair.toRaw())),
779-
NotRecommended(unsigned(NotRecReason)),
778+
ExpectedTypeRelation TypeDistance)
779+
: Kind(unsigned(ResultKind::Declaration)), KnownOperatorKind(0),
780+
SemanticContext(unsigned(SemanticContext)),
781+
Flair(unsigned(Flair.toRaw())), NotRecommended(unsigned(NotRecReason)),
780782
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
781783
ModuleName(ModuleName), BriefDocComment(BriefDocComment),
782-
AssociatedUSRs(AssociatedUSRs), TypeDistance(TypeDistance) {
784+
AssociatedUSRs(AssociatedUSRs), TypeDistance(unsigned(TypeDistance)) {
783785
assert(AssociatedDecl && "should have a decl");
784786
AssociatedKind = unsigned(getCodeCompletionDeclKind(AssociatedDecl));
785787
IsSystem = getDeclIsSystem(AssociatedDecl);
@@ -804,14 +806,15 @@ class CodeCompletionResult {
804806
ArrayRef<StringRef> AssociatedUSRs,
805807
ExpectedTypeRelation TypeDistance,
806808
CodeCompletionOperatorKind KnownOperatorKind)
807-
: Kind(ResultKind::Declaration),
809+
: Kind(unsigned(ResultKind::Declaration)),
808810
KnownOperatorKind(unsigned(KnownOperatorKind)),
809811
SemanticContext(unsigned(SemanticContext)),
810812
Flair(unsigned(Flair.toRaw())), NotRecommended(unsigned(NotRecReason)),
811813
IsSystem(IsSystem), NumBytesToErase(NumBytesToErase),
812814
CompletionString(CompletionString), ModuleName(ModuleName),
813815
BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs),
814-
TypeDistance(TypeDistance), DiagnosticSeverity(unsigned(diagSeverity)),
816+
TypeDistance(unsigned(TypeDistance)),
817+
DiagnosticSeverity(unsigned(diagSeverity)),
815818
DiagnosticMessage(DiagnosticMessage) {
816819
AssociatedKind = static_cast<unsigned>(DeclKind);
817820
assert(CompletionString);
@@ -828,23 +831,23 @@ class CodeCompletionResult {
828831
ResultKind getKind() const { return static_cast<ResultKind>(Kind); }
829832

830833
CodeCompletionDeclKind getAssociatedDeclKind() const {
831-
assert(getKind() == Declaration);
834+
assert(getKind() == ResultKind::Declaration);
832835
return static_cast<CodeCompletionDeclKind>(AssociatedKind);
833836
}
834837

835838
CodeCompletionLiteralKind getLiteralKind() const {
836-
assert(getKind() == Literal);
839+
assert(getKind() == ResultKind::Literal);
837840
return static_cast<CodeCompletionLiteralKind>(AssociatedKind);
838841
}
839842

840843
CodeCompletionKeywordKind getKeywordKind() const {
841-
assert(getKind() == Keyword);
844+
assert(getKind() == ResultKind::Keyword);
842845
return static_cast<CodeCompletionKeywordKind>(AssociatedKind);
843846
}
844847

845848
bool isOperator() const {
846-
if (getKind() != Declaration)
847-
return getKind() == BuiltinOperator;
849+
if (getKind() != ResultKind::Declaration)
850+
return getKind() == ResultKind::BuiltinOperator;
848851
switch (getAssociatedDeclKind()) {
849852
case CodeCompletionDeclKind::PrefixOperatorFunction:
850853
case CodeCompletionDeclKind::PostfixOperatorFunction:

lib/IDE/CodeCompletion.cpp

Lines changed: 62 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ void CodeCompletionResult::dump() const {
631631
CodeCompletionResult *
632632
CodeCompletionResult::withFlair(CodeCompletionFlair newFlair,
633633
CodeCompletionResultSink &Sink) {
634-
if (Kind == ResultKind::Declaration) {
634+
if (getKind() == ResultKind::Declaration) {
635635
return new (*Sink.Allocator) CodeCompletionResult(
636636
getSemanticContext(), newFlair, getNumBytesToErase(),
637637
getCompletionString(), getAssociatedDeclKind(), isSystem(),
@@ -3265,7 +3265,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
32653265
if (!IsImplicitlyCurriedInstanceMethod &&
32663266
expectedTypeContext.requiresNonVoid() &&
32673267
ResultType->isVoid()) {
3268-
Builder.setExpectedTypeRelation(CodeCompletionResult::Invalid);
3268+
Builder.setExpectedTypeRelation(
3269+
CodeCompletionResult::ExpectedTypeRelation::Invalid);
32693270
}
32703271
};
32713272

@@ -4321,13 +4322,14 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
43214322
if (!T)
43224323
continue;
43234324

4324-
auto typeRelation = CodeCompletionResult::Identical;
4325+
auto typeRelation = CodeCompletionResult::ExpectedTypeRelation::Identical;
43254326
// Convert through optional types unless we're looking for a protocol
43264327
// that Optional itself conforms to.
43274328
if (kind != CodeCompletionLiteralKind::NilLiteral) {
43284329
if (auto optionalObjT = T->getOptionalObjectType()) {
43294330
T = optionalObjT;
4330-
typeRelation = CodeCompletionResult::Convertible;
4331+
typeRelation =
4332+
CodeCompletionResult::ExpectedTypeRelation::Convertible;
43314333
}
43324334
}
43334335

@@ -4415,19 +4417,19 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
44154417
if (isCodeCompletionAtTopLevelOfLibraryFile(CurrDeclContext))
44164418
flair |= CodeCompletionFlairBit::ExpressionAtNonScriptOrMainFileScope;
44174419

4418-
auto addFromProto = [&](
4419-
CodeCompletionLiteralKind kind,
4420-
llvm::function_ref<void(CodeCompletionResultBuilder &)> consumer,
4421-
bool isKeyword = false) {
4422-
4423-
CodeCompletionResultBuilder builder(Sink, CodeCompletionResult::Literal,
4424-
SemanticContextKind::None, {});
4425-
builder.setLiteralKind(kind);
4426-
builder.addFlair(flair);
4427-
4428-
consumer(builder);
4429-
addTypeRelationFromProtocol(builder, kind);
4430-
};
4420+
auto addFromProto =
4421+
[&](CodeCompletionLiteralKind kind,
4422+
llvm::function_ref<void(CodeCompletionResultBuilder &)> consumer,
4423+
bool isKeyword = false) {
4424+
CodeCompletionResultBuilder builder(
4425+
Sink, CodeCompletionResult::ResultKind::Literal,
4426+
SemanticContextKind::None, {});
4427+
builder.setLiteralKind(kind);
4428+
builder.addFlair(flair);
4429+
4430+
consumer(builder);
4431+
addTypeRelationFromProtocol(builder, kind);
4432+
};
44314433

44324434
// FIXME: the pedantically correct way is to resolve Swift.*LiteralType.
44334435

@@ -4493,8 +4495,9 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
44934495

44944496
// Add tuple completion (item, item).
44954497
{
4496-
CodeCompletionResultBuilder builder(Sink, CodeCompletionResult::Literal,
4497-
SemanticContextKind::None, {});
4498+
CodeCompletionResultBuilder builder(
4499+
Sink, CodeCompletionResult::ResultKind::Literal,
4500+
SemanticContextKind::None, {});
44984501
builder.setLiteralKind(LK::Tuple);
44994502
builder.addFlair(flair);
45004503

@@ -4504,7 +4507,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
45044507
for (auto T : expectedTypeContext.possibleTypes) {
45054508
if (T && T->is<TupleType>() && !T->isVoid()) {
45064509
addTypeAnnotation(builder, T);
4507-
builder.setExpectedTypeRelation(CodeCompletionResult::Identical);
4510+
builder.setExpectedTypeRelation(
4511+
CodeCompletionResult::ExpectedTypeRelation::Identical);
45084512
break;
45094513
}
45104514
}
@@ -6416,8 +6420,9 @@ static void addPoundDirectives(CodeCompletionResultSink &Sink) {
64166420
[&](StringRef name, CodeCompletionKeywordKind K,
64176421
llvm::function_ref<void(CodeCompletionResultBuilder &)> consumer =
64186422
nullptr) {
6419-
CodeCompletionResultBuilder Builder(Sink, CodeCompletionResult::Keyword,
6420-
SemanticContextKind::None, {});
6423+
CodeCompletionResultBuilder Builder(
6424+
Sink, CodeCompletionResult::ResultKind::Keyword,
6425+
SemanticContextKind::None, {});
64216426
Builder.addBaseName(name);
64226427
Builder.setKeywordKind(K);
64236428
if (consumer)
@@ -7460,41 +7465,42 @@ swift::ide::copyCodeCompletionResults(CodeCompletionResultSink &targetSink,
74607465
auto startSize = targetSink.Results.size();
74617466

74627467
if (onlyTypes) {
7463-
std::copy_if(sourceSink.Results.begin(), sourceSink.Results.end(),
7464-
std::back_inserter(targetSink.Results),
7465-
[](CodeCompletionResult *R) -> bool {
7466-
if (R->getKind() != CodeCompletionResult::Declaration)
7467-
return false;
7468-
switch(R->getAssociatedDeclKind()) {
7469-
case CodeCompletionDeclKind::Module:
7470-
case CodeCompletionDeclKind::Class:
7471-
case CodeCompletionDeclKind::Struct:
7472-
case CodeCompletionDeclKind::Enum:
7473-
case CodeCompletionDeclKind::Protocol:
7474-
case CodeCompletionDeclKind::TypeAlias:
7475-
case CodeCompletionDeclKind::AssociatedType:
7476-
case CodeCompletionDeclKind::GenericTypeParam:
7477-
return true;
7478-
case CodeCompletionDeclKind::PrecedenceGroup:
7479-
case CodeCompletionDeclKind::EnumElement:
7480-
case CodeCompletionDeclKind::Constructor:
7481-
case CodeCompletionDeclKind::Destructor:
7482-
case CodeCompletionDeclKind::Subscript:
7483-
case CodeCompletionDeclKind::StaticMethod:
7484-
case CodeCompletionDeclKind::InstanceMethod:
7485-
case CodeCompletionDeclKind::PrefixOperatorFunction:
7486-
case CodeCompletionDeclKind::PostfixOperatorFunction:
7487-
case CodeCompletionDeclKind::InfixOperatorFunction:
7488-
case CodeCompletionDeclKind::FreeFunction:
7489-
case CodeCompletionDeclKind::StaticVar:
7490-
case CodeCompletionDeclKind::InstanceVar:
7491-
case CodeCompletionDeclKind::LocalVar:
7492-
case CodeCompletionDeclKind::GlobalVar:
7493-
return false;
7494-
}
7468+
std::copy_if(
7469+
sourceSink.Results.begin(), sourceSink.Results.end(),
7470+
std::back_inserter(targetSink.Results),
7471+
[](CodeCompletionResult *R) -> bool {
7472+
if (R->getKind() != CodeCompletionResult::ResultKind::Declaration)
7473+
return false;
7474+
switch (R->getAssociatedDeclKind()) {
7475+
case CodeCompletionDeclKind::Module:
7476+
case CodeCompletionDeclKind::Class:
7477+
case CodeCompletionDeclKind::Struct:
7478+
case CodeCompletionDeclKind::Enum:
7479+
case CodeCompletionDeclKind::Protocol:
7480+
case CodeCompletionDeclKind::TypeAlias:
7481+
case CodeCompletionDeclKind::AssociatedType:
7482+
case CodeCompletionDeclKind::GenericTypeParam:
7483+
return true;
7484+
case CodeCompletionDeclKind::PrecedenceGroup:
7485+
case CodeCompletionDeclKind::EnumElement:
7486+
case CodeCompletionDeclKind::Constructor:
7487+
case CodeCompletionDeclKind::Destructor:
7488+
case CodeCompletionDeclKind::Subscript:
7489+
case CodeCompletionDeclKind::StaticMethod:
7490+
case CodeCompletionDeclKind::InstanceMethod:
7491+
case CodeCompletionDeclKind::PrefixOperatorFunction:
7492+
case CodeCompletionDeclKind::PostfixOperatorFunction:
7493+
case CodeCompletionDeclKind::InfixOperatorFunction:
7494+
case CodeCompletionDeclKind::FreeFunction:
7495+
case CodeCompletionDeclKind::StaticVar:
7496+
case CodeCompletionDeclKind::InstanceVar:
7497+
case CodeCompletionDeclKind::LocalVar:
7498+
case CodeCompletionDeclKind::GlobalVar:
7499+
return false;
7500+
}
74957501

7496-
llvm_unreachable("Unhandled CodeCompletionDeclKind in switch.");
7497-
});
7502+
llvm_unreachable("Unhandled CodeCompletionDeclKind in switch.");
7503+
});
74987504
} else if (onlyPrecedenceGroups) {
74997505
std::copy_if(sourceSink.Results.begin(), sourceSink.Results.end(),
75007506
std::back_inserter(targetSink.Results),

lib/IDE/CodeCompletionCache.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,18 +224,17 @@ static bool readCachedModule(llvm::MemoryBuffer *in,
224224
auto diagMessage = getString(diagMessageIndex);
225225

226226
CodeCompletionResult *result = nullptr;
227-
if (kind == CodeCompletionResult::Declaration) {
227+
if (kind == CodeCompletionResult::ResultKind::Declaration) {
228228
result = new (*V.Sink.Allocator) CodeCompletionResult(
229-
context, CodeCompletionFlair(), numBytesToErase, string,
230-
declKind, isSystem, moduleName, notRecommended,
231-
diagSeverity, diagMessage, briefDocComment,
229+
context, CodeCompletionFlair(), numBytesToErase, string, declKind,
230+
isSystem, moduleName, notRecommended, diagSeverity, diagMessage,
231+
briefDocComment,
232232
copyArray(*V.Sink.Allocator, ArrayRef<StringRef>(assocUSRs)),
233-
CodeCompletionResult::Unknown, opKind);
233+
CodeCompletionResult::ExpectedTypeRelation::Unknown, opKind);
234234
} else {
235-
result = new (*V.Sink.Allocator)
236-
CodeCompletionResult(kind, context, CodeCompletionFlair(),
237-
numBytesToErase, string,
238-
CodeCompletionResult::NotApplicable, opKind);
235+
result = new (*V.Sink.Allocator) CodeCompletionResult(
236+
kind, context, CodeCompletionFlair(), numBytesToErase, string,
237+
CodeCompletionResult::ExpectedTypeRelation::NotApplicable, opKind);
239238
}
240239

241240
V.Sink.Results.push_back(result);
@@ -351,7 +350,7 @@ static void writeCachedModule(llvm::raw_ostream &out,
351350

352351
// FIXME: compress bitfield
353352
LE.write(static_cast<uint8_t>(R->getKind()));
354-
if (R->getKind() == CodeCompletionResult::Declaration)
353+
if (R->getKind() == CodeCompletionResult::ResultKind::Declaration)
355354
LE.write(static_cast<uint8_t>(R->getAssociatedDeclKind()));
356355
else
357356
LE.write(static_cast<uint8_t>(~0u));

lib/IDE/CodeCompletionResultBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class CodeCompletionResultBuilder {
8787
CurrentModule;
8888
ExpectedTypeContext declTypeContext;
8989
CodeCompletionResult::ExpectedTypeRelation ExpectedTypeRelation =
90-
CodeCompletionResult::Unknown;
90+
CodeCompletionResult::ExpectedTypeRelation::Unknown;
9191
bool Cancelled = false;
9292
CodeCompletionResult::NotRecommendedReason NotRecReason =
9393
CodeCompletionResult::NotRecommendedReason::None;

lib/IDE/REPLCodeCompletion.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ static void toDisplayString(CodeCompletionResult *Result,
121121
}
122122
if (C.is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotation) ||
123123
C.is(CodeCompletionString::Chunk::ChunkKind::TypeAnnotationBegin)) {
124-
if (Result->getKind() == CodeCompletionResult::Declaration) {
124+
if (Result->getKind() == CodeCompletionResult::ResultKind::Declaration) {
125125
switch (Result->getAssociatedDeclKind()) {
126126
case CodeCompletionDeclKind::Module:
127127
case CodeCompletionDeclKind::PrecedenceGroup:

0 commit comments

Comments
 (0)