From 4642d96f3989626b40bb3acee34e97994ca63042 Mon Sep 17 00:00:00 2001 From: Ben Ogle & Nathan Sobo Date: Wed, 25 Jun 2014 13:11:38 -0700 Subject: [PATCH] Tokenize empty lines with a changed indent level synchronously --- src/tokenized-buffer.coffee | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/tokenized-buffer.coffee b/src/tokenized-buffer.coffee index 7650521f1..9702d83e0 100644 --- a/src/tokenized-buffer.coffee +++ b/src/tokenized-buffer.coffee @@ -157,32 +157,29 @@ class TokenizedBuffer extends Model end = oldRange.end.row delta = newRange.end.row - oldRange.end.row - @invalidateSurroundingChangedWhitespaceRows(start, end) @updateInvalidRows(start, end, delta) previousEndStack = @stackForRow(end) # used in spill detection below newTokenizedLines = @buildTokenizedLinesForRows(start, end + delta, @stackForRow(start - 1)) _.spliceWithArray(@tokenizedLines, start, end - start + 1, newTokenizedLines) - newEndStack = @stackForRow(end + delta) + start = @retokenizeWhitespaceRowsIfIndentLevelChanged(start - 1, -1) + end = @retokenizeWhitespaceRowsIfIndentLevelChanged(newRange.end.row + 1, 1) - delta + + newEndStack = @stackForRow(end + delta) if newEndStack and not _.isEqual(newEndStack, previousEndStack) @invalidateRow(end + delta + 1) @emit "changed", { start, end, delta, bufferChange: e } - invalidateSurroundingChangedWhitespaceRows: (startRow, endRow) -> - # Indent levels might change when something else in the buffer changes. - # If they do, invalidate those rows. - @invalidateChangedWhitespaceRows(startRow - 1, -1) - @invalidateChangedWhitespaceRows(endRow + 1, 1) - - invalidateChangedWhitespaceRows: (row, increment) -> + retokenizeWhitespaceRowsIfIndentLevelChanged: (row, increment) -> line = @tokenizedLines[row] - if line?.isOnlyWhitespace() and @indentLevelForRow(row) != line.indentLevel + if line?.isOnlyWhitespace() and @indentLevelForRow(row) isnt line.indentLevel while line?.isOnlyWhitespace() - @invalidateRow(row) + @tokenizedLines[row] = @buildTokenizedTokenizedLineForRow(row, @stackForRow(row - 1)) row += increment line = @tokenizedLines[row] - return + + row - increment buildTokenizedLinesForRows: (startRow, endRow, startingStack) -> ruleStack = startingStack