diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-10 15:23:52 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-10 15:23:52 +0100 |
| commit | 5648afd950141a582b4585be8a30b7b3f808e35a (patch) | |
| tree | c61acb992d75e7b9e544837f11cc1b62af0a6c89 /src/main/java | |
| parent | 193a62fa52e360ee76cca3d0f6bdbe2f6a69602a (diff) | |
Parse doc comment for struct definitions
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java | 28 |
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 ); } |
