From 5648afd950141a582b4585be8a30b7b3f808e35a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 May 2026 15:23:52 +0100 Subject: Parse doc comment for struct definitions --- .../zwobble/hobgoblin/compiler/parser/Parser.java | 28 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/main') 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 ); } -- cgit v1.2.3