Skip to content

Commit c3ef952

Browse files
authored
add codegen comment to top of files (#538)
* add codegen comment to top of files * unversion Makefile * check for ts(x) extension before adding codegen attribution comment
1 parent 34dad65 commit c3ef952

File tree

7 files changed

+75
-33
lines changed

7 files changed

+75
-33
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ build/
2222
*/*/out/
2323
wrapper/
2424

25+
# local scripting
26+
Makefile
27+
2528
# Visual Studio Code
2629
.vscode/*
2730

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import software.amazon.smithy.model.Model;
3030
import software.amazon.smithy.model.shapes.Shape;
3131
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
32+
import software.amazon.smithy.typescript.codegen.validation.IsTypeScriptFileExtension;
3233
import software.amazon.smithy.utils.SmithyUnstableApi;
3334

3435
@SmithyUnstableApi
@@ -59,7 +60,8 @@ final class TypeScriptDelegator {
5960
* Writes all of the pending writers and clears out the history of writers.
6061
*/
6162
void flushWriters() {
62-
writers.forEach((filename, writer) -> fileManifest.writeFile(filename, writer.toString()));
63+
writers.forEach((filename, writer) ->
64+
fileManifest.writeFile(filename, writer.toString(IsTypeScriptFileExtension.check(filename))));
6365
writers.clear();
6466
}
6567

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
*/
5757
@SmithyUnstableApi
5858
public final class TypeScriptWriter extends CodeWriter {
59+
public static final String CODEGEN_INDICATOR = "// smithy-typescript generated code\n";
5960

6061
private static final Logger LOGGER = Logger.getLogger(TypeScriptWriter.class.getName());
6162

@@ -292,17 +293,26 @@ Collection<SymbolDependency> getDependencies() {
292293

293294
@Override
294295
public String toString() {
296+
return toString(true);
297+
}
298+
299+
/**
300+
* @param withAttribution - whether to include the {@link TypeScriptWriter#CODEGEN_INDICATOR} comment.
301+
* @return buffered code string.
302+
*/
303+
public String toString(boolean withAttribution) {
295304
String contents = super.toString();
296305
String importString = imports.toString();
297306
String strippedContents = StringUtils.stripStart(contents, null);
298307
String strippedImportString = StringUtils.strip(importString, null);
308+
String attribution = withAttribution ? CODEGEN_INDICATOR : "";
299309

300310
// Don't add an additional new line between explicit imports and managed imports.
301311
if (!strippedImportString.isEmpty() && strippedContents.startsWith("import ")) {
302-
return strippedImportString + "\n" + strippedContents;
312+
return attribution + strippedImportString + "\n" + strippedContents;
303313
}
304314

305-
return importString + contents;
315+
return attribution + importString + contents;
306316
}
307317

308318
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.smithy.typescript.codegen.validation;
17+
18+
public final class IsTypeScriptFileExtension {
19+
private IsTypeScriptFileExtension() {}
20+
21+
public static boolean check(String fileName) {
22+
return fileName != null && (fileName.endsWith(".ts") || fileName.endsWith(".tsx"));
23+
}
24+
}

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/TypeScriptDelegatorTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package software.amazon.smithy.typescript.codegen;
22

3-
import static org.hamcrest.MatcherAssert.assertThat;
4-
import static org.hamcrest.Matchers.containsInAnyOrder;
5-
import static org.hamcrest.Matchers.equalTo;
6-
7-
import java.util.ArrayList;
8-
import java.util.List;
93
import org.junit.jupiter.api.Test;
104
import software.amazon.smithy.build.MockManifest;
115
import software.amazon.smithy.codegen.core.Symbol;
@@ -17,6 +11,13 @@
1711
import software.amazon.smithy.utils.ListUtils;
1812
import software.amazon.smithy.utils.Pair;
1913

14+
import java.util.ArrayList;
15+
import java.util.List;
16+
17+
import static org.hamcrest.MatcherAssert.assertThat;
18+
import static org.hamcrest.Matchers.containsInAnyOrder;
19+
import static org.hamcrest.Matchers.equalTo;
20+
2021
public class TypeScriptDelegatorTest {
2122
@Test
2223
public void vendsWritersForShapes() {

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/TypeScriptJmesPathVisitorTest.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import static org.hamcrest.MatcherAssert.assertThat;
77
import static org.hamcrest.Matchers.equalTo;
8+
import static software.amazon.smithy.typescript.codegen.TypeScriptWriter.CODEGEN_INDICATOR;
89

910
public class TypeScriptJmesPathVisitorTest {
1011

@@ -23,140 +24,140 @@ private String generateTypescriptInterpretation(String path) {
2324
public void createsSimpleOneLevelIndex() {
2425
String result = generateTypescriptInterpretation("foo");
2526
assertThat(result,
26-
equalTo("let returnComparator = () => {\n return result.foo;\n}\n"));
27+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return result.foo;\n}\n"));
2728
}
2829

2930
@Test
3031
public void createsSimpleTwoLevelIndex() {
3132
String result = generateTypescriptInterpretation("foo.bar");
3233
assertThat(result,
33-
equalTo("let returnComparator = () => {\n return result.foo.bar;\n}\n"));
34+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return result.foo.bar;\n}\n"));
3435
}
3536

3637
@Test
3738
public void createsDeepIndex() {
3839
String result = generateTypescriptInterpretation("foo.bar.car.gar.foo.bar.car");
3940
assertThat(result,
40-
equalTo("let returnComparator = () => {\n return result.foo.bar.car.gar.foo.bar.car;\n}\n"));
41+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return result.foo.bar.car.gar.foo.bar.car;\n}\n"));
4142
}
4243

4344
@Test
4445
public void createsListProfile() {
4546
String result = generateTypescriptInterpretation("foo.bar[].car");
4647
assertThat(result,
47-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.foo.bar);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.car;\n });\n return projection_3;\n}\n"));
48+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.foo.bar);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.car;\n });\n return projection_3;\n}\n"));
4849
}
4950

5051
@Test
5152
public void createsLengthEqualityCheckProfile() {
5253
String result = generateTypescriptInterpretation("length(items) == `0`");
5354
assertThat(result,
54-
equalTo("let returnComparator = () => {\n return (result.items.length == 0.0);\n}\n"));
55+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return (result.items.length == 0.0);\n}\n"));
5556
}
5657

5758
@Test
5859
public void createsLengthLessCheckProfile() {
5960
String result = generateTypescriptInterpretation("length(items) < `0`");
6061
assertThat(result,
61-
equalTo("let returnComparator = () => {\n return (result.items.length < 0.0);\n}\n"));
62+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return (result.items.length < 0.0);\n}\n"));
6263
}
6364

6465
@Test
6566
public void createsLengthGreaterCheckProfile() {
6667
String result = generateTypescriptInterpretation("length(items) > `0`");
6768
assertThat(result,
68-
equalTo("let returnComparator = () => {\n return (result.items.length > 0.0);\n}\n"));
69+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return (result.items.length > 0.0);\n}\n"));
6970
}
7071

7172
@Test
7273
public void createsDeepLengthCheckProfile() {
7374

7475
String result = generateTypescriptInterpretation("length(items.foo.deep[]) == `0`");
7576
assertThat(result,
76-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items.foo.deep);\n return (flat_1.length == 0.0);\n}\n"));
77+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items.foo.deep);\n return (flat_1.length == 0.0);\n}\n"));
7778
}
7879

7980
@Test
8081
public void createsDoubleLengthChecksProfile() {
8182
String result = generateTypescriptInterpretation("length(set.items[].bar[].gar.foo.items[].item) == length(bar.foos[].foo)");
8283
assertThat(result,
83-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.set.items);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.bar;\n });\n let flat_4: any[] = [].concat(...projection_3);\n let projection_6 = flat_4.map((element_5: any) => {\n return element_5.gar.foo.items;\n });\n let flat_7: any[] = [].concat(...projection_6);\n let projection_9 = flat_7.map((element_8: any) => {\n return element_8.item;\n });\n let flat_10: any[] = [].concat(...result.bar.foos);\n let projection_12 = flat_10.map((element_11: any) => {\n return element_11.foo;\n });\n return (projection_9.length == projection_12.length);\n}\n"));
84+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.set.items);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.bar;\n });\n let flat_4: any[] = [].concat(...projection_3);\n let projection_6 = flat_4.map((element_5: any) => {\n return element_5.gar.foo.items;\n });\n let flat_7: any[] = [].concat(...projection_6);\n let projection_9 = flat_7.map((element_8: any) => {\n return element_8.item;\n });\n let flat_10: any[] = [].concat(...result.bar.foos);\n let projection_12 = flat_10.map((element_11: any) => {\n return element_11.foo;\n });\n return (projection_9.length == projection_12.length);\n}\n"));
8485
}
8586

8687
@Test
8788
public void createWrapAroundProfile() {
8889
String result = generateTypescriptInterpretation("length(items[-1]) == `0`");
8990
assertThat(result,
90-
equalTo("let returnComparator = () => {\n return (result.items[result.items.length - 1].length == 0.0);\n}\n"));
91+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return (result.items[result.items.length - 1].length == 0.0);\n}\n"));
9192
}
9293

