summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-17 10:05:28 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-17 10:05:28 +0100
commit23985cff89b03270d429aedd1a7b5ccb0ec66073 (patch)
treea12843a27b00d7f4e89730db9851b219e7c6b89c /src/main
parentfe9d820d35bd3759d390593fc08ec241fbb21680 (diff)
Introduce DocComment
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/DocComment.java9
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedStructDefinitionNode.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaClassDeclaration.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaInterfaceDeclaration.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaRecordDeclaration.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java9
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();