Scala analyzer cuts the last bracket

Welcome to Scala 2.12.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121). Type in expressions for evaluation. Or try :help. scala> :paste // Entering paste mode (ctrl-D to finish) import scala.reflect.runtime._ import scala.reflect.runtime.universe._ import scala.tools.reflect.ToolBox val mirror = universe.runtimeMirror(universe.getClass.getClassLoader) val toolbox = mirror.mkToolBox(options = "-Yrangepos") val text = """ |libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map { | (dependency) =>{ | dependency | } |} """.stripMargin val parsed = toolbox.parse(text) val parsedTrees = parsed match { case Block(stmt, expr) => stmt :+ expr case t: Tree => Seq(t) } val statements = parsedTrees.map { (t: Tree) => text.substring(t.pos.start, t.pos.end) } // Exiting paste mode, now interpreting. import scala.reflect.runtime._ import scala.reflect.runtime.universe._ import scala.tools.reflect.ToolBox mirror: reflect.runtime.universe.Mirror = JavaMirror with primordial classloader with boot classpath... scala> statements.head res0: String = libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map { (dependency) =>{ dependency } 

Result:

 scala> statements.head res1: String = libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map { (dependency) =>{ dependency } 

I expected:

 libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map { (dependency) =>{ dependency } } 

The last brackets } (and the end of the line) are missing if I use the position from the Tree object: text.substring(t.pos.start, t.pos.end)

Any suggestion on how to extract all text from scala.reflect.api.Trees # Tree object?

Update

Affected scala versions:

  • 2.10.6 - required for sbt 0.13.x
  • 2.11.8
  • 2.12.1

In the case of scala 2.10.6 / 2.12.1, the result is the same as in the output above.

Add project to github

Sample project for finding a solution

+5
source share
1 answer

To transfer a question from an unanswered list, you can refer to the problem reserved for it:

https://issues.scala-lang.org/browse/SI-8859

0
source

Source: https://habr.com/ru/post/1201324/


All Articles