9394
@Test
9495
public void createContainsProfile() {
9596
String result = generateTypescriptInterpretation("contains(items[].State, `false`)");
9697
assertThat(result,
97-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.State;\n });\n return projection_3.includes(false);\n}\n"));
98+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n let projection_3 = flat_1.map((element_2: any) => {\n return element_2.State;\n });\n return projection_3.includes(false);\n}\n"));
9899
}
99100

100101
@Test
101102
public void createWildcardIndex() {
102103
String result = generateTypescriptInterpretation("foo.*.bar");
103104
assertThat(result,
104-
equalTo("let returnComparator = () => {\n let objectProjection_2 = Object.values(result.foo).map((element_1: any) => {\n return element_1.bar;\n });\n return objectProjection_2;\n}\n"));
105+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let objectProjection_2 = Object.values(result.foo).map((element_1: any) => {\n return element_1.bar;\n });\n return objectProjection_2;\n}\n"));
105106
}
106107

107108
@Test
108109
public void createFilterIndex() {
109110
String result = generateTypescriptInterpretation("items[?foo=='awesome'][]");
110111
assertThat(result,
111-
equalTo("let returnComparator = () => {\n let filterRes_2 = result.items.filter((element_1: any) => {\n return (element_1.foo == \"awesome\");\n });\n let flat_3: any[] = [].concat(...filterRes_2);\n return flat_3;\n}\n"));
112+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let filterRes_2 = result.items.filter((element_1: any) => {\n return (element_1.foo == \"awesome\");\n });\n let flat_3: any[] = [].concat(...filterRes_2);\n return flat_3;\n}\n"));
112113
}
113114

114115
@Test
115116
public void createMultiIndex() {
116117
String result = generateTypescriptInterpretation("items[].[`4` > `0`, `1` == `0`][]");
117118
assertThat(result,
118-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n let projection_3 = flat_1.map((element_2: any) => {\n let result_4 = [];\n result_4.push((4.0 > 0.0));\n result_4.push((1.0 == 0.0));\n element_2 = result_4;\n return element_2;\n });\n let flat_5: any[] = [].concat(...projection_3);\n return flat_5;\n}\n"));
119+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n let projection_3 = flat_1.map((element_2: any) => {\n let result_4 = [];\n result_4.push((4.0 > 0.0));\n result_4.push((1.0 == 0.0));\n element_2 = result_4;\n return element_2;\n });\n let flat_5: any[] = [].concat(...projection_3);\n return flat_5;\n}\n"));
119120
}
120121

121122
@Test
122123
public void createLengthFilterInstancesIndex() {
123124
String result = generateTypescriptInterpretation("length(Instances[?LifecycleState==\"InService\"]) >= MinSize");
124125
assertThat(result,
125-
equalTo("let returnComparator = () => {\n let filterRes_2 = result.Instances.filter((element_1: any) => {\n return (element_1.LifecycleState == element_1.InService);\n });\n return (filterRes_2.length >= result.MinSize);\n}\n"));
126+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let filterRes_2 = result.Instances.filter((element_1: any) => {\n return (element_1.LifecycleState == element_1.InService);\n });\n return (filterRes_2.length >= result.MinSize);\n}\n"));
126127
}
127128

