diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-12-12 16:56:02 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-12 16:56:02 -0800 |
commit | 9ba4cb69331386dfde9bac69dc2d5b22401face3 (patch) | |
tree | 120349e8015ae5717d36bd44209cde6ff9543518 /scalalib/src/dependency/versions/VersionParser.scala | |
parent | ea7fceb6e56f53bde3517586dfc57e10a605a524 (diff) | |
download | mill-9ba4cb69331386dfde9bac69dc2d5b22401face3.tar.gz mill-9ba4cb69331386dfde9bac69dc2d5b22401face3.tar.bz2 mill-9ba4cb69331386dfde9bac69dc2d5b22401face3.zip |
collapse boilerplate folder structure within src/ folders (#505)
* collapse boilerplate folder structure within src/ folders
* .
Diffstat (limited to 'scalalib/src/dependency/versions/VersionParser.scala')
-rw-r--r-- | scalalib/src/dependency/versions/VersionParser.scala | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/scalalib/src/dependency/versions/VersionParser.scala b/scalalib/src/dependency/versions/VersionParser.scala new file mode 100644 index 00000000..10aebd73 --- /dev/null +++ b/scalalib/src/dependency/versions/VersionParser.scala @@ -0,0 +1,30 @@ +package mill.scalalib.dependency.versions + +import fastparse._, NoWhitespace._ + +private[dependency] object VersionParser { + + 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 def tokenParser[_: P] = + CharPred(c => c != '.' && c != '-' && c != '+').rep(1).! + private def tokenPartParser[_: P] = + tokenParser.rep(sep = CharIn(".\\-")) + + private def firstPartParser[_: P] = + P(CharIn(".\\-") ~ tokenPartParser).? + + private def secondPartParser[_: P] = + P("+" ~ tokenPartParser).? + + 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])] = + fastparse.parse(text, versionParser(_)) +} |