diff --git a/package.json b/package.json index b59746676..07b723bb4 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "sinon": "1.17.4", "temp": "^0.8.3", "text-buffer": "13.11.0", - "tree-sitter": "^0.8.4", + "tree-sitter": "^0.8.6", "typescript-simple": "1.0.0", "underscore-plus": "^1.6.6", "winreg": "^1.2.1", diff --git a/src/tree-sitter-language-mode.js b/src/tree-sitter-language-mode.js index 41c87ba00..af4bbdc1a 100644 --- a/src/tree-sitter-language-mode.js +++ b/src/tree-sitter-language-mode.js @@ -361,9 +361,8 @@ class TreeSitterHighlightIterator { var node = this.layer.document.rootNode var childIndex = -1 - var done = false var nodeContainsTarget = true - do { + for (;;) { this.currentNode = node this.currentChildIndex = childIndex if (!nodeContainsTarget) break @@ -380,18 +379,14 @@ class TreeSitterHighlightIterator { } } - done = true - for (var i = 0, {children} = node, childCount = children.length; i < childCount; i++) { - const child = children[i] - if (child.endIndex > this.currentIndex) { - node = child - childIndex = i - done = false - if (child.startIndex > this.currentIndex) nodeContainsTarget = false - break - } + node = node.firstChildForIndex(this.currentIndex) + if (node) { + if (node.startIndex > this.currentIndex) nodeContainsTarget = false + childIndex = node.childIndex + } else { + break } - } while (!done) + } return containingTags }