128129
@Test
129130
public void createComplexLengthFilterContainsIndex() {
130131
String result = generateTypescriptInterpretation("contains(AutoScalingGroups[].[length(Instances[?LifecycleState=='InService']) >= MinSize][], `false`)");
131132
assertThat(result,
132-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.AutoScalingGroups);\n let projection_3 = flat_1.map((element_2: any) => {\n let filterRes_5 = element_2.Instances.filter((element_4: any) => {\n return (element_4.LifecycleState == \"InService\");\n });\n let result_6 = [];\n result_6.push((filterRes_5.length >= element_2.MinSize));\n element_2 = result_6;\n return element_2;\n });\n let flat_7: any[] = [].concat(...projection_3);\n return flat_7.includes(false);\n}\n"));
133+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.AutoScalingGroups);\n let projection_3 = flat_1.map((element_2: any) => {\n let filterRes_5 = element_2.Instances.filter((element_4: any) => {\n return (element_4.LifecycleState == \"InService\");\n });\n let result_6 = [];\n result_6.push((filterRes_5.length >= element_2.MinSize));\n element_2 = result_6;\n return element_2;\n });\n let flat_7: any[] = [].concat(...projection_3);\n return flat_7.includes(false);\n}\n"));
133134
}
134135

135136
@Test
136137
public void createNotIndex() {
137138
String result = generateTypescriptInterpretation("!(length(items) == `0`)");
138139
assertThat(result,
139-
equalTo( "let returnComparator = () => {\n return (!(result.items.length == 0.0));\n}\n"));
140+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n return (!(result.items.length == 0.0));\n}\n"));
140141
}
141142

142143
@Test
143144
public void createOrIndex() {
144145
String result = generateTypescriptInterpretation("length(items[]) == `0` || length(foo) > `0`");
145146
assertThat(result,
146-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n return (((flat_1.length == 0.0) || (result.foo.length > 0.0)) && ((result.foo.length > 0.0) || (flat_1.length == 0.0))) ;\n}\n"));
147+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n return (((flat_1.length == 0.0) || (result.foo.length > 0.0)) && ((result.foo.length > 0.0) || (flat_1.length == 0.0))) ;\n}\n"));
147148
}
148149

149150
@Test
150151
public void createAndIndex() {
151152
String result = generateTypescriptInterpretation("length(items[]) == `0` && length(foo) > `0`");
152153
assertThat(result,
153-
equalTo("let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n return ((flat_1.length == 0.0) && (result.foo.length > 0.0));\n}\n"));
154+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let flat_1: any[] = [].concat(...result.items);\n return ((flat_1.length == 0.0) && (result.foo.length > 0.0));\n}\n"));
154155
}
155156

156157
@Test
157158
public void createComplexAndNotIndex() {
158159
String result = generateTypescriptInterpretation("(length(services[?!(length(deployments) == `1` && runningCount == desiredCount)]) == `0`)");
159160
assertThat(result,
160-
equalTo("let returnComparator = () => {\n let filterRes_2 = result.services.filter((element_1: any) => {\n return (!((element_1.deployments.length == 1.0) && (element_1.runningCount == element_1.desiredCount)));\n });\n return (filterRes_2.length == 0.0);\n}\n"));
161+
equalTo(CODEGEN_INDICATOR + "let returnComparator = () => {\n let filterRes_2 = result.services.filter((element_1: any) => {\n return (!((element_1.deployments.length == 1.0) && (element_1.runningCount == element_1.desiredCount)));\n });\n return (filterRes_2.length == 0.0);\n}\n"));
161162
}
162163
}

smithy-typescript-codegen/src/test/java/software/amazon/smithy/typescript/codegen/TypeScriptWriterTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.equalTo;
5+
import static software.amazon.smithy.typescript.codegen.TypeScriptWriter.CODEGEN_INDICATOR;
56

67
import org.junit.jupiter.api.Test;
78

@@ -12,7 +13,7 @@ public void writesDocStrings() {
1213
writer.writeDocs("These are the docs.\nMore.");
1314
String result = writer.toString();
1415

15-
assertThat(result, equalTo("/**\n * These are the docs.\n * More.\n */\n"));
16+
assertThat(result, equalTo(CODEGEN_INDICATOR + "/**\n * These are the docs.\n * More.\n */\n"));
1617
}
1718

1819
@Test
@@ -22,7 +23,7 @@ public void doesNotAddNewlineBetweenManagedAndExplicitImports() {
2223
writer.addImport("Baz", "Baz", "hello");
2324
String result = writer.toString();
2425

25-
assertThat(result, equalTo("import { Baz } from \"hello\";\nimport { Foo } from \"baz\";\n"));
26+
assertThat(result, equalTo(CODEGEN_INDICATOR + "import { Baz } from \"hello\";\nimport { Foo } from \"baz\";\n"));
2627
}
2728

2829
@Test
@@ -33,7 +34,7 @@ public void escapesDollarInDocStrings() {
3334
writer.writeDocs(docs);
3435
String result = writer.toString();
3536

36-
assertThat(result, equalTo("/**\n * " + docs + "\n */\n"));
37+
assertThat(result, equalTo(CODEGEN_INDICATOR + "/**\n * " + docs + "\n */\n"));
3738
}
3839

3940
@Test
@@ -44,7 +45,7 @@ public void escapesMultiLineCloseInDocStrings() {
4445
writer.writeDocs(docs);
4546
String result = writer.toString();
4647

47-
assertThat(result, equalTo("/**\n * This is *\\/ valid documentation.\n */\n"));
48+
assertThat(result, equalTo(CODEGEN_INDICATOR + "/**\n * This is *\\/ valid documentation.\n */\n"));
4849
}
4950

5051
@Test

0 commit comments

Comments
 (0)