From 2b4b4fe180b23da67d05ef7376e879c00201e22c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 27 Sep 2026 23:02:47 +0100 Subject: Add TypedDatabaseSchemaDefinitionNode --- .../typed/TypedDatabaseSchemaDefinitionNode.java | 44 ++++++++++++++++++++++ .../ast/typed/TypedNamespaceStatementNode.java | 2 +- .../JavaPreciselyMatchersGenerator.java | 3 ++ .../javatransient0/JavaTransient0Generator.java | 4 ++ .../generators/javatypes/JavaTypesGenerator.java | 3 ++ .../rusttransient0/RustTransient0Generator.java | 4 ++ .../generators/rusttypes/RustTypesGenerator.java | 4 ++ .../typescripttypes/TypescriptTypesGenerator.java | 4 ++ .../compiler/typechecker/TypeChecker.java | 15 +++++++- 9 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedDatabaseSchemaDefinitionNode.java (limited to 'src/main/java') 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 -- cgit v1.2.3