From fca156e1ccecab0d2fc25cb1e48860fbe51b906a Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 6 Feb 2025 22:27:53 +0100 Subject: [PATCH] Add --use-scala-docstring-regexes option --- .../scala/de/plugh/asciiprooftree/Main.scala | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/scala/de/plugh/asciiprooftree/Main.scala b/src/main/scala/de/plugh/asciiprooftree/Main.scala index e814a07..6145a1a 100644 --- a/src/main/scala/de/plugh/asciiprooftree/Main.scala +++ b/src/main/scala/de/plugh/asciiprooftree/Main.scala @@ -7,13 +7,16 @@ import java.nio.file.{Files, Path} import scala.jdk.StreamConverters.* import scala.util.matching.Regex -val blockRe = "(?m)^(?(\\s*)§.*\\n(?:\\2§.*\\n)*)".r -val lineRe = "^\\s*§(?.*)$".r +val markerBlockRe = "(?m)^(?(\\s*)§.*\\n(?:\\2§.*\\n)*)".r +val markerLineRe = "^\\s*§(?.*)$".r +val scalaDocstringBlockRe = "(?m)^(\\s*)\\* \\{\\{\\{\\n(?(\\1\\*.*\\n)+?)\\1\\* }}}\\n".r +val scalaDocstringLineRe = "^\\s*\\*(?.*)$".r class Conf(args: Seq[String]) extends ScallopConf(args): val path: ScallopOption[Path] = trailArg[Path]() - val blockRegex: ScallopOption[String] = opt[String](default = Some(blockRe.regex)) - val lineRegex: ScallopOption[String] = opt[String](default = Some(lineRe.regex)) + val blockRegex: ScallopOption[String] = opt[String]() + val lineRegex: ScallopOption[String] = opt[String]() + val useScalaDocstringRegexes: ScallopOption[Boolean] = opt[Boolean]() val indent: ScallopOption[Int] = opt[Int](default = Some(2)) val noHeuristics: ScallopOption[Boolean] = opt[Boolean]() verify() @@ -21,12 +24,18 @@ class Conf(args: Seq[String]) extends ScallopConf(args): @main def main(args: String*): Unit = val conf = new Conf(args) + + val (defaultBlockRe, defaultLineRe) = + if conf.useScalaDocstringRegexes() then (scalaDocstringBlockRe, scalaDocstringLineRe) + else (markerBlockRe, markerLineRe) + val formatter = Formatter( - blockRe = Regex(conf.blockRegex()), - lineRe = Regex(conf.lineRegex()), + blockRe = conf.blockRegex.map(Regex(_)).getOrElse(defaultBlockRe), + lineRe = conf.lineRegex.map(Regex(_)).getOrElse(defaultLineRe), indent = conf.indent(), heuristics = !conf.noHeuristics(), ) + reformat(conf.path(), formatter) def reformat(path: Path, formatter: Formatter): Unit =