Skip to content

Commit 3d424b5

Browse files
committed
[SourceKit] Annotate tuple types and nested function types
Move the type callbacks into the respective type/typerepr printers so taht we get these callbacks even when we print the type directly, or in a nested fashion. Also make the returntype more explicit than just "inside a function type", since visiting the function type currently visits the input argument tuple (which is different than e.g. the function *decl* printing, which walks the parameter list explicitly). rdar://problem/24292226
1 parent 0a906fd commit 3d424b5

File tree

6 files changed

+124
-27
lines changed

6 files changed

+124
-27
lines changed

include/swift/AST/ASTPrinter.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ enum class PrintNameContext {
4343
/// not escaped.
4444
FunctionParameterExternal,
4545
FunctionParameterLocal,
46+
/// Tuple element context, similar to \c FunctionParameterExternal.
47+
TupleElement,
4648
/// Attributes, which are escaped as 'Normal', but differentiated for
4749
/// the purposes of printName* callbacks.
4850
Attribute,
@@ -60,7 +62,10 @@ enum class PrintStructureKind {
6062
GenericParameter,
6163
GenericRequirement,
6264
FunctionParameter,
65+
FunctionType,
66+
FunctionReturnType,
6367
BuiltinAttribute,
68+
TupleElement,
6469
};
6570

6671
/// An abstract class used to print an AST.

lib/AST/ASTPrinter.cpp

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,7 @@ static bool escapeKeywordInContext(StringRef keyword, PrintNameContext context){
562562

563563
case PrintNameContext::FunctionParameterExternal:
564564
case PrintNameContext::FunctionParameterLocal:
565+
case PrintNameContext::TupleElement:
565566
return !canBeArgumentLabel(keyword);
566567
}
567568
}
@@ -760,17 +761,12 @@ class PrintAST : public ASTVisitor<PrintAST> {
760761
void printTypeLoc(const TypeLoc &TL) {
761762
if (Options.TransformContext && TL.getType()) {
762763
if (auto RT = Options.TransformContext->transform(TL.getType())) {
763-
Printer.printTypePre(TypeLoc::withoutLoc(RT));
764764
PrintOptions FreshOptions;
765765
RT.print(Printer, FreshOptions);
766-
Printer.printTypePost(TypeLoc::withoutLoc(RT));
767766
return;
768767
}
769768
}
770769

771-
Printer.printTypePre(TL);
772-
defer { Printer.printTypePost(TL); };
773-
774770
// Print a TypeRepr if instructed to do so by options, or if the type
775771
// is null.
776772
if ((Options.PreferTypeRepr && TL.hasLocation()) ||
@@ -779,6 +775,7 @@ class PrintAST : public ASTVisitor<PrintAST> {
779775
repr->print(Printer, Options);
780776
return;
781777
}
778+
782779
TL.getType().print(Printer, Options);
783780
}
784781

@@ -2321,7 +2318,9 @@ void PrintAST::visitFuncDecl(FuncDecl *decl) {
23212318
if (ResultTy && !ResultTy->isEqual(TupleType::getEmpty(Context))) {
23222319
Printer << " -> ";
23232320
// Use the non-repr external type, but reuse the TypeLoc printing code.
2321+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
23242322
printTypeLoc(TypeLoc::withoutLoc(ResultTy));
2323+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
23252324
}
23262325
}
23272326

@@ -2383,7 +2382,10 @@ void PrintAST::visitSubscriptDecl(SubscriptDecl *decl) {
23832382
/*isAPINameByDefault*/[](unsigned)->bool{return false;});
23842383
});
23852384
Printer << " -> ";
2385+
2386+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
23862387
printTypeLoc(decl->getElementTypeLoc());
2388+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
23872389

23882390
printAccessors(decl);
23892391
}
@@ -2944,6 +2946,9 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
29442946
: Printer(Printer), Options(PO) {}
29452947

