diff --git a/spec/tokenized-buffer-iterator-spec.js b/spec/tokenized-buffer-iterator-spec.js index df0676640..77e049b89 100644 --- a/spec/tokenized-buffer-iterator-spec.js +++ b/spec/tokenized-buffer-iterator-spec.js @@ -8,10 +8,14 @@ describe('TokenizedBufferIterator', () => { it('seeks to the leftmost tag boundary at the given position, returning the containing tags', function () { const tokenizedBuffer = { tokenizedLineForRow (row) { - return { - tags: [-1, -2, -3, -4, -5, 3, -3, -4, -6], - text: 'foo', - openScopes: [] + if (row === 0) { + return { + tags: [-1, -2, -3, -4, -5, 3, -3, -4, -6, 4], + text: 'foo bar', + openScopes: [] + } + } else { + return null } }, @@ -29,6 +33,7 @@ describe('TokenizedBufferIterator', () => { const iterator = new TokenizedBufferIterator(tokenizedBuffer) expect(iterator.seek(Point(0, 0))).toEqual([]) + expect(iterator.getPosition()).toEqual(Point(0, 0)) expect(iterator.getCloseTags()).toEqual([]) expect(iterator.getOpenTags()).toEqual(['foo']) @@ -37,19 +42,28 @@ describe('TokenizedBufferIterator', () => { expect(iterator.getOpenTags()).toEqual(['bar']) expect(iterator.seek(Point(0, 1))).toEqual(['baz']) + expect(iterator.getPosition()).toEqual(Point(0, 3)) expect(iterator.getCloseTags()).toEqual([]) + expect(iterator.getOpenTags()).toEqual(['bar']) + + iterator.moveToSuccessor() + expect(iterator.getPosition()).toEqual(Point(0, 3)) + expect(iterator.getCloseTags()).toEqual(['bar', 'baz']) + expect(iterator.getOpenTags()).toEqual([]) + + expect(iterator.seek(Point(0, 3))).toEqual(['baz']) + expect(iterator.getPosition()).toEqual(Point(0, 3)) + expect(iterator.getCloseTags()).toEqual([]) + expect(iterator.getOpenTags()).toEqual(['bar']) + + iterator.moveToSuccessor() + expect(iterator.getPosition()).toEqual(Point(0, 3)) + expect(iterator.getCloseTags()).toEqual(['bar', 'baz']) expect(iterator.getOpenTags()).toEqual([]) iterator.moveToSuccessor() + expect(iterator.getPosition()).toEqual(Point(1, 0)) expect(iterator.getCloseTags()).toEqual([]) - expect(iterator.getOpenTags()).toEqual(['bar']) - - expect(iterator.seek(Point(0, 3))).toEqual(['baz']) - expect(iterator.getCloseTags()).toEqual([]) - expect(iterator.getOpenTags()).toEqual(['bar']) - - iterator.moveToSuccessor() - expect(iterator.getCloseTags()).toEqual(['bar', 'baz']) expect(iterator.getOpenTags()).toEqual([]) }) }) diff --git a/src/tokenized-buffer-iterator.coffee b/src/tokenized-buffer-iterator.coffee index ffefc9609..23b72d5a9 100644 --- a/src/tokenized-buffer-iterator.coffee +++ b/src/tokenized-buffer-iterator.coffee @@ -21,21 +21,18 @@ class TokenizedBufferIterator for tag, index in @currentTags if tag >= 0 - if currentColumn is position.column + if currentColumn >= position.column @tagIndex = index break else currentColumn += tag @containingTags.pop() while @closeTags.shift() @containingTags.push(openTag) while openTag = @openTags.shift() - if currentColumn > position.column - @tagIndex = index - break else scopeName = @tokenizedBuffer.grammar.scopeForId(tag) if tag % 2 is 0 # close tag if @openTags.length > 0 - if currentColumn is position.column + if currentColumn >= position.column @tagIndex = index break else