加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala解析器削减最后一个括号

发布时间:2020-12-16 18:28:26 所属栏目:安全 来源:网络整理
导读: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.uni
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
    }

结果是:

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

我期望:

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

如果我使用Tree对象中的位置,则会丢失最后一个括号}(和行尾):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

Example project for searching the solution

解决方法

只是将问题移出未答复的列表,可以参考为其预订的问题:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读