File tree Expand file tree Collapse file tree 2 files changed +40
-0
lines changed
tools/SourceKit/lib/SwiftLang Expand file tree Collapse file tree 2 files changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ func foo( o: Int ? ) {
2
+ switch o {
3
+ case nil :
4
+ break
5
+ case . none:
6
+ break
7
+ }
8
+ }
9
+
10
+
11
+ // RUN: %sourcekitd-test -req=open %s -- %s == -req=print-annotations %s -- %s | %FileCheck %s
12
+
13
+ // CHECK: [
14
+ // CHECK-NEXT: {
15
+ // CHECK-NEXT: key.kind: source.lang.swift.ref.struct,
16
+ // CHECK-NEXT: key.offset: 12,
17
+ // CHECK-NEXT: key.length: 3,
18
+ // CHECK-NEXT: key.is_system: 1
19
+ // CHECK-NEXT: },
20
+ // CHECK-NEXT: {
21
+ // CHECK-NEXT: key.kind: source.lang.swift.ref.var.local,
22
+ // CHECK-NEXT: key.offset: 29,
23
+ // CHECK-NEXT: key.length: 1
24
+ // CHECK-NEXT: },
25
+ // CHECK-NEXT: {
26
+ // CHECK-NEXT: key.kind: source.lang.swift.ref.enumelement,
27
+ // CHECK-NEXT: key.offset: 63,
28
+ // CHECK-NEXT: key.length: 4,
29
+ // CHECK-NEXT: key.is_system: 1
30
+ // CHECK-NEXT: }
31
+ // CHECK-NEXT: ]
Original file line number Diff line number Diff line change @@ -963,6 +963,15 @@ class SemanticAnnotator : public SourceEntityWalker {
963
963
if (AvailableAttr::isUnavailable (D))
964
964
return true ;
965
965
966
+ auto &SM = D->getASTContext ().SourceMgr ;
967
+ if (D == D->getASTContext ().getOptionalNoneDecl () &&
968
+ SM.extractText (Range, BufferID) == " nil" ) {
969
+ // If a 'nil' literal occurs in a swift-case statement, it gets replaced
970
+ // by a reference to 'Optional.none' in the AST. We want to continue
971
+ // highlighting 'nil' as a keyword and not as an enum element.
972
+ return true ;
973
+ }
974
+
966
975
if (CtorTyRef)
967
976
D = CtorTyRef;
968
977
annotate (D, /* IsRef=*/ true , Range);
You can’t perform that action at this time.
0 commit comments