diff options
11 files changed, 140 insertions, 3 deletions
diff --git a/hobgoblin/src/ast/typed.hob b/hobgoblin/src/ast/typed.hob index e7dd72d..5581940 100644 --- a/hobgoblin/src/ast/typed.hob +++ b/hobgoblin/src/ast/typed.hob @@ -17,12 +17,19 @@ struct TypedNamespaceNode { } sum TypedNamespaceStatementNode { + variant TypedDatabaseSchemaDefinitionNode; variant TypedEnumDefinitionNode; variant TypedNativeTypeDefinitionNode; variant TypedStructDefinitionNode; variant TypedSumDefinitionNode; } +struct TypedDatabaseSchemaDefinitionNode { + field name: String; + field docComment: DocComment; + field source: Source; +} + struct TypedEnumDefinitionNode { field type: EnumType; field variants: List[TypedEnumVariantDefinitionNode]; diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNode.java new file mode 100644 index 0000000..2b9f394 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNode.java @@ -0,0 +1,44 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.ast.typed; + +// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode imports +// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode imports + +public record TypedDatabaseSchemaDefinitionNode( + String name, + org.zwobble.hobgoblin.compiler.ast.DocComment docComment, + org.zwobble.hobgoblin.compiler.sources.Source source +) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode { + public static org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder arbitrary() { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder("", org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource()); + } + + public record Builder( + String name, + org.zwobble.hobgoblin.compiler.ast.DocComment docComment, + org.zwobble.hobgoblin.compiler.sources.Source source + ) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder { + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode build() { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode(name, docComment, source); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder withName(String name) { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder(name, docComment, source); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder(name, docComment, source); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder(name, docComment, source); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.Builder body + } + + // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode body + // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode body +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java index ac01a37..8e8bd77 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java @@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.ast.typed; // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode imports // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode imports -public sealed interface TypedNamespaceStatementNode permits org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode { +public sealed interface TypedNamespaceStatementNode permits org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode { public interface Builder { public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode build(); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java index 6eb3ac1..1ae368e 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java @@ -85,6 +85,9 @@ public class JavaPreciselyMatchersGenerator implements Generator { for (var statement : namespace.body()) { switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + } + case TypedEnumDefinitionNode _ -> { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java index 40bfbdf..38bf9b6 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java @@ -647,6 +647,10 @@ public class JavaTransient0Generator implements Generator { Context context ) { return switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + yield List.of(); + } + case TypedEnumDefinitionNode enumDefinition -> { yield Lists.concat(List.of( List.of(generateEncodeEnumMethod(enumDefinition, context)), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 01a05d0..e3f54cf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -95,6 +95,9 @@ public class JavaTypesGenerator implements Generator { for (var statement : namespace.body()) { switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + } + case TypedEnumDefinitionNode enumDefinition -> { var javaCompilationUnit = new JavaCompilationUnit( generateEnumDefinition(enumDefinition, context) diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index 6f6740c..8ecc7cc 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -402,6 +402,10 @@ public class RustTransient0Generator implements Generator { TypesInfo typesInfo ) { return switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + yield Stream.of(); + } + case TypedEnumDefinitionNode enumDefinition -> { yield Stream.of( generateEncodeEnumFunction(enumDefinition), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java index 634dbff..f01e143 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java @@ -91,6 +91,10 @@ public class RustTypesGenerator implements Generator { TypesInfo typesInfo ) { return switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + yield List.of(); + } + case TypedEnumDefinitionNode enumDefinition -> { yield generateEnumDefinition(enumDefinition); } 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 10217fb..6dd8592 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 @@ -136,6 +136,10 @@ public class TypescriptTypesGenerator implements Generator { TypescriptGenerator.Context context ) { switch (statement) { + case TypedDatabaseSchemaDefinitionNode _ -> { + return List.of(); + } + case TypedEnumDefinitionNode enumDefinition -> { return generateEnumDefinition(enumDefinition); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 2a09a7e..e1c6854 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -112,8 +112,8 @@ public class TypeChecker { TypeCheckerNamespaceContext context ) { return switch (untyped) { - case UntypedDatabaseSchemaDefinitionNode _ -> - throw new UnsupportedOperationException("TODO"); + case UntypedDatabaseSchemaDefinitionNode untypedDatabaseSchemaDefinitionNode -> + defineDatabaseSchemaDefinition(untypedDatabaseSchemaDefinitionNode, context); case UntypedEnumDefinitionNode untypedEnumDefinitionNode -> defineEnumDefinition(untypedEnumDefinitionNode, context); @@ -129,6 +129,17 @@ public class TypeChecker { }; } + private static TypedNamespaceStatementNode defineDatabaseSchemaDefinition( + UntypedDatabaseSchemaDefinitionNode untyped, + TypeCheckerNamespaceContext context + ) { + return new TypedDatabaseSchemaDefinitionNode( + untyped.name(), + untyped.docComment(), + untyped.source() + ); + } + private static Type declareEnumDefinitionNode( UntypedNamespaceStatementNode untyped, TypeCheckerNamespaceContext context diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNodeMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNodeMatcher.java new file mode 100644 index 0000000..107873f --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNodeMatcher.java @@ -0,0 +1,53 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.ast.typed; + +// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher imports +// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher imports + +public final class TypedDatabaseSchemaDefinitionNodeMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> { + public static org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher isTypedDatabaseSchemaDefinitionNode() { + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher(java.util.List.of()); + } + + private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode>> submatchers; + + private TypedDatabaseSchemaDefinitionNodeMatcher( + java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode>> submatchers + ) { + this.submatchers = submatchers; + } + + public org.zwobble.precisely.MatchResult match(java.lang.Object actual) { + return this.toMatcher().match(actual); + } + + public org.zwobble.precisely.TextTree describe() { + return this.toMatcher().describe(); + } + + private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() { + return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode.class, this.submatchers); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher withName(org.zwobble.precisely.Matcher<? super String> name) { + var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode>>(this.submatchers); + submatchers.add(org.zwobble.precisely.Matchers.has("name", org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode::name, (org.zwobble.precisely.Matcher) name)); + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher(submatchers); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher withDocComment(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.DocComment> docComment) { + var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode>>(this.submatchers); + submatchers.add(org.zwobble.precisely.Matchers.has("docComment", org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode::docComment, (org.zwobble.precisely.Matcher) docComment)); + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher(submatchers); + } + + public org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher withSource(org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.sources.Source> source) { + var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode>>(this.submatchers); + submatchers.add(org.zwobble.precisely.Matchers.has("source", org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNode::source, (org.zwobble.precisely.Matcher) source)); + return new org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher(submatchers); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher body + // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedDatabaseSchemaDefinitionNodeMatcher body +} |
