All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalariform.lexer.HiddenTokens.scala Maven / Gradle / Ivy

The newest version!
package scalariform.lexer

import scalariform.lexer.Tokens._
import scalariform.utils.Utils

class HiddenTokens(val tokens: List[HiddenToken]) extends Iterable[HiddenToken] {

  def removeInitialWhitespace = new HiddenTokens(tokens.dropWhile(_.isInstanceOf[Whitespace]))

  def iterator: Iterator[HiddenToken] = tokens.iterator

  val comments: List[Comment] = tokens collect { case comment:  Comment ⇒ comment }

  val scalaDocComments: List[ScalaDocComment] = tokens collect { case comment @ ScalaDocComment(_) ⇒ comment }

  val whitespaces: List[Whitespace] = tokens collect { case whitespace @ Whitespace(_) ⇒ whitespace }

  def firstTokenOption = tokens.headOption
  def lastTokenOption = tokens.lastOption

  def containsNewline = text contains '\n'

  def containsComment = comments.nonEmpty

  lazy val text = tokens.map(_.token.getText).mkString

  lazy val newlines: Option[Token] =
    if (containsNewline) {
      require(tokens.nonEmpty)
      val tokenType = if (text matches HiddenTokens.BLANK_LINE_PATTERN) NEWLINES else NEWLINE
      val first = tokens.head.token
      val last = tokens.last.token
      val token = new Token(tokenType, text, first.getStartIndex, last.getStopIndex)
      Some(token)
    } else
      None

  def rawTokens = tokens.map { _.token }

}

object HiddenTokens {

  val BLANK_LINE_PATTERN = """(?s).*\n\s*\n.*"""

}

abstract sealed class HiddenToken(val token: Token) {
  lazy val newlineful = token.getText contains '\n'
  lazy val getText = token.getText
  def text = getText
}

case class Whitespace(override val token: Token) extends HiddenToken(token)

sealed abstract class Comment(token: Token) extends HiddenToken(token)

object Comment {
  def unapply(comment: Comment) = Some(comment.token)
}

case class SingleLineComment(override val token: Token) extends Comment(token)

case class MultiLineComment(override val token: Token) extends Comment(token)

case class ScalaDocComment(override val token: Token) extends Comment(token)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy