summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-30 11:32:18 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-30 13:28:46 +0100
commitcfb59a62fbdcbecb3b842e3df0bea3b6d159007c (patch)
treecc2a19bd88a58142bd3934c7f7d82f03de06d071 /src
parenta7d5133ac7cc82e3826f90d2e5f1ca5cd3f08676 (diff)
Add explicit visibility to TypeScript AST
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java15
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java22
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java26
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java15
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriterTests.java30
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructorMatcher.java6
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclarationMatcher.java6
8 files changed, 93 insertions, 29 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
index 68fe74d..f9ccc92 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
@@ -111,12 +111,14 @@ public class TypescriptTypesGenerator implements Generator {
for (var field : structDefinition.fields().orElse(List.of())) {
body.add(new TypescriptClassFieldDeclaration(
this.typescriptGenerator.generateFieldName(field.name()),
+ TypescriptVisibility.PUBLIC,
Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value())),
Optional.empty()
));
}
body.add(new TypescriptClassConstructor(
+ TypescriptVisibility.PUBLIC,
structDefinition.fields().orElse(List.of()).stream()
.map(field -> new TypescriptParam(
this.typescriptGenerator.generateFieldName(field.name()),
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
index 99ad2e4..cc30112 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriter.java
@@ -142,7 +142,8 @@ public class TypescriptWriter implements AutoCloseable {
}
private void writeClassConstructor(TypescriptClassConstructor constructor) throws IOException {
- this.writer.write("constructor(");
+ this.writeVisibility(constructor.visibility());
+ this.writer.write(" constructor(");
writeWithSeparator(
constructor.params(),
@@ -172,6 +173,8 @@ public class TypescriptWriter implements AutoCloseable {
private void writeClassFieldDeclaration(
TypescriptClassFieldDeclaration fieldDeclaration
) throws IOException {
+ this.writeVisibility(fieldDeclaration.visibility());
+ this.writer.write(" ");
this.writeIdentifier(fieldDeclaration.name());
if (fieldDeclaration.type().isPresent()) {
@@ -198,6 +201,16 @@ public class TypescriptWriter implements AutoCloseable {
}
}
+ // == Visibility ==
+
+ private void writeVisibility(TypescriptVisibility visibility) throws IOException {
+ this.writer.write(switch (visibility) {
+ case PRIVATE -> "private";
+ case PROTECTED -> "protected";
+ case PUBLIC -> "public";
+ });
+ }
+
// == Expressions ==
void writeExpression(TypescriptExpression expression) throws IOException {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
index 76fc97c..21d8c90 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructor.java
@@ -6,51 +6,57 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor imports
public record TypescriptClassConstructor(
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement {
public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(java.util.List.of(), java.util.List.of());
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility.PRIVATE, java.util.List.of(), java.util.List.of());
}
public record Builder(
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params,
java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor build() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor(visibility, params, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withVisibility(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withParams(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam> params) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam>(this.params);
params.add(param);
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam.Builder param) {
var params = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam>(this.params);
params.add(param.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder withBody(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement> body) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addBodyElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement bodyElement) {
var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement>(this.body);
body.add(bodyElement);
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder addBodyElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement.Builder bodyElement) {
var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement>(this.body);
body.add(bodyElement.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(params, body);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder(visibility, params, body);
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.Builder body
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
index c327724..7d30ea7 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclaration.java
@@ -7,52 +7,58 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
public record TypescriptClassFieldDeclaration(
org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name,
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement {
public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.arbitrary().build(), java.util.Optional.empty(), java.util.Optional.empty());
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility.PRIVATE, java.util.Optional.empty(), java.util.Optional.empty());
}
public record Builder(
org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name,
+ org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type,
java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue
) implements org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassElement.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration build() {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder name) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name.build(), type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name.build(), visibility, type, initialValue);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withVisibility(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility visibility) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, java.util.Optional.of(type), initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, java.util.Optional.of(type), initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withType(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression.Builder type) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, java.util.Optional.of(type.build()), initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, java.util.Optional.of(type.build()), initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression> initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, initialValue);
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, initialValue);
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, java.util.Optional.of(initialValue));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, java.util.Optional.of(initialValue));
}
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder withInitialValue(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression.Builder initialValue) {
- return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, type, java.util.Optional.of(initialValue.build()));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder(name, visibility, type, java.util.Optional.of(initialValue.build()));
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration.Builder body
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java
new file mode 100644
index 0000000..8bf3d67
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptVisibility.java
@@ -0,0 +1,15 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility imports
+
+public enum TypescriptVisibility {
+ PRIVATE,
+ PROTECTED,
+ PUBLIC
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility body
+}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriterTests.java
index bc02855..bca5ab3 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptWriterTests.java
@@ -76,9 +76,11 @@ public class TypescriptWriterTests {
var typescript = TypescriptClassDeclaration.arbitrary()
.withName(id("X"))
.addBodyElement(TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("a"))
)
.addBodyElement(TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("b"))
)
.build();
@@ -87,9 +89,9 @@ public class TypescriptWriterTests {
assertThat(string, equalTo("""
class X {
- a;
+ public a;
- b;
+ public b;
}"""
));
}
@@ -146,18 +148,21 @@ public class TypescriptWriterTests {
@Test
public void emptyClassConstructor() throws IOException {
- var typescript = TypescriptClassConstructor.arbitrary().build();
+ var typescript = TypescriptClassConstructor.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
+ .build();
var string = write(writer -> writer.writeClassElement(typescript));
assertThat(string, equalTo("""
- constructor() {
+ public constructor() {
}"""));
}
@Test
public void classConstructorWithParams() throws IOException {
var typescript = TypescriptClassConstructor.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.addParam(TypescriptParam.arbitrary()
.withName(id("a"))
.withType(ref("number"))
@@ -171,13 +176,14 @@ public class TypescriptWriterTests {
var string = write(writer -> writer.writeClassElement(typescript));
assertThat(string, equalTo("""
- constructor(a: number, b: string) {
+ public constructor(a: number, b: string) {
}"""));
}
@Test
public void classConstructorWithBody() throws IOException {
var typescript = TypescriptClassConstructor.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.addBodyElement(TypescriptExpressionStatement.arbitrary().withExpression(num(1)))
.addBodyElement(TypescriptExpressionStatement.arbitrary().withExpression(num(2)))
.build();
@@ -185,7 +191,7 @@ public class TypescriptWriterTests {
var string = write(writer -> writer.writeClassElement(typescript));
assertThat(string, equalTo("""
- constructor() {
+ public constructor() {
1.0;
2.0;
}"""));
@@ -196,41 +202,45 @@ public class TypescriptWriterTests {
@Test
public void classFieldDeclarationWithoutInitialValue() throws IOException {
var typescript = TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("a"))
.build();
var string = write(writer -> writer.writeClassElement(typescript));
- assertThat(string, equalTo("a;"));
+ assertThat(string, equalTo("public a;"));
}
@Test
public void classFieldDeclarationWithExplicitType() throws IOException {
var typescript = TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("a"))
.withType(ref("number"))
.build();
var string = write(writer -> writer.writeClassElement(typescript));
- assertThat(string, equalTo("a: number;"));
+ assertThat(string, equalTo("public a: number;"));
}
@Test
public void classFieldDeclarationWithInitialValue() throws IOException {
var typescript = TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("a"))
.withInitialValue(num(42))
.build();
var string = write(writer -> writer.writeClassElement(typescript));
- assertThat(string, equalTo("a = 42.0;"));
+ assertThat(string, equalTo("public a = 42.0;"));
}
@Test
public void classFieldDeclarationWithTypeAndInitialValue() throws IOException {
var typescript = TypescriptClassFieldDeclaration.arbitrary()
+ .withVisibility(TypescriptVisibility.PUBLIC)
.withName(id("a"))
.withType(ref("number"))
.withInitialValue(num(42))
@@ -238,7 +248,7 @@ public class TypescriptWriterTests {
var string = write(writer -> writer.writeClassElement(typescript));
- assertThat(string, equalTo("a: number = 42.0;"));
+ assertThat(string, equalTo("public a: number = 42.0;"));
}
private static TypescriptRef ref(String value) {
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructorMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructorMatcher.java
index 7157675..5110453 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructorMatcher.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassConstructorMatcher.java
@@ -30,6 +30,12 @@ public final class TypescriptClassConstructorMatcher implements org.zwobble.prec
return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor.class, this.submatchers);
}
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructorMatcher withVisibility(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility> visibility) {
+ var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor>>(this.submatchers);
+ submatchers.add(org.zwobble.precisely.Matchers.has("visibility", org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor::visibility, (org.zwobble.precisely.Matcher) visibility));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructorMatcher(submatchers);
+ }
+
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructorMatcher withParams(org.zwobble.precisely.Matcher<? super java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptParam>> params) {
var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor>>(this.submatchers);
submatchers.add(org.zwobble.precisely.Matchers.has("params", org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassConstructor::params, (org.zwobble.precisely.Matcher) params));
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclarationMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclarationMatcher.java
index 3942fb4..718e4ae 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclarationMatcher.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptClassFieldDeclarationMatcher.java
@@ -36,6 +36,12 @@ public final class TypescriptClassFieldDeclarationMatcher implements org.zwobble
return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclarationMatcher(submatchers);
}
+ public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclarationMatcher withVisibility(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptVisibility> visibility) {
+ var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration>>(this.submatchers);
+ submatchers.add(org.zwobble.precisely.Matchers.has("visibility", org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration::visibility, (org.zwobble.precisely.Matcher) visibility));
+ return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclarationMatcher(submatchers);
+ }
+
public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclarationMatcher withType(org.zwobble.precisely.Matcher<? super java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression>> type) {
var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration>>(this.submatchers);
submatchers.add(org.zwobble.precisely.Matchers.has("type", org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassFieldDeclaration::type, (org.zwobble.precisely.Matcher) type));