From 7992997ac14894d0fbd8028a1f48768387fceab2 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Fri, 28 Jun 2013 12:32:44 -0400 Subject: [PATCH] refined auto project ID to prepend 'root-' if initial character is numeric --- main/src/main/scala/sbt/Project.scala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index 3926d2dd1..cca59d601 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -163,19 +163,20 @@ object Project extends ProjectExtra /** Returns None if `id` is a valid Project ID or Some containing the parser error message if it is not.*/ def validProjectID(id: String): Option[String] = DefaultParsers.parse(id, DefaultParsers.ID).left.toOption - + private[this] def validProjectIDStart(id: String): Boolean = DefaultParsers.parse(id, DefaultParsers.IDStart).isRight /** Constructs a valid Project ID based on `id` and returns it in Right or returns the error message in Left if one cannot be constructed.*/ def normalizeProjectID(id: String): Either[String, String] = { - // TODO: better attempt - val attempt = id.toLowerCase.replaceAll("""\W+""", "-") - validProjectID(attempt).toLeft(attempt) + val attempt = normalizeBase(id) + val refined = if(!validProjectIDStart(attempt.substring(0, 1)) ) "root-" + attempt else attempt + validProjectID(refined).toLeft(refined) } + private[this] def normalizeBase(s: String) = s.toLowerCase.replaceAll("""\W+""", "-") /** Normalize a String so that it is suitable for use as a dependency management module identifier. * This is a best effort implementation, since valid characters are not documented or consistent.*/ - def normalizeModuleID(id: String): String = id.toLowerCase.replaceAll("""\W+""", "-") + def normalizeModuleID(id: String): String = normalizeBase(id) def resolved(id: String, base: File, aggregate: => Seq[ProjectRef], dependencies: => Seq[ResolvedClasspathDependency], delegates: => Seq[ProjectRef], settings: Seq[Def.Setting[_]], configurations: Seq[Configuration], auto: AddSettings): ResolvedProject =