From a9a58a7bb2814947f3fda18a0a6cd45576d0a35d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 9 Jan 2018 17:22:21 -0800 Subject: [PATCH 1/2] :arrow_up: tree-sitter to fix an error recovery hang --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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", From 4084922cb4a580db17a6811d47911e074033c0df Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 9 Jan 2018 17:22:49 -0800 Subject: [PATCH 2/2] Optimize TreeSitterHighlightIterator.seek --- src/tree-sitter-language-mode.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) 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 }