Skip to content

YamlFrontMatterBlock rendered as markdown does not preserve nested lists #293

Description

@olafurpg

I am using Parser and Formatter to transform markdown documents and produce markdown documents. The problem is that YAML frontmatter when using YamlFrontmatterExtension with nested lists are not preserved when rendering back into markdown.

  • Parser
  • Formatter
  • YamlFrontmatterExtension

A frontmatter block like this

---
linters:
  - name: linter
    rules:
      - name: UseIsNanNotNanComparison
        url:  https://github.com/HairyFotr/linter/blob/master/src/test/scala/LinterPluginTest.scala#L1930
---

renders into the following output

---
linters:
- name: linter
rules:
- name: UseIsNanNotNanComparison
url:  https://github.com/HairyFotr/linter/blob/master/src/test/scala/LinterPluginTest.scala#L1930
---

I expected the rendered output to be the same as the input.

Minimal reproduction code example in Scala.

    val settings = new MutableDataSet()
      .set(Parser.EXTENSIONS, List(YamlFrontMatterExtension.create()).asJava)
    val parser = Parser.builder(settings).build()
    val formatter = Formatter.builder(settings).build()
    val markdown =
      """|---
         |linters:
         |  - name: linter
         |    rules:
         |      - name: UseIsNanNotNanComparison
         |        url:  https://github.com/HairyFotr/linter/blob/master/src/test/scala/LinterPluginTest.scala#L1930
         |---
      """.stripMargin
    val parsedMarkdown = parser.parse(markdown)
    val renderedMarkdown = formatter.render(parsedMarkdown)
    assertNoDiff(renderedMarkdown, markdown)

A workaround is to unlink the frontmatter block and prepend it's chars to rendered output.

    val appendable = new java.lang.StringBuilder()
    document.getChildren.asScala.headOption match {
      case Some(f: YamlFrontMatterBlock) =>
        appendable.append(f.getChars)
        f.unlink()
      case _ =>
    }
    formatter.render(document, appendable)
    appendable.toString

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions