diff options
Diffstat (limited to 'src/main/java')
10 files changed, 34 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/DocComment.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/DocComment.java new file mode 100644 index 0000000..f7a8ac2 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/DocComment.java @@ -0,0 +1,9 @@ +package org.zwobble.hobgoblin.compiler.ast; + +public record DocComment(String value) { + public static final DocComment EMPTY = new DocComment(""); + + public Iterable<String> lines() { + return () -> value.lines().iterator(); + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java index 0472496..dc9a8fe 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.ast.typed; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.sources.Source; import org.zwobble.hobgoblin.compiler.types.StructType; @@ -8,7 +9,7 @@ import java.util.List; public record TypedStructDefinitionNode( StructType type, List<TypedStructFieldDefinitionNode> fields, - String docComment, + DocComment docComment, Source source ) implements TypedNamespaceStatementNode { public String name() { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java index d795430..4022bdd 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.ast.typed; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.sources.Source; import org.zwobble.hobgoblin.compiler.types.SumType; @@ -8,7 +9,7 @@ import java.util.List; public record TypedSumDefinitionNode( SumType type, List<TypedSumVariantDefinitionNode> variants, - String docComment, + DocComment docComment, Source source ) implements TypedNamespaceStatementNode { public String name() { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedStructDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedStructDefinitionNode.java index 139db67..179aca2 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedStructDefinitionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedStructDefinitionNode.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.sources.Source; import java.util.List; @@ -7,7 +8,7 @@ import java.util.List; public record UntypedStructDefinitionNode( String name, List<UntypedStructFieldDefinitionNode> fields, - String docComment, + DocComment docComment, Source source ) implements UntypedNamespaceStatementNode { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java index 6ffcb6f..842dc0c 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.sources.Source; import java.util.List; @@ -7,7 +8,7 @@ import java.util.List; public record UntypedSumDefinitionNode( String name, List<UntypedSumVariantDefinitionNode> variants, - String docComment, + DocComment docComment, Source source ) implements UntypedNamespaceStatementNode { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java index fed544d..adf231d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.output.lang.java; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.output.CodeWriter; import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*; @@ -44,9 +45,8 @@ public class JavaWriter implements AutoCloseable { } } - private void writeDocComment(String docComment) throws IOException { - Iterable<String> lines = docComment.lines()::iterator; - for (var line : lines) { + private void writeDocComment(DocComment docComment) throws IOException { + for (var line : docComment.lines()) { this.writer.write("/// "); this.writer.write(line); this.writer.write("\n"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java index 298e31f..948be8d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java @@ -1,10 +1,12 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; +import org.zwobble.hobgoblin.compiler.ast.DocComment; + import java.util.List; public record JavaClassDeclaration( String name, List<JavaClassBodyDeclaration> body, - String docComment + DocComment docComment ) implements JavaTypeDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java index 2fe3a8d..2f5a5b4 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java @@ -1,10 +1,12 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; +import org.zwobble.hobgoblin.compiler.ast.DocComment; + import java.util.List; public record JavaInterfaceDeclaration( String name, List<JavaTypeRef> permitsTypes, - String docComment + DocComment docComment ) implements JavaTypeDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java index 10b80a5..4d7e033 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java @@ -1,11 +1,13 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; +import org.zwobble.hobgoblin.compiler.ast.DocComment; + import java.util.List; public record JavaRecordDeclaration( String name, List<JavaRecordComponent> components, List<JavaTypeRef> implementsTypes, - String docComment + DocComment docComment ) implements JavaTypeDeclaration { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java index c50c4d6..d2594ee 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java @@ -1,5 +1,6 @@ package org.zwobble.hobgoblin.compiler.parser; +import org.zwobble.hobgoblin.compiler.ast.DocComment; import org.zwobble.hobgoblin.compiler.ast.untyped.*; import org.zwobble.hobgoblin.compiler.sources.FileFragmentSource; import org.zwobble.hobgoblin.compiler.sources.Source; @@ -60,7 +61,7 @@ public class Parser { } } - private static String parseDocComment(TokenIterator tokens) { + private static DocComment parseDocComment(TokenIterator tokens) { var docComment = new StringBuilder(); while (tokens.isNext(TokenType.DOC_COMMENT)) { @@ -76,12 +77,12 @@ public class Parser { docComment.append(docCommentContents); } - return docComment.toString(); + return new DocComment(docComment.toString()); } private static UntypedStructDefinitionNode parseStructDefinition( TokenIterator tokens, - String docComment + DocComment docComment ) { var start = tokens.startPosition(); @@ -131,7 +132,7 @@ public class Parser { private static UntypedSumDefinitionNode parseSumDefinition( TokenIterator tokens, - String docComment + DocComment docComment ) { var start = tokens.startPosition(); |
