summaryrefslogtreecommitdiff
path: root/docs-target/src/main/scala/chisel3/docs/VerilogMdocModifier.scala
blob: f41fff73ac29019bda02871794fcc6ba57e3bf60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package chisel3.docs

import java.nio.file.Files
import java.nio.file.Paths
import mdoc._
import scala.meta.inputs.Position

/** Custom modifier for rendering Chisel-generated Verilog
  *
  * See chisel3/docs/README.md for use
  */
class VerilogMdocModifier extends PostModifier {
  val name = "verilog"
  def process(ctx: PostModifierContext): String = {
    val result =
      ctx.variables.foldLeft(Option("")) {
        case (Some(acc), variable) if variable.staticType == "String" =>
          Some(acc + variable.runtimeValue)
        case (Some(_), badVar) =>
          ctx.reporter.error(
            badVar.pos,
            s"""type mismatch:
               |expected: String
               |received: ${badVar.runtimeValue}""".stripMargin
          )
          None
        case (None, _) => None
      }
    result match {
      case Some(content) => s"```verilog\n$content```\n"
      case None          => ""
    }
  }
}