Skip to content

Instantly share code, notes, and snippets.

@rkrzewski
Last active August 29, 2015 14:04
Show Gist options
  • Select an option

  • Save rkrzewski/71b515e2c605220b8625 to your computer and use it in GitHub Desktop.

Select an option

Save rkrzewski/71b515e2c605220b8625 to your computer and use it in GitHub Desktop.
def splitExpressions(lines: Seq[String]): (Seq[(String, Int)], Seq[(String, LineRange)]) =
{
val blank = (_: String).forall(isSpace)
val isImport = firstNonSpaceIs("import ")
val comment = firstNonSpaceIs("//")
val blankOrComment = or(blank, comment)
val importOrBlank = fstS(or(blankOrComment, isImport))
import scala.reflect.runtime._
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox
import scala.reflect.internal.Trees
val cm = universe.runtimeMirror(this.getClass.getClassLoader)
val tb = cm.mkToolBox(options = "-Yrangepos")
val merged = lines.mkString("\n")
val parsed = tb.parse(merged)
println(parsed)
val parsedExpressions = parsed match {
case apply: Apply =>
Seq(apply)
case Block(stmt, expr) =>
stmt :+ expr
}
//val (imports, settings) = lines.zipWithIndex span importOrBlank
//(imports filterNot fstS(blankOrComment), groupedLines(settings, blank, blankOrComment))
(Seq(), parsedExpressions map (t => (merged.substring(t.pos.start, t.pos.end), LineRange(t.pos.start, t.pos.end))))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment