@@ -422,7 +422,7 @@ class alignas(detail::CodeCompletionStringChunk) CodeCompletionString final :
422
422
// /
423
423
// / This enum is ordered from the contexts that are "nearest" to the code
424
424
// / completion point to "outside" contexts.
425
- enum class SemanticContextKind {
425
+ enum class SemanticContextKind : uint8_t {
426
426
// / Used in cases when the concept of semantic context is not applicable.
427
427
None,
428
428
@@ -456,6 +456,8 @@ enum class SemanticContextKind {
456
456
457
457
// / A declaration imported from other module.
458
458
OtherModule,
459
+
460
+ MAX_VALUE = OtherModule
459
461
};
460
462
461
463
enum class CodeCompletionFlairBit : uint8_t {
@@ -486,7 +488,7 @@ enum class CodeCompletionFlairBit: uint8_t {
486
488
using CodeCompletionFlair = OptionSet<CodeCompletionFlairBit>;
487
489
488
490
// / The declaration kind of a code completion result, if it is a declaration.
489
- enum class CodeCompletionDeclKind {
491
+ enum class CodeCompletionDeclKind : uint8_t {
490
492
Module,
491
493
Class,
492
494
Struct,
@@ -512,7 +514,7 @@ enum class CodeCompletionDeclKind {
512
514
PrecedenceGroup,
513
515
};
514
516
515
- enum class CodeCompletionLiteralKind {
517
+ enum class CodeCompletionLiteralKind : uint8_t {
516
518
ArrayLiteral,
517
519
BooleanLiteral,
518
520
ColorLiteral,
@@ -524,7 +526,7 @@ enum class CodeCompletionLiteralKind {
524
526
Tuple,
525
527
};
526
528
527
- enum class CodeCompletionOperatorKind {
529
+ enum class CodeCompletionOperatorKind : uint8_t {
528
530
None,
529
531
Unknown,
530
532
Bang, // !
@@ -568,16 +570,18 @@ enum class CodeCompletionOperatorKind {
568
570
PipeEq, // |=
569
571
PipePipe, // ||
570
572
TildeEq, // ~=
573
+
574
+ MAX_VALUE = TildeEq
571
575
};
572
576
573
- enum class CodeCompletionKeywordKind {
577
+ enum class CodeCompletionKeywordKind : uint8_t {
574
578
None,
575
579
#define KEYWORD (X ) kw_##X,
576
580
#define POUND_KEYWORD (X ) pound_##X,
577
581
#include " swift/Syntax/TokenKinds.def"
578
582
};
579
583
580
- enum class CompletionKind {
584
+ enum class CompletionKind : uint8_t {
581
585
None,
582
586
Import,
583
587
UnresolvedMember,
@@ -616,30 +620,34 @@ enum class CompletionKind {
616
620
TypeAttrBeginning,
617
621
};
618
622
619
- enum class CodeCompletionDiagnosticSeverity : uint8_t {
623
+ enum class CodeCompletionDiagnosticSeverity : uint8_t {
620
624
None,
621
625
Error,
622
626
Warning,
623
627
Remark,
624
628
Note,
629
+
630
+ MAX_VALUE = Note
625
631
};
626
632
627
633
// / A single code completion result.
628
634
class CodeCompletionResult {
629
635
friend class CodeCompletionResultBuilder ;
630
636
631
637
public:
632
- enum class ResultKind {
638
+ enum class ResultKind : uint8_t {
633
639
Declaration,
634
640
Keyword,
635
641
Pattern,
636
642
Literal,
637
643
BuiltinOperator,
644
+
645
+ MAX_VALUE = BuiltinOperator
638
646
};
639
647
640
648
// / Describes the relationship between the type of the completion results and
641
649
// / the expected type at the code completion position.
642
- enum class ExpectedTypeRelation {
650
+ enum class ExpectedTypeRelation : uint8_t {
643
651
// / The result does not have a type (e.g. keyword).
644
652
NotApplicable,
645
653
@@ -658,9 +666,11 @@ class CodeCompletionResult {
658
666
659
667
// / The result's type is identical to the type of the expected.
660
668
Identical,
669
+
670
+ MAX_VALUE = Identical
661
671
};
662
672
663
- enum class NotRecommendedReason {
673
+ enum class NotRecommendedReason : uint8_t {
664
674
None = 0 ,
665
675
RedundantImport,
666
676
RedundantImportIndirect,
@@ -669,16 +679,18 @@ class CodeCompletionResult {
669
679
InvalidAsyncContext,
670
680
CrossActorReference,
671
681
VariableUsedInOwnDefinition,
682
+
683
+ MAX_VALUE = VariableUsedInOwnDefinition
672
684
};
673
685
674
686
private:
675
- unsigned Kind : 3 ;
687
+ ResultKind Kind : 3 ;
676
688
unsigned AssociatedKind : 8 ;
677
- unsigned KnownOperatorKind : 6 ;
678
- unsigned SemanticContext : 3 ;
679
- unsigned Flair: 8 ;
680
- unsigned NotRecommended : 4 ;
681
- unsigned IsSystem : 1 ;
689
+ CodeCompletionOperatorKind KnownOperatorKind : 6 ;
690
+ SemanticContextKind SemanticContext : 3 ;
691
+ unsigned char Flair : 8 ;
692
+ NotRecommendedReason NotRecommended : 4 ;
693
+ bool IsSystem : 1 ;
682
694
683
695
// / The number of bytes to the left of the code completion point that
684
696
// / should be erased first if this completion string is inserted in the
@@ -693,10 +705,18 @@ class CodeCompletionResult {
693
705
StringRef ModuleName;
694
706
StringRef BriefDocComment;
695
707
ArrayRef<StringRef> AssociatedUSRs;
696
- unsigned TypeDistance : 3 ;
697
- unsigned DiagnosticSeverity: 3 ;
708
+ ExpectedTypeRelation TypeDistance : 3 ;
709
+ CodeCompletionDiagnosticSeverity DiagnosticSeverity : 3 ;
698
710
StringRef DiagnosticMessage;
699
711
712
+ // Assertions for limiting max values of enums.
713
+ static_assert (int (ResultKind::MAX_VALUE) < 1 << 3 , " " );
714
+ static_assert (int (CodeCompletionOperatorKind::MAX_VALUE) < 1 << 6 , " " );
715
+ static_assert (int (SemanticContextKind::MAX_VALUE) < 1 << 3 , " " );
716
+ static_assert (int (NotRecommendedReason::MAX_VALUE) < 1 << 4 , " " );
717
+ static_assert (int (ExpectedTypeRelation::MAX_VALUE) < 1 << 3 , " " );
718
+ static_assert (int (CodeCompletionDiagnosticSeverity::MAX_VALUE) < 1 << 3 , " " );
719
+
700
720
public:
701
721
// / Constructs a \c Pattern, \c Keyword or \c BuiltinOperator result.
702
722
// /
@@ -708,22 +728,20 @@ class CodeCompletionResult {
708
728
CodeCompletionOperatorKind KnownOperatorKind =
709
729
CodeCompletionOperatorKind::None,
710
730
StringRef BriefDocComment = StringRef())
711
- : Kind(unsigned (Kind)), KnownOperatorKind(unsigned (KnownOperatorKind)),
712
- SemanticContext (unsigned (SemanticContext)),
713
- Flair(unsigned (Flair.toRaw())),
714
- NotRecommended(unsigned (NotRecommendedReason::None)),
731
+ : Kind(Kind), KnownOperatorKind(KnownOperatorKind),
732
+ SemanticContext (SemanticContext), Flair(Flair.toRaw()),
733
+ NotRecommended(NotRecommendedReason::None),
715
734
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
716
- BriefDocComment(BriefDocComment), TypeDistance(unsigned ( TypeDistance) ) {
735
+ BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
717
736
assert (Kind != ResultKind::Declaration && " use the other constructor" );
718
737
assert (CompletionString);
719
738
if (isOperator () && KnownOperatorKind == CodeCompletionOperatorKind::None)
720
- this ->KnownOperatorKind =
721
- (unsigned )getCodeCompletionOperatorKind (CompletionString);
739
+ this ->KnownOperatorKind = getCodeCompletionOperatorKind (CompletionString);
722
740
assert (!isOperator () ||
723
741
getOperatorKind () != CodeCompletionOperatorKind::None);
724
742
AssociatedKind = 0 ;
725
- IsSystem = 0 ;
726
- DiagnosticSeverity = 0 ;
743
+ IsSystem = false ;
744
+ DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None ;
727
745
}
728
746
729
747
// / Constructs a \c Keyword result.
@@ -735,16 +753,16 @@ class CodeCompletionResult {
735
753
CodeCompletionString *CompletionString,
736
754
ExpectedTypeRelation TypeDistance,
737
755
StringRef BriefDocComment = StringRef())
738
- : Kind(unsigned ( ResultKind::Keyword)), KnownOperatorKind( 0 ),
739
- SemanticContext( unsigned (SemanticContext) ),
740
- Flair(unsigned ( Flair.toRaw() )),
741
- NotRecommended(unsigned ( NotRecommendedReason::None) ),
756
+ : Kind(ResultKind::Keyword),
757
+ KnownOperatorKind(CodeCompletionOperatorKind::None ),
758
+ SemanticContext(SemanticContext), Flair(Flair.toRaw()),
759
+ NotRecommended(NotRecommendedReason::None),
742
760
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
743
- BriefDocComment(BriefDocComment), TypeDistance(unsigned ( TypeDistance) ) {
761
+ BriefDocComment(BriefDocComment), TypeDistance(TypeDistance) {
744
762
assert (CompletionString);
745
763
AssociatedKind = static_cast <unsigned >(Kind);
746
- IsSystem = 0 ;
747
- DiagnosticSeverity = 0 ;
764
+ IsSystem = false ;
765
+ DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None ;
748
766
}
749
767
750
768
// / Constructs a \c Literal result.
@@ -755,15 +773,15 @@ class CodeCompletionResult {
755
773
CodeCompletionFlair Flair, unsigned NumBytesToErase,
756
774
CodeCompletionString *CompletionString,
757
775
ExpectedTypeRelation TypeDistance)
758
- : Kind(unsigned ( ResultKind::Literal)), KnownOperatorKind( 0 ),
759
- SemanticContext( unsigned (SemanticContext) ),
760
- Flair(unsigned ( Flair.toRaw() )),
761
- NotRecommended(unsigned ( NotRecommendedReason::None) ),
776
+ : Kind(ResultKind::Literal),
777
+ KnownOperatorKind(CodeCompletionOperatorKind::None ),
778
+ SemanticContext(SemanticContext), Flair(Flair.toRaw()),
779
+ NotRecommended(NotRecommendedReason::None),
762
780
NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
763
- TypeDistance(unsigned ( TypeDistance) ) {
781
+ TypeDistance(TypeDistance) {
764
782
AssociatedKind = static_cast <unsigned >(LiteralKind);
765
- IsSystem = 0 ;
766
- DiagnosticSeverity = 0 ;
783
+ IsSystem = false ;
784
+ DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None ;
767
785
assert (CompletionString);
768
786
}
769
787
@@ -780,20 +798,20 @@ class CodeCompletionResult {
780
798
StringRef BriefDocComment,
781
799
ArrayRef<StringRef> AssociatedUSRs,
782
800
ExpectedTypeRelation TypeDistance)
783
- : Kind(unsigned (ResultKind::Declaration)), KnownOperatorKind(0 ),
784
- SemanticContext(unsigned (SemanticContext)),
785
- Flair(unsigned (Flair.toRaw())), NotRecommended(unsigned (NotRecReason)),
786
- NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
787
- ModuleName(ModuleName), BriefDocComment(BriefDocComment),
788
- AssociatedUSRs(AssociatedUSRs), TypeDistance(unsigned (TypeDistance)) {
801
+ : Kind(ResultKind::Declaration),
802
+ KnownOperatorKind(CodeCompletionOperatorKind::None),
803
+ SemanticContext(SemanticContext), Flair(Flair.toRaw()),
804
+ NotRecommended(NotRecReason), NumBytesToErase(NumBytesToErase),
805
+ CompletionString(CompletionString), ModuleName(ModuleName),
806
+ BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs),
807
+ TypeDistance(TypeDistance) {
789
808
assert (AssociatedDecl && " should have a decl" );
790
809
AssociatedKind = unsigned (getCodeCompletionDeclKind (AssociatedDecl));
791
810
IsSystem = getDeclIsSystem (AssociatedDecl);
792
- DiagnosticSeverity = 0 ;
811
+ DiagnosticSeverity = CodeCompletionDiagnosticSeverity::None ;
793
812
assert (CompletionString);
794
813
if (isOperator ())
795
- KnownOperatorKind =
796
- (unsigned )getCodeCompletionOperatorKind (CompletionString);
814
+ KnownOperatorKind = getCodeCompletionOperatorKind (CompletionString);
797
815
assert (!isOperator () ||
798
816
getOperatorKind () != CodeCompletionOperatorKind::None);
799
817
}
@@ -810,16 +828,13 @@ class CodeCompletionResult {
810
828
ArrayRef<StringRef> AssociatedUSRs,
811
829
ExpectedTypeRelation TypeDistance,
812
830
CodeCompletionOperatorKind KnownOperatorKind)
813
- : Kind(unsigned (ResultKind::Declaration)),
814
- KnownOperatorKind(unsigned (KnownOperatorKind)),
815
- SemanticContext(unsigned (SemanticContext)),
816
- Flair(unsigned (Flair.toRaw())), NotRecommended(unsigned (NotRecReason)),
817
- IsSystem(IsSystem), NumBytesToErase(NumBytesToErase),
818
- CompletionString(CompletionString), ModuleName(ModuleName),
819
- BriefDocComment(BriefDocComment), AssociatedUSRs(AssociatedUSRs),
820
- TypeDistance(unsigned (TypeDistance)),
821
- DiagnosticSeverity(unsigned (diagSeverity)),
822
- DiagnosticMessage(DiagnosticMessage) {
831
+ : Kind(ResultKind::Declaration), KnownOperatorKind(KnownOperatorKind),
832
+ SemanticContext(SemanticContext), Flair(Flair.toRaw()),
833
+ NotRecommended(NotRecReason), IsSystem(IsSystem),
834
+ NumBytesToErase(NumBytesToErase), CompletionString(CompletionString),
835
+ ModuleName(ModuleName), BriefDocComment(BriefDocComment),
836
+ AssociatedUSRs(AssociatedUSRs), TypeDistance(TypeDistance),
837
+ DiagnosticSeverity(diagSeverity), DiagnosticMessage(DiagnosticMessage) {
823
838
AssociatedKind = static_cast <unsigned >(DeclKind);
824
839
assert (CompletionString);
825
840
assert (!isOperator () ||
@@ -832,7 +847,7 @@ class CodeCompletionResult {
832
847
CodeCompletionResult *withFlair (CodeCompletionFlair newFlair,
833
848
CodeCompletionResultSink &Sink);
834
849
835
- ResultKind getKind () const { return static_cast <ResultKind>( Kind) ; }
850
+ ResultKind getKind () const { return Kind; }
836
851
837
852
CodeCompletionDeclKind getAssociatedDeclKind () const {
838
853
assert (getKind () == ResultKind::Declaration);
@@ -864,33 +879,23 @@ class CodeCompletionResult {
864
879
865
880
CodeCompletionOperatorKind getOperatorKind () const {
866
881
assert (isOperator ());
867
- return static_cast <CodeCompletionOperatorKind>( KnownOperatorKind) ;
882
+ return KnownOperatorKind;
868
883
}
869
884
870
- bool isSystem () const {
871
- return static_cast <bool >(IsSystem);
872
- }
885
+ bool isSystem () const { return IsSystem; }
873
886
874
- ExpectedTypeRelation getExpectedTypeRelation () const {
875
- return static_cast <ExpectedTypeRelation>(TypeDistance);
876
- }
887
+ ExpectedTypeRelation getExpectedTypeRelation () const { return TypeDistance; }
877
888
878
889
NotRecommendedReason getNotRecommendedReason () const {
879
- return static_cast <NotRecommendedReason>( NotRecommended) ;
890
+ return NotRecommended;
880
891
}
881
892
882
- SemanticContextKind getSemanticContext () const {
883
- return static_cast <SemanticContextKind>(SemanticContext);
884
- }
893
+ SemanticContextKind getSemanticContext () const { return SemanticContext; }
885
894
886
- CodeCompletionFlair getFlair () const {
887
- return static_cast <CodeCompletionFlair>(Flair);
888
- }
895
+ CodeCompletionFlair getFlair () const { return CodeCompletionFlair (Flair); }
889
896
890
897
// / Modify "flair" of this result *in place*.
891
- void setFlair (CodeCompletionFlair flair) {
892
- Flair = unsigned (flair.toRaw ());
893
- }
898
+ void setFlair (CodeCompletionFlair flair) { Flair = flair.toRaw (); }
894
899
895
900
bool isNotRecommended () const {
896
901
return getNotRecommendedReason () != NotRecommendedReason::None;
@@ -915,12 +920,12 @@ class CodeCompletionResult {
915
920
}
916
921
917
922
void setDiagnostics (CodeCompletionDiagnosticSeverity severity, StringRef message) {
918
- DiagnosticSeverity = static_cast < unsigned >( severity) ;
923
+ DiagnosticSeverity = severity;
919
924
DiagnosticMessage = message;
920
925
}
921
926
922
927
CodeCompletionDiagnosticSeverity getDiagnosticSeverity () const {
923
- return static_cast <CodeCompletionDiagnosticSeverity>( DiagnosticSeverity) ;
928
+ return DiagnosticSeverity;
924
929
}
925
930
926
931
StringRef getDiagnosticMessage () const {
0 commit comments