From 41eeede32bb189d41b4c7f1fb7dfef12057d438e Mon Sep 17 00:00:00 2001
From: Robin Stocker <robin@nibor.org>
Date: Wed, 17 Jan 2024 17:01:49 +1100
Subject: [PATCH] Fix empty list items

---
 .../renderer/markdown/CoreMarkdownNodeRenderer.java        | 7 ++++++-
 .../commonmark/renderer/markdown/MarkdownRendererTest.java | 3 +++
 .../renderer/markdown/SpecMarkdownRendererTest.java        | 2 +-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
index c583e657..28461c87 100644
--- a/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
+++ b/commonmark/src/main/java/org/commonmark/renderer/markdown/CoreMarkdownNodeRenderer.java
@@ -241,7 +241,12 @@ public class CoreMarkdownNodeRenderer extends AbstractVisitor implements NodeRen
             writer.pushPrefix(repeat(" ", contentIndent));
             pushedPrefix = true;
         }
-        visitChildren(listItem);
+        if (listItem.getFirstChild() == null) {
+            // Empty list item
+            writer.block();
+        } else {
+            visitChildren(listItem);
+        }
         if (pushedPrefix) {
             writer.popPrefix();
         }
diff --git a/commonmark/src/test/java/org/commonmark/renderer/markdown/MarkdownRendererTest.java b/commonmark/src/test/java/org/commonmark/renderer/markdown/MarkdownRendererTest.java
index 5b3148a2..06ad79c2 100644
--- a/commonmark/src/test/java/org/commonmark/renderer/markdown/MarkdownRendererTest.java
+++ b/commonmark/src/test/java/org/commonmark/renderer/markdown/MarkdownRendererTest.java
@@ -90,6 +90,9 @@ public class MarkdownRendererTest {
         // a paragraph in the list item! So it is important for the renderer to preserve the content indent of the list
         // item.
         assertRoundTrip(" -    one\n\n     two\n");
+
+        // Empty list
+        assertRoundTrip("- \n\nFoo\n");
     }
 
     @Test
diff --git a/commonmark/src/test/java/org/commonmark/renderer/markdown/SpecMarkdownRendererTest.java b/commonmark/src/test/java/org/commonmark/renderer/markdown/SpecMarkdownRendererTest.java
index fbd3bc1a..682fee9d 100644
--- a/commonmark/src/test/java/org/commonmark/renderer/markdown/SpecMarkdownRendererTest.java
+++ b/commonmark/src/test/java/org/commonmark/renderer/markdown/SpecMarkdownRendererTest.java
@@ -52,7 +52,7 @@ public class SpecMarkdownRendererTest {
         System.out.println("Failed examples by section (total " + fails.size() + "):");
         printCountsBySection(fails);
 
-        int expectedPassed = 613;
+        int expectedPassed = 618;
         assertTrue("Expected at least " + expectedPassed + " examples to pass but was " + passes.size(), passes.size() >= expectedPassed);
     }
 
-- 
GitLab