Skip to content

Commit

Permalink
FormatTokens: modify getHead/getLast
Browse files Browse the repository at this point in the history
  • Loading branch information
kitbellew committed Mar 16, 2024
1 parent 6fc68a6 commit 7460512
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 32 deletions.
Expand Up @@ -855,7 +855,7 @@ class FormatOps(
}

def getLastEnclosedToken(tree: Tree): T = {
tokens.getLastExceptParen(tree.tokens).left
tokens.getLastExceptParen(tree).left
}

@tailrec
Expand Down
Expand Up @@ -138,9 +138,10 @@ class FormatTokens(leftTok2tok: Map[TokenHash, Int])(
.flatMap(getClosingIfInParens(getLastNonTrivial(tokens, tree)))
}

def getLastExceptParen(tokens: Tokens): FormatToken = {
val last = getLastNonTrivial(tokens)
getClosingIfInParens(last)(getHead(tokens)).getOrElse(last)
def getLastExceptParen(tree: Tree): FormatToken = {
val tokens = tree.tokens
val last = getLastNonTrivial(tokens, tree)
getClosingIfInParens(last)(getHead(tokens, tree)).getOrElse(last)
}

@tailrec
Expand Down Expand Up @@ -207,45 +208,33 @@ class FormatTokens(leftTok2tok: Map[TokenHash, Int])(
else getOnOrAfterOwned(nextFt, tree)
}

private def getHead(tokens: Tokens): FormatToken =
after(tokens.head)
def getHead(tokens: Tokens, tree: Tree): FormatToken =
getOnOrBeforeOwned(getHead(tokens), tree)
getOnOrBeforeOwned(after(tokens.head), tree)
@inline def getHead(tree: Tree): FormatToken =
getHead(tree.tokens, tree)

private def getHeadOpt(tokens: Tokens): Option[FormatToken] =
tokens.headOption.map(after)
def getHeadOpt(tokens: Tokens, tree: Tree): Option[FormatToken] =
getHeadOpt(tokens).map(getOnOrBeforeOwned(_, tree))
tokens.headOption.map(x => getOnOrBeforeOwned(after(x), tree))
@inline def getHeadOpt(tree: Tree): Option[FormatToken] =
getHeadOpt(tree.tokens, tree)

private def getLast(tokens: Tokens): FormatToken =
apply(findLastVisibleToken(tokens))
def getLast(tokens: Tokens, tree: Tree): FormatToken =
getOnOrAfterOwned(getLast(tokens), tree)
getOnOrAfterOwned(apply(findLastVisibleToken(tokens)), tree)
@inline def getLast(tree: Tree): FormatToken =
getLast(tree.tokens, tree)

private def getLastOpt(tokens: Tokens): Option[FormatToken] =
findLastVisibleTokenOpt(tokens).map(apply)
def getLastOpt(tokens: Tokens, tree: Tree): Option[FormatToken] =
getLastOpt(tokens).map(getOnOrAfterOwned(_, tree))
findLastVisibleTokenOpt(tokens).map(x => getOnOrAfterOwned(apply(x), tree))
@inline def getLastOpt(tree: Tree): Option[FormatToken] =
getLastOpt(tree.tokens, tree)

private def getLastNonTrivial(tokens: Tokens): FormatToken =
apply(findLastNonTrivialToken(tokens))
def getLastNonTrivial(tokens: Tokens, tree: Tree): FormatToken =
getOnOrAfterOwned(getLastNonTrivial(tokens), tree)
prevNonComment(getLast(tokens, tree))
def getLastNonTrivial(tree: Tree): FormatToken =
getLastNonTrivial(tree.tokens, tree)

private def getLastNonTrivialOpt(tokens: Tokens): Option[FormatToken] =
findLastNonTrivialTokenOpt(tokens).map(apply)
def getLastNonTrivialOpt(tokens: Tokens, tree: Tree): Option[FormatToken] =
getLastNonTrivialOpt(tokens).map(getOnOrAfterOwned(_, tree))
getLastOpt(tokens, tree).map(prevNonComment)
def getLastNonTrivialOpt(tree: Tree): Option[FormatToken] =
getLastNonTrivialOpt(tree.tokens, tree)

Expand Down Expand Up @@ -278,6 +267,8 @@ class FormatTokens(leftTok2tok: Map[TokenHash, Int])(
/* the following methods return the last format token such that
* its `left` is before the parameter and is not a comment */
@inline
def tokenOnOrBefore(token: Token): FormatToken = prevNonComment(before(token))
@inline
def tokenBefore(token: Token): FormatToken = prevNonComment(justBefore(token))
@inline
def tokenBefore(tree: Tree): FormatToken =
Expand Down
Expand Up @@ -62,18 +62,9 @@ object TokenOps {
def findLast[A](seq: Seq[A])(cond: A => Boolean): Option[A] =
seq.reverseIterator.find(cond)

def findLastNonTrivialTokenOpt(tokens: Tokens): Option[Token] =
findLast(tokens) {
case Trivia() | _: EOF => false
case _ => true
}

def findLastNonTrivialToken(tokens: Tokens): Token =
findLastNonTrivialTokenOpt(tokens).getOrElse(tokens.last)

def findLastVisibleTokenOpt(tokens: Tokens): Option[Token] =
findLast(tokens) {
case Whitespace() | _: EOF => false
case _: Whitespace | _: EOF => false
case _ => true
}

Expand Down

0 comments on commit 7460512

Please sign in to comment.