summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/02-sum/src/shapes.hob1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java7
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserSumDefinitionTests.java18
3 files changed, 23 insertions, 3 deletions
diff --git a/examples/02-sum/src/shapes.hob b/examples/02-sum/src/shapes.hob
index 08336c5..d5042e5 100644
--- a/examples/02-sum/src/shapes.hob
+++ b/examples/02-sum/src/shapes.hob
@@ -1,3 +1,4 @@
+/// A 2D shape.
sum Shape {
variant Rectangle;
variant Triangle;
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 49464b6..c50c4d6 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java
@@ -54,7 +54,7 @@ public class Parser {
if (tokens.isNext(TokenType.KEYWORD_STRUCT)) {
return parseStructDefinition(tokens, docComment);
} else if (tokens.isNext(TokenType.KEYWORD_SUM)) {
- return parseSumDefinition(tokens);
+ return parseSumDefinition(tokens, docComment);
} else {
throw new UnsupportedOperationException("TODO");
}
@@ -130,7 +130,8 @@ public class Parser {
}
private static UntypedSumDefinitionNode parseSumDefinition(
- TokenIterator tokens
+ TokenIterator tokens,
+ String docComment
) {
var start = tokens.startPosition();
@@ -152,7 +153,7 @@ public class Parser {
return new UntypedSumDefinitionNode(
name.charSequence().toString(),
variants,
- "",
+ docComment,
source
);
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserSumDefinitionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserSumDefinitionTests.java
index 825511e..c512c6f 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserSumDefinitionTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserSumDefinitionTests.java
@@ -79,4 +79,22 @@ public class ParserSumDefinitionTests {
))
));
}
+
+ @Test
+ public void sumWithDocComment() {
+ var source = """
+ /// A 2D shape.
+ sum Shape {
+ }""";
+
+ var node = parseString(
+ source,
+ Parser::parseNamespaceStatement
+ );
+
+ assertThat(node, instanceOf(
+ UntypedSumDefinitionNode.class,
+ has("docComment", UntypedSumDefinitionNode::docComment, equalTo("A 2D shape.\n"))
+ ));
+ }
}