From 2ff585d6ff0a125666c52e0835cdce6e6fb2c861 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 8 Jun 2023 10:59:21 -0700 Subject: [PATCH] [SourceKit] Highlight `consuming` and `borrowing` as keywords --- lib/Parse/ParseDecl.cpp | 2 + .../SyntaxMapData/consuming_borrowing.swift | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 test/SourceKit/SyntaxMapData/consuming_borrowing.swift diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 8a35d5faea9a4..a3ab9d65aa92c 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -4624,6 +4624,7 @@ Parser::parseTypeAttributeListPresent(ParamDecl::Specifier &Specifier, } if (Tok.isContextualKeyword("_const")) { + Tok.setKind(tok::contextual_keyword); ConstLoc = consumeToken(); continue; } @@ -4646,6 +4647,7 @@ Parser::parseTypeAttributeListPresent(ParamDecl::Specifier &Specifier, } } } + Tok.setKind(tok::contextual_keyword); SpecifierLoc = consumeToken(); } diff --git a/test/SourceKit/SyntaxMapData/consuming_borrowing.swift b/test/SourceKit/SyntaxMapData/consuming_borrowing.swift new file mode 100644 index 0000000000000..7bcb31a396d25 --- /dev/null +++ b/test/SourceKit/SyntaxMapData/consuming_borrowing.swift @@ -0,0 +1,60 @@ +func foo(a: consuming Int, b: borrowing Int, c: _const Int) {} + +// RUN: %sourcekitd-test -req=syntax-map %s | %FileCheck %s + +// CHECK: key.syntaxmap: [ +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.keyword, +// CHECK-NEXT: key.offset: 0, +// CHECK-NEXT: key.length: 4 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.identifier, +// CHECK-NEXT: key.offset: 5, +// CHECK-NEXT: key.length: 3 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.identifier, +// CHECK-NEXT: key.offset: 9, +// CHECK-NEXT: key.length: 1 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.keyword, +// CHECK-NEXT: key.offset: 12, +// CHECK-NEXT: key.length: 9 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.typeidentifier, +// CHECK-NEXT: key.offset: 22, +// CHECK-NEXT: key.length: 3 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.identifier, +// CHECK-NEXT: key.offset: 27, +// CHECK-NEXT: key.length: 1 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.keyword, +// CHECK-NEXT: key.offset: 30, +// CHECK-NEXT: key.length: 9 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.typeidentifier, +// CHECK-NEXT: key.offset: 40, +// CHECK-NEXT: key.length: 3 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.identifier, +// CHECK-NEXT: key.offset: 45, +// CHECK-NEXT: key.length: 1 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.keyword, +// CHECK-NEXT: key.offset: 48, +// CHECK-NEXT: key.length: 6 +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: key.kind: source.lang.swift.syntaxtype.typeidentifier, +// CHECK-NEXT: key.offset: 55, +// CHECK-NEXT: key.length: 3 +// CHECK-NEXT: },