Skip to content

Commit 6f1c942

Browse files
committed
[CodeCompletion] Only show type annotations for macros that return non-void
Showing the type annotation only makes sense if they are not `Void`. That’s consistent with functions where we also don’t show a `Void` return type. Most importantly, we shouldn’t be showing a `Void` type annotation for attached macros. rdar://108870970
1 parent 9c68aaa commit 6f1c942

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

lib/IDE/CompletionLookup.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,8 +1817,10 @@ void CompletionLookup::addMacroExpansion(const MacroDecl *MD,
18171817
Builder.addRightParen();
18181818
}
18191819

1820-
addTypeAnnotation(
1821-
Builder, MD->getResultInterfaceType(), MD->getGenericSignature());
1820+
if (!MD->getResultInterfaceType()->isVoid()) {
1821+
addTypeAnnotation(Builder, MD->getResultInterfaceType(),
1822+
MD->getGenericSignature());
1823+
}
18221824
}
18231825

18241826
void CompletionLookup::addKeyword(StringRef Name, Type TypeAnnotation,

test/IDE/complete_macros.swift

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ import MacroDefinitions
6565
@#^STRUCT_ATTR?check=NOMINAL_ATTR^# struct S{}
6666
// NOMINAL_ATTR-NOT: freestanding
6767
// NOMINAL_ATTR-NOT: AttachedAccessorMacro
68-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Void#]; name=AttachedMemberMacro
69-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Void#]; name=AttachedMemberMacroWithArgs
70-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Void#]; name=AttachedMemberAttributeMacro
71-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Void#]; name=AttachedPeerMacro
72-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Void#]; name=AttachedConformanceMacro
73-
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Void#]; name=EverythingMacro
68+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberMacro; name=AttachedMemberMacro
69+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberMacroWithArgs({#arg1: Int#}); name=AttachedMemberMacroWithArgs
70+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberAttributeMacro; name=AttachedMemberAttributeMacro
71+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedPeerMacro; name=AttachedPeerMacro
72+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedConformanceMacro; name=AttachedConformanceMacro
73+
// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
7474

7575
@#^FUNC_ATTR?check=DECL_ATTR^# func method() {}
7676
struct MethodAttrs {
@@ -83,8 +83,8 @@ struct MethodAttrs {
8383
// DECL_ATTR-NOT: AttachedMemberMacro
8484
// DECL_ATTR-NOT: AttachedMemberMacroWithArgs
8585
// DECL_ATTR-NOT: AttachedConformanceMacro
86-
// DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Void#]; name=AttachedPeerMacro
87-
// DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Void#]; name=EverythingMacro
86+
// DECL_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedPeerMacro; name=AttachedPeerMacro
87+
// DECL_ATTR-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
8888

8989
@#^GLOBAL_ATTR?check=VAR_ATTR^# var globalVar
9090
struct PropAttr {
@@ -98,9 +98,9 @@ struct PropAttr {
9898
// VAR_ATTR-NOT: AttachedMemberMacroWithArgs
9999
// VAR_ATTR-NOT: AttachedMemberAttributeMacro
100100
// VAR_ATTR-NOT: AttachedConformanceMacro
101-
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Void#]; name=AttachedAccessorMacro
102-
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Void#]; name=AttachedPeerMacro
103-
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Void#]; name=EverythingMacro
101+
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedAccessorMacro; name=AttachedAccessorMacro
102+
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedPeerMacro; name=AttachedPeerMacro
103+
// VAR_ATTR-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
104104

105105
func paramAttr(@#^PARAM_ATTR?check=PARAM_ATTR^#) {}
106106
func paramAttr2(@#^PARAM2_ATTR?check=PARAM_ATTR^# arg: Int) {}
@@ -129,12 +129,12 @@ func nestedFreestanding() {
129129
##^TOP_NESTED_FREESTANDING?check=ALL_FREESTANDING^#
130130
}
131131
// ALL_FREESTANDING-NOT: Attached
132-
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Void#]; name=freestandingDeclMacro
133-
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingCodeItemMacro[#Void#]; name=freestandingCodeItemMacro
132+
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro; name=freestandingDeclMacro
133+
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingCodeItemMacro; name=freestandingCodeItemMacro
134134
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprIntMacro[#Int#]; name=freestandingExprIntMacro
135135
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
136136
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
137-
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Void#]; name=EverythingMacro
137+
// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
138138

139139
func exprFreestanding(arg: Int) {
140140
_ = arg + ##^EXPR_FREESTANDING^#
@@ -146,27 +146,27 @@ func exprFreestanding(arg: Int) {
146146
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
147147
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
148148
// TODO: This should be invalid in both same module and across modules
149-
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Void#]; name=EverythingMacro
149+
// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
150150

151151
struct NestedFreestanding {
152152
##^TYPE_NESTED_FREESTANDING?check=ITEM_FREESTANDING^#
153153
}
154154
// ITEM_FREESTANDING-NOT: Attached
155155
// ITEM_FREESTANDING-NOT: freestandingExpr
156156
// ITEM_FREESTANDING-NOT: freestandingCodeItemMacro
157-
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Void#]; name=freestandingDeclMacro
158-
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Void#]; name=EverythingMacro
157+
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro; name=freestandingDeclMacro
158+
// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro
159159

160160
struct LastMember {
161161
@#^LAST_MEMBER_ATTR?check=INDEPENDENT_ATTR^#
162162
}
163163
@#^INDEPENDENT?check=INDEPENDENT_ATTR^#
164164
// INDEPENDENT_ATTR-NOT: freestandingExprMacro
165165
// INDEPENDENT_ATTR-NOT: freestandingDeclMacro
166-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Void#]; name=AttachedAccessorMacro
167-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Void#]; name=AttachedMemberMacro
168-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Void#]; name=AttachedMemberMacroWithArgs
169-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Void#]; name=AttachedMemberAttributeMacro
170-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Void#]; name=AttachedPeerMacro
171-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Void#]; name=AttachedConformanceMacro
172-
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Void#]; name=EverythingMacro
166+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedAccessorMacro; name=AttachedAccessorMacro
167+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberMacro; name=AttachedMemberMacro
168+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberMacroWithArgs({#arg1: Int#}); name=AttachedMemberMacroWithArgs
169+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedMemberAttributeMacro; name=AttachedMemberAttributeMacro
170+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedPeerMacro; name=AttachedPeerMacro
171+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: AttachedConformanceMacro; name=AttachedConformanceMacro
172+
// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}: EverythingMacro; name=EverythingMacro

0 commit comments

Comments
 (0)