Skip to content

Commit 390d8cc

Browse files
authored
[IDE] Add result builder code completion for buildPartialBlock (#60669)
1 parent d5391d0 commit 390d8cc

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

include/swift/Sema/IDETypeChecking.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ namespace swift {
304304
BuildArray,
305305
BuildLimitedAvailability,
306306
BuildFinalResult,
307+
BuildPartialBlockFirst,
308+
BuildPartialBlockAccumulated,
307309
};
308310

309311
/// Try to infer the component type of a result builder from the type

lib/IDE/CompletionOverrideLookup.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,11 @@ StringRef CompletionOverrideLookup::getResultBuilderDocComment(
462462

463463
case ResultBuilderBuildFunction::BuildOptional:
464464
return "Enables support for `if` statements that do not have an `else`";
465+
case ResultBuilderBuildFunction::BuildPartialBlockFirst:
466+
return "Builds a partial result component from the first component";
467+
case ResultBuilderBuildFunction::BuildPartialBlockAccumulated:
468+
return "Builds a partial result component by combining an accumulated "
469+
"component and a new component";
465470
}
466471
}
467472

@@ -514,6 +519,12 @@ void CompletionOverrideLookup::addResultBuilderBuildCompletions(
514519
ResultBuilderBuildFunction::BuildLimitedAvailability);
515520
addResultBuilderBuildCompletion(builder, componentType,
516521
ResultBuilderBuildFunction::BuildFinalResult);
522+
addResultBuilderBuildCompletion(
523+
builder, componentType,
524+
ResultBuilderBuildFunction::BuildPartialBlockFirst);
525+
addResultBuilderBuildCompletion(
526+
builder, componentType,
527+
ResultBuilderBuildFunction::BuildPartialBlockAccumulated);
517528
}
518529

519530
void CompletionOverrideLookup::getOverrideCompletions(SourceLoc Loc) {

lib/Sema/BuilderTransform.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2930,6 +2930,13 @@ void swift::printResultBuilderBuildFunction(
29302930
<< ") -> <#Result#>";
29312931
printedResult = true;
29322932
break;
2933+
case ResultBuilderBuildFunction::BuildPartialBlockFirst:
2934+
printer << "buildPartialBlock(first: " << componentTypeString << ")";
2935+
break;
2936+
case ResultBuilderBuildFunction::BuildPartialBlockAccumulated:
2937+
printer << "buildPartialBlock(accumulated: " << componentTypeString
2938+
<< ", next: " << componentTypeString << ")";
2939+
break;
29332940
}
29342941

29352942
if (!printedResult)

test/IDE/complete_result_builder.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct AnyBuilder {
105105
static func #^IN_RESULT_BUILDER_DECL^#
106106
}
107107

108-
// IN_RESULT_BUILDER_DECL: Begin completions, 8 items
108+
// IN_RESULT_BUILDER_DECL: Begin completions, 10 items
109109
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildBlock(_ components: Any...) -> Any {|}; name=buildBlock(_ components: Any...) -> Any; comment=Required by every
110110
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildExpression(_ expression: <#Expression#>) -> Any {|}; name=buildExpression(_ expression: <#Expression#>) -> Any; comment=
111111
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildOptional(_ component: Any?) -> Any {|}; name=buildOptional(_ component: Any?) -> Any; comment=
@@ -114,6 +114,8 @@ struct AnyBuilder {
114114
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildArray(_ components: [Any]) -> Any {|}; name=buildArray(_ components: [Any]) -> Any; comment=
115115
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildLimitedAvailability(_ component: Any) -> Any {|}; name=buildLimitedAvailability(_ component: Any) -> Any; comment=
116116
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildFinalResult(_ component: Any) -> <#Result#> {|}; name=buildFinalResult(_ component: Any) -> <#Result#>; comment=
117+
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildPartialBlock(first: Any) -> Any {|}; name=buildPartialBlock(first: Any) -> Any; comment=
118+
// IN_RESULT_BUILDER_DECL: Pattern/CurrNominal: buildPartialBlock(accumulated: Any, next: Any) -> Any {|}; name=buildPartialBlock(accumulated: Any, next: Any) -> Any; comment=
117119
// IN_RESULT_BUILDER_DECL: End completions
118120

119121
// IN_RESULT_BUILDER_DECL_PREFIX: Begin completions
@@ -125,4 +127,6 @@ struct AnyBuilder {
125127
// IN_RESULT_BUILDER_DECL_PREFIX: Pattern/CurrNominal: static func buildArray(_ components: [Any]) -> Any {|}; name=static func buildArray(_ components: [Any]) -> Any; comment=
126128
// IN_RESULT_BUILDER_DECL_PREFIX: Pattern/CurrNominal: static func buildLimitedAvailability(_ component: Any) -> Any {|}; name=static func buildLimitedAvailability(_ component: Any) -> Any; comment=
127129
// IN_RESULT_BUILDER_DECL_PREFIX: Pattern/CurrNominal: static func buildFinalResult(_ component: Any) -> <#Result#> {|}; name=static func buildFinalResult(_ component: Any) -> <#Result#>; comment=
130+
// IN_RESULT_BUILDER_DECL_PREFIX: Pattern/CurrNominal: static func buildPartialBlock(first: Any) -> Any {|}; name=static func buildPartialBlock(first: Any) -> Any; comment=
131+
// IN_RESULT_BUILDER_DECL_PREFIX: Pattern/CurrNominal: static func buildPartialBlock(accumulated: Any, next: Any) -> Any {|}; name=static func buildPartialBlock(accumulated: Any, next: Any) -> Any; comment=
128132
// IN_RESULT_BUILDER_DECL_PREFIX: End completions

0 commit comments

Comments
 (0)