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 {
963963 if (AvailableAttr::isUnavailable (D))
964964 return true ;
965965
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+
966975 if (CtorTyRef)
967976 D = CtorTyRef;
968977 annotate (D, /* IsRef=*/ true , Range);
You can’t perform that action at this time.
0 commit comments