mirror of
https://github.com/atom/atom.git
synced 2026-01-25 06:48:28 -05:00
Merge pull request #12610 from atom/as-tokenized-buffer-iterator-regression
Clip to next boundary when seeking iterator to the middle of a text tag
This commit is contained in:
@@ -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([])
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user