diff options
-rwxr-xr-x | build.sc | 2 | ||||
-rw-r--r-- | main/core/src/mill/util/ParseArgs.scala | 71 | ||||
-rw-r--r-- | main/core/src/mill/util/Scripts.scala | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/Versions.scala | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala | 26 | ||||
-rw-r--r-- | scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala | 5 |
6 files changed, 55 insertions, 53 deletions
@@ -88,7 +88,7 @@ object main extends MillModule { def ivyDeps = Agg( // Keep synchronized with ammonite in Versions.scala - ivy"com.lihaoyi:::ammonite:1.1.2-30-53edc31", + ivy"com.lihaoyi:::ammonite:1.3.0", // Necessary so we can share the JNA classes throughout the build process ivy"net.java.dev.jna:jna:4.5.0", ivy"net.java.dev.jna:jna-platform:4.5.0" diff --git a/main/core/src/mill/util/ParseArgs.scala b/main/core/src/mill/util/ParseArgs.scala index ae3b1685..fc1a8ab3 100644 --- a/main/core/src/mill/util/ParseArgs.scala +++ b/main/core/src/mill/util/ParseArgs.scala @@ -1,6 +1,6 @@ package mill.util -import fastparse.all._ +import fastparse._, NoWhitespace._ import mill.define.{Segment, Segments} object ParseArgs { @@ -69,41 +69,44 @@ object ParseArgs { } private object BraceExpansionParser { - val plainChars = + def plainChars[_: P] = P(CharsWhile(c => c != ',' && c != '{' && c != '}')).!.map(Fragment.Keep) - val toExpand: P[Fragment] = + def toExpand[_: P]: P[Fragment] = P("{" ~ braceParser.rep(1).rep(sep = ",") ~ "}").map( x => Fragment.Expand(x.toList.map(_.toList)) ) - val braceParser = P(toExpand | plainChars) + def braceParser[_: P] = P(toExpand | plainChars) + + def parser[_: P] = P(braceParser.rep(1).rep(sep = ",") ~ End).map { vss => + def unfold(vss: List[Seq[String]]): Seq[String] = { + vss match { + case Nil => Seq("") + case head :: rest => + for { + str <- head + r <- unfold(rest) + } yield + r match { + case "" => str + case _ => str + "," + r + } + } + } - val parser = P(braceParser.rep(1).rep(sep = ",") ~ End) + val stringss = vss.map(x => Fragment.unfold(x.toList)).toList + unfold(stringss) + } } private def parseBraceExpansion(input: String) = { - def unfold(vss: List[Seq[String]]): Seq[String] = { - vss match { - case Nil => Seq("") - case head :: rest => - for { - str <- head - r <- unfold(rest) - } yield - r match { - case "" => str - case _ => str + "," + r - } - } - } - BraceExpansionParser.parser - .map { vss => - val stringss = vss.map(x => Fragment.unfold(x.toList)).toList - unfold(stringss) - } - .parse(input) + + parse( + input, + BraceExpansionParser.parser(_) + ) } def extractSegments(selectorString: String): Either[String, (Option[Segments], Segments)] = @@ -112,23 +115,23 @@ object ParseArgs { case Parsed.Success(selector, _) => Right(selector) } - private val identChars = ('a' to 'z') ++ ('A' to 'Z') ++ ('0' to '9') ++ Seq('_', '-') - private val ident = P( CharsWhileIn(identChars) ).! + private def ident[_: P] = P( CharsWhileIn("a-zA-Z0-9_\\-") ).! + def standaloneIdent[_: P] = P(Start ~ ident ~ End ) def isLegalIdentifier(identifier: String): Boolean = - (Start ~ ident ~ End).parse(identifier).isInstanceOf[Parsed.Success[_]] + parse(identifier, standaloneIdent(_)).isInstanceOf[Parsed.Success[_]] private def parseSelector(input: String) = { - val ident2 = P( CharsWhileIn(identChars ++ ".") ).! - val segment = P( ident ).map( Segment.Label) - val crossSegment = P("[" ~ ident2.rep(1, sep = ",") ~ "]").map(Segment.Cross) - val simpleQuery = P(segment ~ ("." ~ segment | crossSegment).rep).map { + def ident2[_: P] = P( CharsWhileIn("a-zA-Z0-9_\\-.") ).! + def segment[_: P] = P( ident ).map( Segment.Label) + def crossSegment[_: P] = P("[" ~ ident2.rep(1, sep = ",") ~ "]").map(Segment.Cross) + def simpleQuery[_: P] = P(segment ~ ("." ~ segment | crossSegment).rep).map { case (h, rest) => Segments(h :: rest.toList:_*) } - val query = P( simpleQuery ~ ("/" ~/ simpleQuery).?).map{ + def query[_: P] = P( simpleQuery ~ ("/" ~/ simpleQuery).?).map{ case (q, None) => (None, q) case (q, Some(q2)) => (Some(q), q2) } - query.parse(input) + parse(input, query(_)) } } diff --git a/main/core/src/mill/util/Scripts.scala b/main/core/src/mill/util/Scripts.scala index 7dde8252..1815b6de 100644 --- a/main/core/src/mill/util/Scripts.scala +++ b/main/core/src/mill/util/Scripts.scala @@ -7,7 +7,7 @@ import ammonite.runtime.Evaluator.AmmoniteExit import ammonite.util.Name.backtickWrap import ammonite.util.Util.CodeSource import ammonite.util.{Name, Res, Util} -import fastparse.utils.Utils._ +import fastparse.internal.Util.literalize import mill.util.Router.{ArgSig, EntryPoint} /** diff --git a/scalalib/src/mill/scalalib/Versions.scala b/scalalib/src/mill/scalalib/Versions.scala index bfcc5495..6f1c729b 100644 --- a/scalalib/src/mill/scalalib/Versions.scala +++ b/scalalib/src/mill/scalalib/Versions.scala @@ -2,7 +2,7 @@ package mill.scalalib object Versions { // Keep synchronized with ammonite dependency in core in build.sc - val ammonite = "1.1.2-30-53edc31" + val ammonite = "1.3.0" // Keep synchronized with zinc dependency in scalalib.worker in build.sc val zinc = "1.2.1" } diff --git a/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala b/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala index d85c4276..10aebd73 100644 --- a/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala +++ b/scalalib/src/mill/scalalib/dependency/versions/VersionParser.scala @@ -1,30 +1,30 @@ package mill.scalalib.dependency.versions -import fastparse.all._ +import fastparse._, NoWhitespace._ private[dependency] object VersionParser { - private val numberParser = - P(CharIn('0' to '9').rep(1).!.map(_.toLong)) - private val numericPartParser = - P(numberParser ~ &(CharIn(".", "-", "+") | End)).rep(min = 1, sep = ".") + private def numberParser[_: P] = + P(CharIn("0-9").rep(1).!.map(_.toLong)) + private def numericPartParser[_: P] = + P(numberParser ~ &(CharIn(".\\-+") | End)).rep(min = 1, sep = ".") - private val tokenParser = + private def tokenParser[_: P] = CharPred(c => c != '.' && c != '-' && c != '+').rep(1).! - private val tokenPartParser = - tokenParser.rep(sep = CharIn(".", "-")) + private def tokenPartParser[_: P] = + tokenParser.rep(sep = CharIn(".\\-")) - private val firstPartParser = - P(CharIn(".", "-") ~ tokenPartParser).? + private def firstPartParser[_: P] = + P(CharIn(".\\-") ~ tokenPartParser).? - private val secondPartParser = + private def secondPartParser[_: P] = P("+" ~ tokenPartParser).? - private val versionParser = + private def versionParser[_: P] = P(numericPartParser ~ firstPartParser ~ secondPartParser).map { case (a, b, c) => (a, b.getOrElse(Seq.empty), c.getOrElse(Seq.empty)) } def parse(text: String): Parsed[(Seq[Long], Seq[String], Seq[String])] = - versionParser.parse(text) + fastparse.parse(text, versionParser(_)) } diff --git a/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala b/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala index 8bc1a992..b916c86f 100644 --- a/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala +++ b/scalalib/test/src/mill/scalalib/dependency/versions/VersionTests.scala @@ -29,7 +29,7 @@ package mill.scalalib.dependency.versions import utest._ -import fastparse.core.Parsed +import fastparse.Parsed object VersionTests extends TestSuite { @@ -120,8 +120,7 @@ object VersionTests extends TestSuite { } Symbol("parse 9.1-901-1.jdbc4") - { assertMatch(VersionParser.parse("9.1-901-1.jdbc4")) { - case Parsed - .Success((Seq(9, 1), Seq("901", "1", "jdbc4"), Seq()), _) => + case Parsed.Success((Seq(9, 1), Seq("901", "1", "jdbc4"), Seq()), _) => } } Symbol("parse 1.33.7+build/11.e0f985a") - { |