All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.build.preprocessing.MarkdownCodeBlockProcessor.scala Maven / Gradle / Ivy

package scala.build.preprocessing

import scala.build.EitherCps.{either, value}
import scala.build.Logger
import scala.build.errors.BuildException
import scala.build.internal.markdown.MarkdownCodeBlock

object MarkdownCodeBlockProcessor {
  def process(
    codeBlocks: Seq[MarkdownCodeBlock],
    reportingPath: Either[String, os.Path],
    scopePath: ScopePath,
    logger: Logger,
    maybeRecoverOnError: BuildException => Option[BuildException]
  ): Either[BuildException, PreprocessedMarkdown] = either {
    val (rawCodeBlocks, remaining)         = codeBlocks.partition(_.isRaw)
    val (testCodeBlocks, scriptCodeBlocks) = remaining.partition(_.isTest)
    def preprocessCodeBlocks(cbs: Seq[MarkdownCodeBlock])
      : Either[BuildException, PreprocessedMarkdownCodeBlocks] = either {
      val mergedDirectives: ExtractedDirectives = cbs
        .map { cb =>
          value {
            ExtractedDirectives.from(
              contentChars = cb.body.toCharArray,
              path = reportingPath,
              logger = logger,
              maybeRecoverOnError = maybeRecoverOnError
            )
          }
        }
        .fold(ExtractedDirectives.empty)(_ ++ _)
      PreprocessedMarkdownCodeBlocks(
        cbs,
        mergedDirectives
      )
    }
    PreprocessedMarkdown(
      value(preprocessCodeBlocks(scriptCodeBlocks)),
      value(preprocessCodeBlocks(rawCodeBlocks)),
      value(preprocessCodeBlocks(testCodeBlocks))
    )
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy