Skip to content

Commit ec6aaf8

Browse files
authored
docs: add thrown exceptions to command documentation (#715)
* docs: add thrown exceptions to command documentation * remove trailing spaces * string formatting * tsdoc format
1 parent f25c48e commit ec6aaf8

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

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

Lines changed: 37 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,20 @@ 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+
127+
StringBuilder additionalDocs = new StringBuilder()
128+
.append("\n")
129+
.append(getCommandExample(
130+
serviceSymbol.getName(), configType, name, inputType.getName(), outputType.getName()
131+
))
132+
.append("\n")
133+
.append(getThrownExceptions());
134+
135+
writer.writeShapeDocs(
136+
operation,
137+
shapeDoc -> shapeDoc + additionalDocs
138+
);
139+
125140
writer.openBlock(
126141
"export class $L extends $$Command<$T, $T, $L> {", "}",
127142
name, inputType, outputType,
@@ -169,6 +184,26 @@ private String getCommandExample(String serviceName, String configName, String c
169184
+ String.format("@see {@link %s | config} for %s's `config` shape.%n", configName, serviceName);
170185
}
171186

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

0 commit comments

Comments
 (0)