Skip to content

Commit 9418434

Browse files
rintaroahoppen
authored andcommitted
[CodeCompletion] Use enums in bit fields as-is
We don't need to convert them from/to integer
1 parent 9eda90f commit 9418434

File tree

4 files changed

+67
-82
lines changed

4 files changed

+67
-82
lines changed

include/swift/IDE/CodeCompletion.h

Lines changed: 64 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ class alignas(detail::CodeCompletionStringChunk) CodeCompletionString final :
418418
///
419419
/// This enum is ordered from the contexts that are "nearest" to the code
420420
/// completion point to "outside" contexts.
421-
enum class SemanticContextKind {
421+
enum class SemanticContextKind : uint8_t {
422422
/// Used in cases when the concept of semantic context is not applicable.
423423
None,
424424

@@ -482,7 +482,7 @@ enum class CodeCompletionFlairBit: uint8_t {
482482
using CodeCompletionFlair = OptionSet<CodeCompletionFlairBit>;
483483

484484
/// The declaration kind of a code completion result, if it is a declaration.
485-
enum class CodeCompletionDeclKind {
485+
enum class CodeCompletionDeclKind : uint8_t {
486486
Module,
487487
Class,
488488
Struct,
@@ -508,7 +508,7 @@ enum class CodeCompletionDeclKind {
508508
PrecedenceGroup,
509509
};
510510

511-
enum class CodeCompletionLiteralKind {
511+
enum class CodeCompletionLiteralKind : uint8_t {
512512
ArrayLiteral,
513513
BooleanLiteral,
514514
ColorLiteral,
@@ -520,7 +520,7 @@ enum class CodeCompletionLiteralKind {
520520
Tuple,
521521
};
522522

523-
enum class CodeCompletionOperatorKind {
523+
enum class CodeCompletionOperatorKind : uint8_t {
524524
None,
525525
Unknown,
526526
Bang, // !
@@ -566,14 +566,14 @@ enum class CodeCompletionOperatorKind {
566566
TildeEq, // ~=
567567
};
568568

569-
enum class CodeCompletionKeywordKind {
569+
enum class CodeCompletionKeywordKind : uint8_t {
570570
None,
571571
#define KEYWORD(X) kw_##X,
572572
#define POUND_KEYWORD(X) pound_##X,
573573
#include "swift/Syntax/TokenKinds.def"
574574
};
575575

576-
enum class CompletionKind {
576+
enum class CompletionKind : uint8_t {
577577
None,
578578
Import,
579579
UnresolvedMember,
@@ -625,7 +625,7 @@ class CodeCompletionResult {
625625
friend class CodeCompletionResultBuilder;
626626

627627
public:
628-
enum class ResultKind {
628+
enum class ResultKind : uint8_t {
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 class ExpectedTypeRelation {
638+
enum class ExpectedTypeRelation : uint8_t {
639639
/// The result does not have a type (e.g. keyword).
640640
NotApplicable,
641641

@@ -656,7 +656,7 @@ class CodeCompletionResult {
656656
Identical,
657657
};
658658

659-
enum class NotRecommendedReason {
659+
enum class NotRecommendedReason : uint8_t {
660660
None = 0,
661661
RedundantImport,
662662
RedundantImportIndirect,
@@ -668,13 +668,13 @@ class CodeCompletionResult {
668668
};
669669

670670
private:
671-
unsigned Kind : 3;
671+
ResultKind Kind : 3;
672672
unsigned AssociatedKind : 8;
673-
unsigned KnownOperatorKind : 6;
674-
unsigned SemanticContext : 3;
675-
unsigned Flair: 8;
676-
unsigned NotRecommended : 4;
677-
unsigned IsSystem : 1;
673+
CodeCompletionOperatorKind KnownOperatorKind : 6;
674+
SemanticContextKind SemanticContext : 3;
675+
unsigned char Flair : 8;
676+
NotRecommendedReason NotRecommended : 4;
677+
bool IsSystem : 1;
678678

679679
/// The number of bytes to the left of the code completion point that
680680
/// should be erased first if this completion string is inserted in the
@@ -689,8 +689,8 @@ class CodeCompletionResult {
689689
StringRef ModuleName;
690690
StringRef BriefDocComment;
691691
ArrayRef<StringRef> AssociatedUSRs;
692-
unsigned TypeDistance : 3;
693-
unsigned DiagnosticSeverity: 3;
692+
ExpectedTypeRelation TypeDistance : 3;
693+
CodeCompletionDiagnosticSeverity DiagnosticSeverity : 3;
694694
StringRef DiagnosticMessage;
695695

696696
public:
@@ -704,22 +704,20 @@ class CodeCompletionResult {
704704
CodeCompletionOperatorKind KnownOperatorKind =
705705
CodeCompletionOperatorKind::None,
706706
StringRef BriefDocComment = StringRef())
707-
: Kind(unsigned(Kind)), KnownOperatorKind(unsigned(KnownOperatorKind)),
708-
SemanticContext(unsigned(SemanticContext)),
709-
Flair(unsigned(Flair.toRaw())),
710-
NotRecommended(unsigned(NotRecommendedReason::None)),
707+
: Kind(Kind), KnownOperatorKind(KnownOperatorKind),
708+
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
709+
NotRecommended(NotRecommendedReason::None),
711710
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
712-
BriefDocComment(BriefDocComment), TypeDistance(unsigned(TypeDistance)) {
711+
BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
713712
assert(Kind != ResultKind::Declaration && "use the other constructor");
714713
assert(CompletionString);
715714
if (isOperator() && KnownOperatorKind == CodeCompletionOperatorKind::None)
716-
this->KnownOperatorKind =
717-
(unsigned)getCodeCompletionOperatorKind(CompletionString);
715+
this->KnownOperatorKind = getCodeCompletionOperatorKind(CompletionString);
718716
assert(!isOperator() ||
719717
getOperatorKind() != CodeCompletionOperatorKind::None);
720718
AssociatedKind = 0;
721-
IsSystem = 0;
722-
DiagnosticSeverity = 0;
719+
IsSystem = false;
720+
DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None;
723721
}
724722

725723
/// Constructs a \c Keyword result.
@@ -731,16 +729,16 @@ class CodeCompletionResult {
731729
CodeCompletionString *CompletionString,
732730
ExpectedTypeRelation TypeDistance,
733731
StringRef BriefDocComment = StringRef())
734-
: Kind(unsigned(ResultKind::Keyword)), KnownOperatorKind(0),
735-
SemanticContext(unsigned(SemanticContext)),
736-
Flair(unsigned(Flair.toRaw())),
737-
NotRecommended(unsigned(NotRecommendedReason::None)),
732+
: Kind(ResultKind::Keyword),
733+
KnownOperatorKind(CodeCompletionOperatorKind::None),
734+
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
735+
NotRecommended(NotRecommendedReason::None),
738736
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
739-
BriefDocComment(BriefDocComment), TypeDistance(unsigned(TypeDistance)) {
737+
BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
740738
assert(CompletionString);
741739
AssociatedKind = static_cast<unsigned>(Kind);
742-
IsSystem = 0;
743-
DiagnosticSeverity = 0;
740+
IsSystem = false;
741+
DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None;
744742
}
745743

746744
/// Constructs a \c Literal result.
@@ -751,15 +749,15 @@ class CodeCompletionResult {
751749
CodeCompletionFlair Flair, unsigned NumBytesToErase,
752750
CodeCompletionString *CompletionString,
753751
ExpectedTypeRelation TypeDistance)
754-
: Kind(unsigned(ResultKind::Literal)), KnownOperatorKind(0),
755-
SemanticContext(unsigned(SemanticContext)),
756-
Flair(unsigned(Flair.toRaw())),
757-
NotRecommended(unsigned(NotRecommendedReason::None)),
752+
: Kind(ResultKind::Literal),
753+
KnownOperatorKind(CodeCompletionOperatorKind::None),
754+
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
755+
NotRecommended(NotRecommendedReason::None),
758756
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
759-
TypeDistance(unsigned(TypeDistance)) {
757+
TypeDistance(TypeDistance) {
760758
AssociatedKind = static_cast<unsigned>(LiteralKind);
761-
IsSystem = 0;
762-
DiagnosticSeverity = 0;
759+
IsSystem = false;
760+
DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None;
763761
assert(CompletionString);
764762
}
765763

@@ -776,20 +774,20 @@ class CodeCompletionResult {
776774
StringRef BriefDocComment,
777775
ArrayRef<StringRef> AssociatedUSRs,
778776
ExpectedTypeRelation TypeDistance)
779-
: Kind(unsigned(ResultKind::Declaration)), KnownOperatorKind(0),
780-
SemanticContext(unsigned(SemanticContext)),
781-
Flair(unsigned(Flair.toRaw())), NotRecommended(unsigned(NotRecReason)),
782-
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
783-
ModuleName(ModuleName), BriefDocComment(BriefDocComment),
784-
AssociatedUSRs(AssociatedUSRs), TypeDistance(unsigned(TypeDistance)) {
777+
: Kind(ResultKind::Declaration),
778+
KnownOperatorKind(CodeCompletionOperatorKind::None),
779+
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
780+
NotRecommended(NotRecReason), NumBytesToErase(NumBytesToErase),
781+
CompletionString(CompletionString), ModuleName(ModuleName),
782+
BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs),
783+
TypeDistance(TypeDistance) {
785784
assert(AssociatedDecl && "should have a decl");
786785
AssociatedKind = unsigned(getCodeCompletionDeclKind(AssociatedDecl));
787786
IsSystem = getDeclIsSystem(AssociatedDecl);
788-
DiagnosticSeverity = 0;
787+
DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None;
789788
assert(CompletionString);
790789
if (isOperator())
791-
KnownOperatorKind =
792-
(unsigned)getCodeCompletionOperatorKind(CompletionString);
790+
KnownOperatorKind = getCodeCompletionOperatorKind(CompletionString);
793791
assert(!isOperator() ||
794792
getOperatorKind() != CodeCompletionOperatorKind::None);
795793
}
@@ -806,16 +804,13 @@ class CodeCompletionResult {
806804
ArrayRef<StringRef> AssociatedUSRs,
807805
ExpectedTypeRelation TypeDistance,
808806
CodeCompletionOperatorKind KnownOperatorKind)
809-
: Kind(unsigned(ResultKind::Declaration)),
810-
KnownOperatorKind(unsigned(KnownOperatorKind)),
811-
SemanticContext(unsigned(SemanticContext)),
812-
Flair(unsigned(Flair.toRaw())), NotRecommended(unsigned(NotRecReason)),
813-
IsSystem(IsSystem), NumBytesToErase(NumBytesToErase),
814-
CompletionString(CompletionString), ModuleName(ModuleName),
815-
BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs),
816-
TypeDistance(unsigned(TypeDistance)),
817-
DiagnosticSeverity(unsigned(diagSeverity)),
818-
DiagnosticMessage(DiagnosticMessage) {
807+
: Kind(ResultKind::Declaration), KnownOperatorKind(KnownOperatorKind),
808+
SemanticContext(SemanticContext), Flair(Flair.toRaw()),
809+
NotRecommended(NotRecReason), IsSystem(IsSystem),
810+
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
811+
ModuleName(ModuleName), BriefDocComment(BriefDocComment),
812+
AssociatedUSRs(AssociatedUSRs), TypeDistance(TypeDistance),
813+
DiagnosticSeverity(diagSeverity), DiagnosticMessage(DiagnosticMessage) {
819814
AssociatedKind = static_cast<unsigned>(DeclKind);
820815
assert(CompletionString);
821816
assert(!isOperator() ||
@@ -828,7 +823,7 @@ class CodeCompletionResult {
828823
CodeCompletionResult *withFlair(CodeCompletionFlair newFlair,
829824
CodeCompletionResultSink &Sink);
830825

831-
ResultKind getKind() const { return static_cast<ResultKind>(Kind); }
826+
ResultKind getKind() const { return Kind; }
832827

833828
CodeCompletionDeclKind getAssociatedDeclKind() const {
834829
assert(getKind() == ResultKind::Declaration);
@@ -860,33 +855,23 @@ class CodeCompletionResult {
860855

861856
CodeCompletionOperatorKind getOperatorKind() const {
862857
assert(isOperator());
863-
return static_cast<CodeCompletionOperatorKind>(KnownOperatorKind);
858+
return KnownOperatorKind;
864859
}
865860

866-
bool isSystem() const {
867-
return static_cast<bool>(IsSystem);
868-
}
861+
bool isSystem() const { return IsSystem; }
869862

870-
ExpectedTypeRelation getExpectedTypeRelation() const {
871-
return static_cast<ExpectedTypeRelation>(TypeDistance);
872-
}
863+
ExpectedTypeRelation getExpectedTypeRelation() const { return TypeDistance; }
873864

874865
NotRecommendedReason getNotRecommendedReason() const {
875-
return static_cast<NotRecommendedReason>(NotRecommended);
866+
return NotRecommended;
876867
}
877868

878-
SemanticContextKind getSemanticContext() const {
879-
return static_cast<SemanticContextKind>(SemanticContext);
880-
}
869+
SemanticContextKind getSemanticContext() const { return SemanticContext; }
881870

882-
CodeCompletionFlair getFlair() const {
883-
return static_cast<CodeCompletionFlair>(Flair);
884-
}
871+
CodeCompletionFlair getFlair() const { return CodeCompletionFlair(Flair); }
885872

886873
/// Modify "flair" of this result *in place*.
887-
void setFlair(CodeCompletionFlair flair) {
888-
Flair = unsigned(flair.toRaw());
889-
}
874+
void setFlair(CodeCompletionFlair flair) { Flair = flair.toRaw(); }
890875

891876
bool isNotRecommended() const {
892877
return getNotRecommendedReason() != NotRecommendedReason::None;
@@ -911,12 +896,12 @@ class CodeCompletionResult {
911896
}
912897

913898
void setDiagnostics(CodeCompletionDiagnosticSeverity severity, StringRef message) {
914-
DiagnosticSeverity = static_cast<unsigned>(severity);
899+
DiagnosticSeverity = severity;
915900
DiagnosticMessage = message;
916901
}
917902

918903
CodeCompletionDiagnosticSeverity getDiagnosticSeverity() const {
919-
return static_cast<CodeCompletionDiagnosticSeverity>(DiagnosticSeverity);
904+
return DiagnosticSeverity;
920905
}
921906

922907
StringRef getDiagnosticMessage() const {

lib/IDE/CodeCompletion.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ void CodeCompletionResult::printPrefix(raw_ostream &OS) const {
590590
PRINT_FLAIR(ExpressionAtNonScriptOrMainFileScope, "ExprAtFileScope")
591591
Prefix.append("]");
592592
}
593-
if (NotRecommended)
593+
if (NotRecommended != NotRecommendedReason::None)
594594
Prefix.append("/NotRecommended");
595595
if (IsSystem)
596596
Prefix.append("/IsSystem");

lib/IDE/ExprContextAnalysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Expr;
2424
class ValueDecl;
2525

2626
namespace ide {
27-
enum class SemanticContextKind;
27+
enum class SemanticContextKind : uint8_t;
2828

2929
/// Type check parent contexts of the given decl context, and the body of the
3030
/// given context until \c Loc if the context is a function body.

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace ide {
5757
class CompletionInstance;
5858
class OnDiskCodeCompletionCache;
5959
class SourceEditConsumer;
60-
enum class CodeCompletionDeclKind;
60+
enum class CodeCompletionDeclKind : uint8_t;
6161
enum class SyntaxNodeKind : uint8_t;
6262
enum class SyntaxStructureKind : uint8_t;
6363
enum class SyntaxStructureElementKind : uint8_t;

0 commit comments

Comments
 (0)