Skip to content

Commit b3dd35b

Browse files
authored
Add required trait to docs when relevant (smithy-lang#469)
1 parent 0b29015 commit b3dd35b

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/StructureGenerator.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
import software.amazon.smithy.model.shapes.MemberShape;
2525
import software.amazon.smithy.model.shapes.Shape;
2626
import software.amazon.smithy.model.shapes.StructureShape;
27+
import software.amazon.smithy.model.traits.ClientOptionalTrait;
2728
import software.amazon.smithy.model.traits.DefaultTrait;
2829
import software.amazon.smithy.model.traits.DocumentationTrait;
2930
import software.amazon.smithy.model.traits.ErrorTrait;
3031
import software.amazon.smithy.model.traits.InputTrait;
3132
import software.amazon.smithy.model.traits.OutputTrait;
33+
import software.amazon.smithy.model.traits.RequiredTrait;
3234
import software.amazon.smithy.model.traits.SensitiveTrait;
3335
import software.amazon.smithy.model.traits.StreamingTrait;
3436
import software.amazon.smithy.python.codegen.CodegenUtils;
@@ -316,8 +318,14 @@ private boolean hasDocs() {
316318

317319
private void writeMemberDocs(MemberShape member) {
318320
member.getMemberTrait(model, DocumentationTrait.class).ifPresent(trait -> {
321+
String descriptionPrefix = "";
322+
if (member.hasTrait(RequiredTrait.class) && !member.hasTrait(ClientOptionalTrait.class)) {
323+
descriptionPrefix = "**[Required]** - ";
324+
}
325+
319326
String memberName = symbolProvider.toMemberName(member);
320-
String docs = writer.formatDocs(String.format(":param %s: %s", memberName, trait.getValue()));
327+
String docs = writer.formatDocs(String.format(":param %s: %s%s",
328+
memberName, descriptionPrefix, trait.getValue()));
321329
writer.write(docs);
322330
});
323331
}

codegen/core/src/main/java/software/amazon/smithy/python/codegen/writer/MarkdownToRstDocConverter.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import static org.jsoup.nodes.Document.OutputSettings.Syntax.html;
88

9+
import java.util.regex.Matcher;
10+
import java.util.regex.Pattern;
911
import org.commonmark.node.BlockQuote;
1012
import org.commonmark.node.FencedCodeBlock;
1113
import org.commonmark.node.Heading;
@@ -52,8 +54,11 @@ public static MarkdownToRstDocConverter getInstance() {
5254
}
5355

5456
public String convertCommonmarkToRst(String commonmark) {
55-
String html =
56-
HtmlRenderer.builder().escapeHtml(false).build().render(MARKDOWN_PARSER.parse(commonmark));
57+
String html = HtmlRenderer.builder().escapeHtml(false).build().render(MARKDOWN_PARSER.parse(commonmark));
58+
//Replace the outer HTML paragraph tag with a div tag
59+
Pattern pattern = Pattern.compile("^<p>(.*)</p>$", Pattern.DOTALL);
60+
Matcher matcher = pattern.matcher(html);
61+
html = matcher.replaceAll("<div>$1</div>");
5762
Document document = Jsoup.parse(html);
5863
RstNodeVisitor visitor = new RstNodeVisitor();
5964
document.body().traverse(visitor);
@@ -75,7 +80,7 @@ public void head(Node node, int depth) {
7580
int secondColonIndex = text.indexOf(':', 1);
7681
writer.write(text.substring(0, secondColonIndex + 1));
7782
//TODO right now the code generator gives us a mixture of
78-
// commonmark and HTML (for instance :param xyz: <p> docs
83+
// RST and HTML (for instance :param xyz: <p> docs
7984
// </p>). Since we standardize to html above, that <p> tag
8085
// starts a newline. We account for that with this if/else
8186
// statement, but we should refactor this in the future to

0 commit comments

Comments
 (0)