From d81273a0c68bbcd4193bc2a9ef3a365abce7b059 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 28 May 2011 17:02:16 -0400 Subject: [PATCH] fix issue with spaces on blank lines in build.sbt --- main/Build.scala | 14 +++++++++----- sbt/src/sbt-test/project/lib/build.sbt | 3 ++- sbt/src/sbt-test/project/lib/changes/build2.sbt | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/main/Build.scala b/main/Build.scala index 7c50ecd04..64849676e 100644 --- a/main/Build.scala +++ b/main/Build.scala @@ -97,13 +97,17 @@ object EvaluateConfigurations } result.value.asInstanceOf[Project.SettingsDefinition].settings } - private[this] def fstS(f: String => Boolean): ((String,Int)) => Boolean = { case (s,i) => f(s.trim) } + private[this] def isSpace = (c: Char) => Character isSpace c + private[this] def fstS(f: String => Boolean): ((String,Int)) => Boolean = { case (s,i) => f(s) } + private[this] def firstNonSpaceIs(lit: String) = (_: String).view.dropWhile(isSpace).startsWith(lit) + private[this] def or[A](a: A => Boolean, b: A => Boolean): A => Boolean = in => a(in) || b(in) def splitExpressions(lines: Seq[String]): (Seq[(String,Int)], Seq[(String,Int)]) = { - val blank = (_: String).isEmpty - val comment = (_: String).startsWith("//") - val blankOrComment = (s: String) => blank(s) || comment(s) - val importOrBlank = fstS(t => blankOrComment(t) || (t startsWith "import ")) + val blank = (_: String).forall(isSpace) + val isImport = firstNonSpaceIs("import ") + val comment = firstNonSpaceIs("//") + val blankOrComment = or(blank, comment) + val importOrBlank = fstS(or(blankOrComment, isImport)) val (imports, settings) = lines.zipWithIndex span importOrBlank (imports filterNot fstS( blankOrComment ), groupedLines(settings, blank, blankOrComment)) diff --git a/sbt/src/sbt-test/project/lib/build.sbt b/sbt/src/sbt-test/project/lib/build.sbt index f37933463..a0a9cc41f 100644 --- a/sbt/src/sbt-test/project/lib/build.sbt +++ b/sbt/src/sbt-test/project/lib/build.sbt @@ -1,5 +1,6 @@ crossPaths :== false +// the two spaces following this definition test that sbt handles extra whitespace on a line name :== "definition-lib-test" - + version :== "1.0" \ No newline at end of file diff --git a/sbt/src/sbt-test/project/lib/changes/build2.sbt b/sbt/src/sbt-test/project/lib/changes/build2.sbt index 1c7f181dd..a7f7c26b0 100644 --- a/sbt/src/sbt-test/project/lib/changes/build2.sbt +++ b/sbt/src/sbt-test/project/lib/changes/build2.sbt @@ -1,3 +1,3 @@ crossPaths :== false -TaskKey("use-jar") := { injar.Test.foo } +TaskKey[Option[String]]("use-jar") := { injar.Test.foo }