首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala解析器剪切最后一个括号

Scala解析器剪切最后一个括号
EN

Stack Overflow用户
提问于 2014-08-28 10:57:25
回答 1查看 237关注 0票数 5
代码语言:javascript
复制
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
    }      

结果是:

代码语言:javascript
复制
scala> statements.head
res1: String =
libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map {
    (dependency) =>{
        dependency
    }

我期望:

代码语言:javascript
复制
libraryDependencies ++= Seq("org.scala-lang" % "scala-compiler" % "2.10.4") map {
    (dependency) =>{
        dependency
    }
}

如果我使用Tree:text.substring(t.pos.start, t.pos.end)中的位置,最后的方括号text.substring(t.pos.start, t.pos.end)(行尾)就会丢失

有任何建议如何从scala.reflect.api.Trees#Tree对象中提取所有文本吗?

更新

受影响的scala版本:

  • 2.10.6 - sbt 0.13.x所需经费
  • 2.11.8
  • 2.12.7

对于scala,2.10.6/2.12.7的结果与上面的输出相同。

向github添加项目

搜索解决方案的示例项目

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-12 06:42:09

为了将问题从未回答的列表中移开,您可以参考已预订的问题:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25547149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档