Skip to content

Commit e45fba7

Browse files
authored
Merge pull request #12793 from johnfairh/nested-param-attrs
[ASTPrinter] Print parameter type attributes more often
2 parents 79ce522 + 87015e4 commit e45fba7

File tree

5 files changed

+32
-18
lines changed

5 files changed

+32
-18
lines changed

include/swift/AST/PrintOptions.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,6 @@ struct PrintOptions {
216216
/// protocol requirements.
217217
bool SkipOverrides = false;
218218

219-
/// Whether to skip parameter type attributes
220-
bool SkipParameterTypeAttributes = false;
221-
222219
/// Whether to skip placeholder members.
223220
bool SkipMissingMemberPlaceholders = true;
224221

lib/AST/ASTPrinter.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -518,11 +518,8 @@ class PrintAST : public ASTVisitor<PrintAST> {
518518
// Print a TypeRepr if instructed to do so by options, or if the type
519519
// is null.
520520
if (willUseTypeReprPrinting(TL, CurrentType, Options)) {
521-
if (auto repr = TL.getTypeRepr()) {
522-
llvm::SaveAndRestore<bool> SPTA(Options.SkipParameterTypeAttributes,
523-
true);
521+
if (auto repr = TL.getTypeRepr())
524522
repr->print(Printer, Options);
525-
}
526523
return;
527524
}
528525

@@ -2264,13 +2261,11 @@ void PrintAST::printOneParameter(const ParamDecl *param,
22642261
TheTypeLoc.setType(BGT->getGenericArgs()[0]);
22652262
}
22662263

2267-
// FIXME: don't do if will be using type repr printing
2268-
printParameterFlags(Printer, Options, paramFlags);
2269-
22702264
// Special case, if we're not going to use the type repr printing, peek
22712265
// through the paren types so that we don't print excessive @escapings.
22722266
unsigned numParens = 0;
22732267
if (!willUseTypeReprPrinting(TheTypeLoc, CurrentType, Options)) {
2268+
printParameterFlags(Printer, Options, paramFlags);
22742269
while (auto parenTy =
22752270
dyn_cast<ParenType>(TheTypeLoc.getType().getPointer())) {
22762271
++numParens;

lib/AST/TypeRepr.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,10 @@ void AttributedTypeRepr::printAttrs(ASTPrinter &Printer,
300300
return Attrs.has(K);
301301
};
302302

303-
if (!Options.SkipParameterTypeAttributes) {
304-
if (hasAttr(TAK_autoclosure))
305-
Printer.printSimpleAttr("@autoclosure") << " ";
306-
if (hasAttr(TAK_escaping))
307-
Printer.printSimpleAttr("@escaping") << " ";
308-
}
303+
if (hasAttr(TAK_autoclosure))
304+
Printer.printSimpleAttr("@autoclosure") << " ";
305+
if (hasAttr(TAK_escaping))
306+
Printer.printSimpleAttr("@escaping") << " ";
309307

310308
if (hasAttr(TAK_thin))
311309
Printer.printSimpleAttr("@thin") << " ";

test/IDE/print_ast_tc_decls.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,6 +1311,16 @@ public func ParamAttrs4(a : @escaping () -> ()) {
13111311
a()
13121312
}
13131313

1314+
// PASS_PRINT_AST: public func ParamAttrs5(a: (@escaping () -> ()) -> ())
1315+
public func ParamAttrs5(a : (@escaping () -> ()) -> ()) {
1316+
}
1317+
1318+
// PASS_PRINT_AST: public typealias ParamAttrs6 = (@autoclosure () -> ()) -> ()
1319+
public typealias ParamAttrs6 = (@autoclosure () -> ()) -> ()
1320+
1321+
// PASS_PRINT_AST: public var ParamAttrs7: (@escaping () -> ()) -> ()
1322+
public var ParamAttrs7: (@escaping () -> ()) -> () = { f in f() }
1323+
13141324
// Setter
13151325
// PASS_PRINT_AST: class FooClassComputed {
13161326
class FooClassComputed {

test/SourceKit/CursorInfo/cursor_info.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,12 @@ struct HasLocalizationKey {}
214214
/// - LocalizationKey: ABC
215215
func hasLocalizationKey2() {}
216216

217+
/// doc
218+
func funcWithNestedEscaping(a : (@escaping () -> ()) -> ()) {}
219+
220+
/// doc
221+
typealias typeWithNestedAutoclosure = (@autoclosure () -> ()) -> ()
222+
217223
// REQUIRES: objc_interop
218224
// RUN: %empty-directory(%t.tmp)
219225
// RUN: %swiftc_driver -emit-module -o %t.tmp/FooSwiftModule.swiftmodule %S/Inputs/FooSwiftModule.swift
@@ -629,10 +635,10 @@ func hasLocalizationKey2() {}
629635
// CHECK70: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>paramAutoclosureNoescape1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>msg</decl.var.parameter.name>: <decl.var.parameter.type>() -&gt; <decl.function.returntype><ref.struct usr="s:SS">String</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
630636

631637
// RUN: %sourcekitd-test -req=cursor -pos=156:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck %s -check-prefix=CHECK71
632-
// CHECK71: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>paramAutoclosureNoescape2</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>msg</decl.var.parameter.name>: @autoclosure <decl.var.parameter.type>() -&gt; <decl.function.returntype><ref.struct usr="s:SS">String</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
638+
// CHECK71: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>paramAutoclosureNoescape2</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>msg</decl.var.parameter.name>: <decl.var.parameter.type><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@autoclosure</syntaxtype.attribute.name></syntaxtype.attribute.builtin> () -&gt; <decl.function.returntype><ref.struct usr="s:SS">String</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
633639

634640
// RUN: %sourcekitd-test -req=cursor -pos=157:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck %s -check-prefix=CHECK72
635-
// CHECK72: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>paramAutoclosureNoescape3</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>msg</decl.var.parameter.name>: @autoclosure @escaping <decl.var.parameter.type>() -&gt; <decl.function.returntype><ref.struct usr="s:SS">String</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
641+
// CHECK72: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>paramAutoclosureNoescape3</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>msg</decl.var.parameter.name>: <decl.var.parameter.type><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@autoclosure</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.attribute.builtin><syntaxtype.attribute.name>@escaping</syntaxtype.attribute.name></syntaxtype.attribute.builtin> () -&gt; <decl.function.returntype><ref.struct usr="s:SS">String</ref.struct></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>)</decl.function.free>
636642

637643
// RUN: %sourcekitd-test -req=cursor -pos=159:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck %s -check-prefix=CHECK73
638644
// CHECK73: <decl.function.free>
@@ -733,3 +739,11 @@ func hasLocalizationKey2() {}
733739
// CHECK88-NEXT: <decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>hasLocalizationKey2</decl.name>()</decl.function.free>
734740
// CHECK88-NEXT: <Function file="{{[^"]+}}cursor_info.swift" line="215" column="6"><Name>hasLocalizationKey2()</Name><USR>s:11cursor_info19hasLocalizationKey2yyF</USR><Declaration>func hasLocalizationKey2()</Declaration><CommentParts></CommentParts></Function
735741
// CHECK88-NEXT: <LocalizationKey>ABC</LocalizationKey>
742+
743+
// RUN: %sourcekitd-test -req=cursor -pos=218:6 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK89 %s
744+
// CHECK89: <Declaration>func funcWithNestedEscaping(a: (@escaping () -&gt; ()) -&gt; ())</Declaration>
745+
// CHECK89-NEXT: <decl.var.parameter.type>(<decl.var.parameter><decl.var.parameter.type><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@escaping</syntaxtype.attribute.name></syntaxtype.attribute.builtin> () -&gt; <decl.function.returntype><tuple>()</tuple></decl.function.returntype></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><tuple>()</tuple></decl.function.returntype></decl.var.parameter.type>
746+
747+
// RUN: %sourcekitd-test -req=cursor -pos=221:11 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK90 %s
748+
// CHECK90: <Declaration>typealias typeWithNestedAutoclosure = (@autoclosure () -&gt; ()) -&gt; ()</Declaration>
749+
// CHECK90-NEXT: <decl.var.parameter.type><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@autoclosure</syntaxtype.attribute.name></syntaxtype.attribute.builtin> () -&gt; <decl.function.returntype><tuple>()</tuple></decl.function.returntype></decl.var.parameter.type>

0 commit comments

Comments
 (0)