summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-10 15:23:52 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-10 15:23:52 +0100
commit5648afd950141a582b4585be8a30b7b3f808e35a (patch)
treec61acb992d75e7b9e544837f11cc1b62af0a6c89 /src/main/java/org
parent193a62fa52e360ee76cca3d0f6bdbe2f6a69602a (diff)
Parse doc comment for struct definitions
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java28
1 files changed, 25 insertions, 3 deletions
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 88b0c5c..49464b6 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
@@ -49,8 +49,10 @@ public class Parser {
static UntypedNamespaceStatementNode parseNamespaceStatement(
TokenIterator tokens
) {
+ var docComment = parseDocComment(tokens);
+
if (tokens.isNext(TokenType.KEYWORD_STRUCT)) {
- return parseStructDefinition(tokens);
+ return parseStructDefinition(tokens, docComment);
} else if (tokens.isNext(TokenType.KEYWORD_SUM)) {
return parseSumDefinition(tokens);
} else {
@@ -58,8 +60,28 @@ public class Parser {
}
}
+ private static String parseDocComment(TokenIterator tokens) {
+ var docComment = new StringBuilder();
+
+ while (tokens.isNext(TokenType.DOC_COMMENT)) {
+ var docCommentToken = tokens.next(TokenType.DOC_COMMENT);
+ var docCommentLine = docCommentToken.charSequence();
+
+ var firstCharIndex = 3;
+ while (docCommentLine.charAt(firstCharIndex) == ' ') {
+ firstCharIndex++;
+ }
+
+ var docCommentContents = docCommentLine.subSequence(firstCharIndex, docCommentLine.length());
+ docComment.append(docCommentContents);
+ }
+
+ return docComment.toString();
+ }
+
private static UntypedStructDefinitionNode parseStructDefinition(
- TokenIterator tokens
+ TokenIterator tokens,
+ String docComment
) {
var start = tokens.startPosition();
@@ -81,7 +103,7 @@ public class Parser {
return new UntypedStructDefinitionNode(
name.charSequence().toString(),
fields,
- "",
+ docComment,
source
);
}