Skip to content

Commit 957632c

Browse files
Add sparse trait information
1 parent de29b69 commit 957632c

File tree

4 files changed

+49
-0
lines changed

4 files changed

+49
-0
lines changed

smithy-docgen-core/src/main/java/software/amazon/smithy/docgen/core/generators/MemberGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import software.amazon.smithy.docgen.core.DocGenerationContext;
1515
import software.amazon.smithy.docgen.core.DocSymbolProvider;
1616
import software.amazon.smithy.docgen.core.sections.MemberSection;
17+
import software.amazon.smithy.docgen.core.sections.ShapeDetailsSection;
1718
import software.amazon.smithy.docgen.core.sections.ShapeMembersSection;
1819
import software.amazon.smithy.docgen.core.sections.ShapeSubheadingSection;
1920
import software.amazon.smithy.docgen.core.writers.DocWriter;
@@ -112,6 +113,7 @@ public void run() {
112113

113114
writer.injectSection(new ShapeSubheadingSection(context, member));
114115
writer.writeShapeDocs(member, context.model());
116+
writer.injectSection(new ShapeDetailsSection(context, member));
115117
writer.closeDefinitionListItem();
116118
writer.popState();
117119
}

smithy-docgen-core/src/main/java/software/amazon/smithy/docgen/core/integrations/BuiltinsIntegration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import software.amazon.smithy.docgen.core.interceptors.RecommendedInterceptor;
2525
import software.amazon.smithy.docgen.core.interceptors.SensitiveInterceptor;
2626
import software.amazon.smithy.docgen.core.interceptors.SinceInterceptor;
27+
import software.amazon.smithy.docgen.core.interceptors.SparseInterceptor;
2728
import software.amazon.smithy.docgen.core.interceptors.UniqueItemsInterceptor;
2829
import software.amazon.smithy.docgen.core.interceptors.UnstableInterceptor;
2930
import software.amazon.smithy.docgen.core.writers.DocWriter;
@@ -69,6 +70,7 @@ public List<? extends CodeInterceptor<? extends CodeSection, DocWriter>> interce
6970
return List.of(
7071
new NoReplaceBindingInterceptor(),
7172
new NoReplaceOperationInterceptor(),
73+
new SparseInterceptor(),
7274
new UniqueItemsInterceptor(),
7375
new PatternInterceptor(),
7476
new RangeInterceptor(),
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package software.amazon.smithy.docgen.core.interceptors;
7+
8+
import java.util.Locale;
9+
import software.amazon.smithy.docgen.core.sections.ShapeDetailsSection;
10+
import software.amazon.smithy.docgen.core.writers.DocWriter;
11+
import software.amazon.smithy.docgen.core.writers.DocWriter.AdmonitionType;
12+
import software.amazon.smithy.model.traits.SparseTrait;
13+
import software.amazon.smithy.utils.CodeInterceptor;
14+
import software.amazon.smithy.utils.SmithyInternalApi;
15+
16+
/**
17+
* Adds an admonition to shapes that have the
18+
* <a href="https://smithy.io/2.0/spec/type-refinement-traits.html#sparse-trait">
19+
* sparse trait</a>.
20+
*/
21+
@SmithyInternalApi
22+
public final class SparseInterceptor implements CodeInterceptor<ShapeDetailsSection, DocWriter> {
23+
@Override
24+
public Class<ShapeDetailsSection> sectionType() {
25+
return ShapeDetailsSection.class;
26+
}
27+
28+
@Override
29+
public boolean isIntercepted(ShapeDetailsSection section) {
30+
return section.shape().getMemberTrait(section.context().model(), SparseTrait.class).isPresent();
31+
}
32+
33+
@Override
34+
public void write(DocWriter writer, String previousText, ShapeDetailsSection section) {
35+
var target = section.shape().isMemberShape()
36+
? section.context().model().expectShape(section.shape().asMemberShape().get().getTarget())
37+
: section.shape();
38+
writer.writeWithNoFormatting(previousText);
39+
writer.openAdmonition(AdmonitionType.NOTE);
40+
writer.write("This $L may contain null values.", target.getType().toString().toLowerCase(Locale.ENGLISH));
41+
writer.closeAdmonition();
42+
}
43+
}

smithy-docgen-test/model/main.smithy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ list StringSet {
133133
member: String
134134
}
135135

136+
/// A string map that allows null values.
137+
@sparse
136138
@length(max: 16)
137139
map StringMap {
138140
key: String

0 commit comments

Comments
 (0)