diff --git a/.gitignore b/.gitignore index e762de7f9..4d856c4e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ target/ __pycache__ +.idea +.idea_modules diff --git a/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala b/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala index 806332def..762e8085b 100644 --- a/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala +++ b/main/src/main/scala/sbt/SessionSettingsNoBlankies.scala @@ -18,16 +18,16 @@ object SessionSettingsNoBlankies { oldLinesToNew(newContent, lineMap.tail) } - private def toNewContent(content: List[String], tuple: (Int, List[(Int, List[String])])): List[String] = { - val (from, newSettingSeq) = tuple + private def toNewContent(content: List[String], setCommands: (Int, List[(Int, List[String])])): List[String] = { + val (from, newSettings) = setCommands - val newTreeStringSeqMap = newSettingSeq.seq.map { + val newTreeStringsMap = newSettings.map { case (_, lines) => toTreeStringMap(lines) } - val to = newSettingSeq.map(_._1).max + val to = newSettings.map(_._1).max val originalLine = content.slice(from - 1, to - 1) - val operations = newTreeStringSeqMap.flatMap { + val operations = newTreeStringsMap.flatMap { map => map.flatMap { case (name, (startIndex, statement)) => @@ -39,7 +39,7 @@ object SessionSettingsNoBlankies { } } } - val statements = originalLine.mkString("\n") + val statements = XmlContent.handleXmlContent(originalLine.mkString("\n")) val sortedOperations = operations.sortBy(_._1)(REVERSE_ORDERING_INT) val newContent = sortedOperations.foldLeft(statements) { case (acc, (startIndex, old, newStatement)) => @@ -58,8 +58,8 @@ object SessionSettingsNoBlankies { } private def toTreeStringMap(lines: List[String]) = { - - val trees = SplitExpressionsNoBlankies(new File("fake"), lines).settingsTrees + val split = SplitExpressionsNoBlankies(new File("fake"), lines) + val trees = split.settingsTrees val seq = trees.map { case (statement, tree) => (extractSettingName(tree), (tree.pos.start, statement)) diff --git a/main/src/main/scala/sbt/SplitExpressionsNoBlankies.scala b/main/src/main/scala/sbt/SplitExpressionsNoBlankies.scala index 14fa6285d..82bff4074 100644 --- a/main/src/main/scala/sbt/SplitExpressionsNoBlankies.scala +++ b/main/src/main/scala/sbt/SplitExpressionsNoBlankies.scala @@ -28,12 +28,12 @@ case class SplitExpressionsNoBlankies(file: File, lines: Seq[String]) { val toolbox = mirror.mkToolBox(options = "-Yrangepos") val indexedLines = lines.toIndexedSeq val original = indexedLines.mkString(END_OF_LINE) - val merged = handleXmlContent(original) + val modifiedContent = handleXmlContent(original) val fileName = file.getAbsolutePath val parsed = try { - toolbox.parse(merged) + toolbox.parse(modifiedContent) } catch { case e: ToolBoxError => val seq = toolbox.frontEnd.infos.map { i => @@ -41,7 +41,7 @@ case class SplitExpressionsNoBlankies(file: File, lines: Seq[String]) { } throw new MessageOnlyException( s"""====== - |$merged + |$modifiedContent |====== |${seq.mkString(EOL)}""".stripMargin) } @@ -58,7 +58,7 @@ case class SplitExpressionsNoBlankies(file: File, lines: Seq[String]) { } def convertImport(t: Tree): (String, Int) = - (merged.substring(t.pos.start, t.pos.end), t.pos.line - 1) + (modifiedContent.substring(t.pos.start, t.pos.end), t.pos.line - 1) /** * See BugInParser @@ -69,7 +69,7 @@ case class SplitExpressionsNoBlankies(file: File, lines: Seq[String]) { def parseStatementAgain(t: Tree, originalStatement: String): String = { val statement = util.Try(toolbox.parse(originalStatement)) match { case util.Failure(th) => - val missingText = tryWithNextStatement(merged, t.pos.end, t.pos.line, fileName, th) + val missingText = tryWithNextStatement(modifiedContent, t.pos.end, t.pos.line, fileName, th) originalStatement + missingText case _ => originalStatement @@ -79,7 +79,7 @@ case class SplitExpressionsNoBlankies(file: File, lines: Seq[String]) { def convertStatement(t: Tree): Option[(String, Tree, LineRange)] = if (t.pos.isDefined) { - val originalStatement = merged.substring(t.pos.start, t.pos.end) + val originalStatement = modifiedContent.substring(t.pos.start, t.pos.end) val statement = parseStatementAgain(t, originalStatement) val numberLines = statement.count(c => c == END_OF_LINE_CHAR) Some((statement, t, LineRange(t.pos.line - 1, t.pos.line + numberLines))) diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml index 752deca9b..a67818d62 100644 --- a/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml +++ b/main/src/test/resources/session-settings/1.sbt.txt_1/1.xml @@ -2,6 +2,6 @@ 1 2 - name := "alaMaKota" + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml index 7aebf36a6..20e5c790f 100644 --- a/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml +++ b/main/src/test/resources/session-settings/1.sbt.txt_1/2.xml @@ -2,11 +2,11 @@ 1 2 - name := "alaMaKota" + 25 26 - organization := "scalania" + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml b/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml new file mode 100644 index 000000000..efdba1fe1 --- /dev/null +++ b/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml @@ -0,0 +1,7 @@ + + + 4 + 11 + + + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml.result b/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml.result new file mode 100644 index 000000000..0120a790a --- /dev/null +++ b/main/src/test/resources/session-settings/1.sbt.txt_1/3.xml.result @@ -0,0 +1,21 @@ +name := "newName" +libraryDependencies := Seq("org.scala-sbt" %% "sbinary" % "0.4.1") + +lazy val checkPom = taskKey[Unit]("check pom to ensure no sections are generated"); checkPom := "OK";scalacOptions := Seq("-deprecation") + +val b = ( ) +val a = + + +/* + +*/ + + +organization := "jozwikr" // OK + +scalaVersion := "2.9.2" + +organization := "ololol" + + diff --git a/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml index 752deca9b..a67818d62 100644 --- a/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml +++ b/main/src/test/resources/session-settings/2.sbt.txt_1/1.xml @@ -2,6 +2,6 @@ 1 2 - name := "alaMaKota" + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/3.sbt.txt b/main/src/test/resources/session-settings/3.sbt.txt new file mode 100644 index 000000000..6db83e79c --- /dev/null +++ b/main/src/test/resources/session-settings/3.sbt.txt @@ -0,0 +1,16 @@ +import sbt._ + +val scmpom = taskKey[xml.NodeBuffer]("Node buffer") + +scmpom := + git@github.com:mohiva/play-html-compressor.git + scm:git:git@github.com:mohiva/play-html-compressor.git + + + + akkie + Christian Kaps + http://mohiva.com + + + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml b/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml new file mode 100644 index 000000000..9f7ba5288 --- /dev/null +++ b/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml @@ -0,0 +1,7 @@ + + + 5 + 18 + OK]]> + + \ No newline at end of file diff --git a/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml.result b/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml.result new file mode 100644 index 000000000..6b1956fb1 --- /dev/null +++ b/main/src/test/resources/session-settings/3.sbt.txt_1/1.xml.result @@ -0,0 +1,5 @@ +import sbt._ + +val scmpom = taskKey[xml.NodeBuffer]("Node buffer") + +scmpom := ( OK ) \ No newline at end of file diff --git a/main/src/test/scala/sbt/SessionSettingsSpec.scala b/main/src/test/scala/sbt/SessionSettingsSpec.scala index 7cdbdcf58..0f5097478 100644 --- a/main/src/test/scala/sbt/SessionSettingsSpec.scala +++ b/main/src/test/scala/sbt/SessionSettingsSpec.scala @@ -9,14 +9,14 @@ import scala.collection.immutable.{ SortedMap, TreeMap } import scala.io.Source import scala.xml.XML -abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec { +abstract class AbstractSessionSettingsSpec(folder: String, printDetails: Boolean = false) extends AbstractSpec { protected val rootPath = getClass.getResource("").getPath + folder println(s"Reading files from: $rootPath") protected val rootDir = new File(rootPath) "SessionSettings " should { "Be identical for empty map " in { - def unit(f: File) = Seq((Source.fromFile(f).getLines().toSeq, SortedMap.empty[Int, List[(Int, List[String])]])) + def unit(f: File) = Seq((Source.fromFile(f).getLines().toList, SortedMap.empty[Int, List[(Int, List[String])]])) runTestOnFiles(unit) } @@ -25,7 +25,7 @@ abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec } } - private def runTestOnFiles(expectedResultAndMap: File => Seq[(Seq[String], SortedMap[Int, List[(Int, List[String])]])]): MatchResult[GenTraversableOnce[File]] = { + private def runTestOnFiles(expectedResultAndMap: File => Seq[(List[String], SortedMap[Int, List[(Int, List[String])]])]): MatchResult[GenTraversableOnce[File]] = { val allFiles = rootDir.listFiles(new FilenameFilter() { def accept(dir: File, name: String) = name.endsWith(".sbt.txt") @@ -34,9 +34,11 @@ abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec file => val originalLines = Source.fromFile(file).getLines().toList foreach(expectedResultAndMap(file)) { - case (expectedResult, map) => - val result = SessionSettingsNoBlankies.oldLinesToNew(originalLines, map) - expectedResult === result + case (expectedResultList, map) => + val resultList = SessionSettingsNoBlankies.oldLinesToNew(originalLines, map) + val expected = SplitExpressionsNoBlankies(file, expectedResultList) + val result = SplitExpressionsNoBlankies(file, resultList) + result.settings must_== expected.settings } } } @@ -55,7 +57,7 @@ abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec }) files.map { xmlFile => val xml = XML.loadFile(xmlFile) - val result = Source.fromFile(xmlFile.getAbsolutePath + ".result").getLines().toSeq + val result = Source.fromFile(xmlFile.getAbsolutePath + ".result").getLines().toList val tupleCollection = (xml \\ "settings" \\ "setting").map { node => val set = (node \\ "set").text @@ -73,4 +75,4 @@ abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec } -class SessionSettingsSpec extends AbstractSessionSettingsSpec("../session-settings") +class SessionSettingsSpec extends AbstractSessionSettingsSpec("../session-settings") \ No newline at end of file