Skip to content

Commit 1780d84

Browse files
committed
docs: add thrown exceptions to command documentation
1 parent d39d36e commit 1780d84

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@
3737
import software.amazon.smithy.model.shapes.OperationShape;
3838
import software.amazon.smithy.model.shapes.ServiceShape;
3939
import software.amazon.smithy.model.shapes.Shape;
40+
import software.amazon.smithy.model.shapes.ShapeId;
4041
import software.amazon.smithy.model.shapes.StructureShape;
42+
import software.amazon.smithy.model.traits.DocumentationTrait;
43+
import software.amazon.smithy.model.traits.ErrorTrait;
4144
import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait;
4245
import software.amazon.smithy.typescript.codegen.endpointsV2.EndpointsParamNameMap;
4346
import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder;
@@ -120,8 +123,13 @@ private void generateClientCommand() {
120123
writer.addImport("MiddlewareStack", "MiddlewareStack", "@aws-sdk/types");
121124

122125
String name = symbol.getName();
123-
writer.writeShapeDocs(operation, shapeDoc -> shapeDoc + "\n" + getCommandExample(serviceSymbol.getName(),
124-
configType, name, inputType.getName(), outputType.getName()));
126+
writer.writeShapeDocs(
127+
operation,
128+
shapeDoc -> shapeDoc + "\n"
129+
+ getCommandExample(serviceSymbol.getName(), configType, name, inputType.getName(), outputType.getName())
130+
+ "\n"
131+
+ getThrownExceptions()
132+
);
125133
writer.openBlock(
126134
"export class $L extends $$Command<$T, $T, $L> {", "}",
127135
name, inputType, outputType,
@@ -169,6 +177,25 @@ private String getCommandExample(String serviceName, String configName, String c
169177
+ String.format("@see {@link %s | config} for %s's `config` shape.%n", configName, serviceName);
170178
}
171179

180+
private String getThrownExceptions() {
181+
List<ShapeId> errors = operation.getErrors();
182+
StringBuilder buffer = new StringBuilder();
183+
for (ShapeId error : errors) {
184+
Shape errorShape = model.getShape(error).get();
185+
Optional<DocumentationTrait> doc = errorShape.getTrait(DocumentationTrait.class);
186+
ErrorTrait errorTrait = errorShape.getTrait(ErrorTrait.class).get();
187+
188+
if (doc.isPresent()) {
189+
buffer.append(String.format("@throws {@link %s} (%s fault) %s\n",
190+
error.getName(), errorTrait.getValue(), doc.get().getValue()));
191+
} else {
192+
buffer.append(String.format("@throws {@link %s} (%s fault)\n",
193+
error.getName(), errorTrait.getValue()));
194+
}
195+
}
196+
return buffer.toString();
197+
}
198+
172199
private void generateCommandConstructor() {
173200
writer.openBlock("constructor(readonly input: $T) {", "}", inputType, () -> {
174201
// The constructor can be intercepted and changed.

0 commit comments

Comments
 (0)