in rsc/src/main/scala/rsc/parse/scala/Scanners.scala [29:90]
def nextToken(): Unit = {
if (oneTokenBehind) {
oneTokenBehind = false
offset = scanner.start
token = if (overrideToken != -1) overrideToken else scanner.token
overrideToken = -1
value = scanner.value
adjustRegions(token)
} else {
lastOffset = scanner.end
scanner.next()
var firstNewLine = NoOffset
var secondNewLine = NoOffset
var prevTokenWasNewline = false
while (scanner.token == WHITESPACE ||
scanner.token == NEWLINE ||
scanner.token == COMMENT) {
if (scanner.token == NEWLINE) {
if (firstNewLine == NoOffset) {
firstNewLine = scanner.start
} else if (secondNewLine == NoOffset && prevTokenWasNewline) {
secondNewLine = scanner.start
}
}
prevTokenWasNewline = scanner.token == NEWLINE
scanner.next()
}
if (scanner.token == CASE) {
val snapshot = scanner.snapshot()
scanner.next()
while (scanner.token == WHITESPACE ||
scanner.token == NEWLINE ||
scanner.token == COMMENT) {
scanner.next()
}
if (scanner.token == CLASS) overrideToken = CASECLASS
else if (scanner.token == OBJECT) overrideToken = CASEOBJECT
else scanner.restore(snapshot)
}
if (firstNewLine != NoOffset &&
statTokens.canEnd.contains(in.token) &&
statTokens.canStart.contains(scanner.token) &&
(regions.isEmpty ||
regions.head == RBRACE ||
regions.head == ARROW && scanner.token == CASE)) {
oneTokenBehind = true
offset = firstNewLine
token = if (secondNewLine == NoOffset) NL1 else NL2
value = null
} else {
oneTokenBehind = false
offset = scanner.start
token = if (overrideToken != -1) overrideToken else scanner.token
overrideToken = -1
value = scanner.value
adjustRegions(token)
}
}
}