29462948
void visit(Type T) {
2949+
Printer.printTypePre(TypeLoc::withoutLoc(T));
2950+
defer { Printer.printTypePost(TypeLoc::withoutLoc(T)); };
2951+
29472952
// If we have an alternate name for this type, use it.
29482953
if (Options.AlternativeTypeNames) {
29492954
auto found = Options.AlternativeTypeNames->find(T.getCanonicalTypeOrNull());
@@ -3057,10 +3062,11 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
30573062
const TupleTypeElt &TD = Fields[i];
30583063
Type EltType = TD.getType();
30593064

3065+
Printer.callPrintStructurePre(PrintStructureKind::TupleElement);
3066+
defer { Printer.printStructurePost(PrintStructureKind::TupleElement); };
30603067

30613068
if (TD.hasName()) {
3062-
Printer.printName(TD.getName(),
3063-
PrintNameContext::FunctionParameterExternal);
3069+
Printer.printName(TD.getName(), PrintNameContext::TupleElement);
30643070
Printer << ": ";
30653071
}
30663072
if (TD.isVararg()) {
@@ -3267,17 +3273,26 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
32673273
}
32683274

32693275
void visitFunctionType(FunctionType *T) {
3276+
Printer.callPrintStructurePre(PrintStructureKind::FunctionType);
3277+
defer { Printer.printStructurePost(PrintStructureKind::FunctionType); };
3278+
32703279
printFunctionExtInfo(T->getExtInfo());
32713280
printWithParensIfNotSimple(T->getInput());
32723281

32733282
if (T->throws())
32743283
Printer << " " << tok::kw_throws;
32753284

32763285
Printer << " -> ";
3286+
3287+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
32773288
T->getResult().print(Printer, Options);
3289+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
32783290
}
32793291

32803292
void visitPolymorphicFunctionType(PolymorphicFunctionType *T) {
3293+
Printer.callPrintStructurePre(PrintStructureKind::FunctionType);
3294+
defer { Printer.printStructurePost(PrintStructureKind::FunctionType); };
3295+
32813296
printFunctionExtInfo(T->getExtInfo());
32823297
printGenericParams(&T->getGenericParams());
32833298
Printer << " ";
@@ -3287,7 +3302,9 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
32873302
Printer << " " << tok::kw_throws;
32883303

32893304
Printer << " -> ";
3305+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
32903306
T->getResult().print(Printer, Options);
3307+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
32913308
}
32923309

32933310
/// If we can't find the depth of a type, return ErrorDepth.
@@ -3427,6 +3444,9 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
34273444
}
34283445

34293446
void visitGenericFunctionType(GenericFunctionType *T) {
3447+
Printer.callPrintStructurePre(PrintStructureKind::FunctionType);
3448+
defer { Printer.printStructurePost(PrintStructureKind::FunctionType); };
3449+
34303450
printFunctionExtInfo(T->getExtInfo());
34313451
printGenericSignature(T->getGenericParams(), T->getRequirements());
34323452
Printer << " ";
@@ -3436,7 +3456,9 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
34363456
Printer << " " << tok::kw_throws;
34373457

34383458
Printer << " -> ";
3459+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
34393460
T->getResult().print(Printer, Options);
3461+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
34403462
}
34413463

34423464
void printCalleeConvention(ParameterConvention conv) {

lib/AST/TypeRepr.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "swift/AST/Expr.h"
2323
#include "swift/AST/Module.h"
2424
#include "swift/AST/Types.h"
25+
#include "swift/Basic/Defer.h"
2526
#include "llvm/ADT/SmallString.h"
2627
#include "llvm/Support/ErrorHandling.h"
2728
#include "llvm/Support/raw_ostream.h"
@@ -94,6 +95,14 @@ void TypeRepr::print(raw_ostream &OS, const PrintOptions &Opts) const {
9495
}
9596

9697
void TypeRepr::print(ASTPrinter &Printer, const PrintOptions &Opts) const {
98+
// The type part of a NamedTypeRepr will get the callback.
99+
if (!isa<NamedTypeRepr>(this))
100+
Printer.printTypePre(TypeLoc(const_cast<TypeRepr *>(this)));
101+
defer {
102+
if (!isa<NamedTypeRepr>(this))
103+
Printer.printTypePost(TypeLoc(const_cast<TypeRepr *>(this)));
104+
};
105+
97106
switch (getKind()) {
98107
#define TYPEREPR(CLASS, PARENT) \
99108
case TypeReprKind::CLASS: { \
@@ -328,11 +337,15 @@ void CompoundIdentTypeRepr::printImpl(ASTPrinter &Printer,
328337

329338
void FunctionTypeRepr::printImpl(ASTPrinter &Printer,
330339
const PrintOptions &Opts) const {
340+
Printer.printStructurePre(PrintStructureKind::FunctionType);
331341
printTypeRepr(ArgsTy, Printer, Opts);
332342
if (throws())
333-
Printer << " throws";
343+
Printer << " throws"; // FIXME
334344
Printer << " -> ";
345+
Printer.printStructurePre(PrintStructureKind::FunctionReturnType);
335346
printTypeRepr(RetTy, Printer, Opts);
347+
Printer.printStructurePost(PrintStructureKind::FunctionReturnType);
348+
Printer.printStructurePost(PrintStructureKind::FunctionType);
336349
}
337350

338351
void ArrayTypeRepr::printImpl(ASTPrinter &Printer,
@@ -380,7 +393,9 @@ void TupleTypeRepr::printImpl(ASTPrinter &Printer,
380393

381394
for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
382395
if (i) Printer << ", ";
396+
Printer.callPrintStructurePre(PrintStructureKind::TupleElement);
383397
printTypeRepr(Elements[i], Printer, Opts);
398+
Printer.printStructurePost(PrintStructureKind::TupleElement);
384399

385400
if (hasEllipsis() && getEllipsisIndex() == i)
386401
Printer << "...";
@@ -391,7 +406,7 @@ void TupleTypeRepr::printImpl(ASTPrinter &Printer,
391406
void NamedTypeRepr::printImpl(ASTPrinter &Printer,
392407
const PrintOptions &Opts) const {
393408
if (!Id.empty()) {
394-
Printer.printName(Id);
409+
Printer.printName(Id, PrintNameContext::TupleElement);
395410
Printer << ": ";
396411
}
397412
printTypeRepr(Ty, Printer, Opts);

test/SourceKit/DocSupport/doc_clang_module.swift.response

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3622,7 +3622,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
36223622
key.usr: "c:@F@fooFuncWithBlock",
36233623
key.offset: 1495,
36243624
key.length: 49,
3625-
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithBlock</decl.name>(<decl.var.parameter><decl.var.parameter.name>blk</decl.var.parameter.name>: <decl.var.parameter.type>((<ref.struct usr=\"s:Sf\">Float</ref.struct>) -&gt; <ref.struct usr=\"s:Vs5Int32\">Int32</ref.struct>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
3625+
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithBlock</decl.name>(<decl.var.parameter><decl.var.parameter.name>blk</decl.var.parameter.name>: <decl.var.parameter.type>((<ref.struct usr=\"s:Sf\">Float</ref.struct>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Vs5Int32\">Int32</ref.struct></decl.function.returntype>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
36263626
key.entities: [
36273627
{
36283628
key.kind: source.lang.swift.decl.var.local,
@@ -3639,7 +3639,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
36393639
key.usr: "c:@F@fooFuncWithFunctionPointer",
36403640
key.offset: 1545,
36413641
key.length: 60,
3642-
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithFunctionPointer</decl.name>(<decl.var.parameter><decl.var.parameter.name>fptr</decl.var.parameter.name>: <decl.var.parameter.type>((<ref.struct usr=\"s:Sf\">Float</ref.struct>) -&gt; <ref.struct usr=\"s:Vs5Int32\">Int32</ref.struct>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
3642+
key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithFunctionPointer</decl.name>(<decl.var.parameter><decl.var.parameter.name>fptr</decl.var.parameter.name>: <decl.var.parameter.type>((<ref.struct usr=\"s:Sf\">Float</ref.struct>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Vs5Int32\">Int32</ref.struct></decl.function.returntype>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
36433643
key.entities: [
36443644
{
36453645
key.kind: source.lang.swift.decl.var.local,

test/SourceKit/SourceDocInfo/cursor_info.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ func genReq<U, V: P1 where V.T == U>(u: U, v: V) {}
339339
// CHECK34-NEXT: s:FV11cursor_info2S23foou0_rFFT_T_FT_T_
340340
// CHECK34-NEXT: <T, U> (S2<T, U>) -> <V, W> (() -> ()) -> () -> ()
341341
// CHECK34-NEXT: <Declaration>func foo&lt;V, W&gt;(closure: () -&gt; ()) -&gt; () -&gt; ()</Declaration>
342-
// CHECK34-NEXT: <decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>&lt;<decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>V</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>W</decl.generic_type_param.name></decl.generic_type_param>&gt;(<decl.var.parameter><decl.var.parameter.name>closure</decl.var.parameter.name>: <decl.var.parameter.type>() -&gt; ()</decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype>() -&gt; ()</decl.function.returntype></decl.function.method.instance>
342+
// CHECK34-NEXT: <decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>foo</decl.name>&lt;<decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>V</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr="{{.*}}"><decl.generic_type_param.name>W</decl.generic_type_param.name></decl.generic_type_param>&gt;(<decl.var.parameter><decl.var.parameter.name>closure</decl.var.parameter.name>: <decl.var.parameter.type>() -&gt; <decl.function.returntype>()</decl.function.returntype></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype>() -&gt; <decl.function.returntype>()</decl.function.returntype></decl.function.returntype></decl.function.method.instance>
343343

344344
// RUN: %sourcekitd-test -req=cursor -pos=83:7 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK35
345345
// CHECK35: source.lang.swift.decl.class (83:7-83:9)
@@ -366,8 +366,7 @@ func genReq<U, V: P1 where V.T == U>(u: U, v: V) {}
366366
// CHECK37-NEXT: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonDefaultArgNames</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>external1</decl.var.parameter.argument_label> <decl.var.parameter.name>local1</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>local2</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>external3</decl.var.parameter.argument_label> <decl.var.parameter.name>local3</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>external4</decl.var.parameter.argument_label> <decl.var.parameter.name>_</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
367367

368368
// RUN: %sourcekitd-test -req=cursor -pos=88:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK38
369-
// CHECK38: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nestedFunctionType</decl.name>(<decl.var.parameter><decl.var.parameter.name>closure</decl.var.parameter.name>: <decl.var.parameter.type>(y: (z: <ref.struct usr="s:Si">Int</ref.struct>) -&gt; <ref.struct usr="s:Si">Int</ref.struct>) -&gt; <ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype>(<decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: (<decl.var.parameter.argument_label>z</decl.var.parameter.argument_label>: <ref.struct usr="s:Si">Int</ref.struct>) -&gt; <ref.struct usr="s:Si">Int</ref.struct>) -&gt; <ref.struct usr="s:Si">Int</ref.struct></decl.function.returntype></decl.function.free>
370-
// FIXME: inconsistent use of parameter inside type
369+
// CHECK38: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nestedFunctionType</decl.name>(<decl.var.parameter><decl.var.parameter.name>closure</decl.var.parameter.name>: <decl.var.parameter.type>(<decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <decl.var.parameter.type>(<decl.var.parameter><decl.var.parameter.argument_label>z</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr="s:Si">Int</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr="s:Si">Int</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype>(<decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <decl.var.parameter.type>(<decl.var.parameter><decl.var.parameter.argument_label>z</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr="s:Si">Int</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr="s:Si">Int</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr="s:Si">Int</ref.struct></decl.function.returntype></decl.function.returntype></decl.function.free>
371370

372371
// RUN: %sourcekitd-test -req=cursor -pos=91:8 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK39
373372
// CHECK39: source.lang.swift.decl.enumelement (91:8-91:10)
@@ -383,8 +382,7 @@ func genReq<U, V: P1 where V.T == U>(u: U, v: V) {}
383382
// CHECK40-NEXT: s:FO11cursor_info2E22C2FMS0_FT1xSi1ySS_S0_
384383
// CHECK40-NEXT: E2.Type -> (x: Int, y: String) -> E2
385384
// CHECK40-NEXT: <Declaration>case C2(x: <Type usr="s:Si">Int</Type>, y: <Type usr="s:SS">String</Type>)</Declaration>
386-
// CHECK40-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <ref.struct usr="s:Si">Int</ref.struct>, <decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <ref.struct usr="s:SS">String</ref.struct>)</decl.enumelement>
387-
// FIXME: Wrap parameters in <decl.var.parameter>
385+
// CHECK40-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<tuple.element><tuple.element.argument_label>x</tuple.element.argument_label>: <tuple.element.type><ref.struct usr="s:Si">Int</ref.struct></tuple.element.type></tuple.element>, <tuple.element><tuple.element.argument_label>y</tuple.element.argument_label>: <tuple.element.type><ref.struct usr="s:SS">String</ref.struct></tuple.element.type></tuple.element>)</decl.enumelement>
388386

389387
// RUN: %sourcekitd-test -req=cursor -pos=92:31 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK41
390388
// CHECK41: source.lang.swift.decl.enumelement (92:31-92:33)
@@ -414,13 +412,13 @@ func genReq<U, V: P1 where V.T == U>(u: U, v: V) {}
414412
// CHECK44: source.lang.swift.ref.enumelement (92:8-92:10)
415413
// CHECK44-NEXT: C2
416414
// CHECK44: <Declaration>case C2(x: <Type usr="s:Si">Int</Type>, y: <Type usr="s:SS">String</Type>)</Declaration>
417-
// CHECK44-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<decl.var.parameter.argument_label>x
415+
// CHECK44-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<tuple.element><tuple.element.argument_label>x</tuple.element.argument_label>: <tuple.element.type><ref
418416

419417
// RUN: %sourcekitd-test -req=cursor -pos=102:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK45
420418
// CHECK45: source.lang.swift.ref.enumelement (92:8-92:10)
421419
// CHECK45-NEXT: C2
422420
// CHECK45: <Declaration>case C2(x: <Type usr="s:Si">Int</Type>, y: <Type usr="s:SS">String</Type>)</Declaration>
423-
// CHECK45-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<decl.var.parameter.argument_label>x
421+
// CHECK45-NEXT: <decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>C2</decl.name>(<tuple.element><tuple.element.argument_label>x
424422

425423
// RUN: %sourcekitd-test -req=cursor -pos=103:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | FileCheck %s -check-prefix=CHECK46
426424
// CHECK46: source.lang.swift.ref.enumelement (96:8-96:9)

0 commit comments

Comments
 (0)