diff --git a/package-lock.json b/package-lock.json index e0a4a4b65..22cbf05f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,7 +157,7 @@ "apparatus": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/apparatus/-/apparatus-0.0.10.tgz", - "integrity": "sha1-gep1Z3Ktp3hj21TO7oICwQm9yj4=", + "integrity": "sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==", "requires": { "sylvester": ">= 0.0.8" } @@ -348,7 +348,7 @@ "atom-pathspec": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/atom-pathspec/-/atom-pathspec-0.0.0.tgz", - "integrity": "sha1-Z6q6+VAZsK/Y4xWLLNexjXN2Q/E=" + "integrity": "sha512-7UMEHdTtBV5sJONT0uMeQ6M8JFdfMQy/14rxuP6OuoFfSiDjxyZHuorIbv8gqhRB3FQMMLPzqONoFJE2cpHiCg==" }, "atom-select-list": { "version": "0.7.2", @@ -5132,7 +5132,7 @@ "spelling-manager": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/spelling-manager/-/spelling-manager-1.1.0.tgz", - "integrity": "sha1-UZmGdZUpHgVjlExuL70ao02X3TQ=", + "integrity": "sha512-PpTP6XUZflCWO9YZO3wBSGAmqrUP6BFwSdmVFS6WBT9rFYg3ysmrIfyD1KnaVcnW6wuIKf+FDwefvU8PsD8Smg==", "requires": { "natural": "0.5.0", "xregexp": "^3.2.0" @@ -5224,7 +5224,7 @@ "streamroller": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha1-odG3z4PTmvsNYwSaWsv5NJO99ks=", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "requires": { "date-format": "^1.2.0", "debug": "^3.1.0", @@ -5447,9 +5447,9 @@ } }, "text-buffer": { - "version": "13.14.10", - "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.14.10.tgz", - "integrity": "sha512-W8ID3TnYdvuvqZCKP+zq3O/A4UwgZCGbp+V/ZifTQ+3JDlSRq6WFIIO9osLqtXnx7wMyhOAgSUGXBDSA5HUtrw==", + "version": "13.14.11", + "resolved": "https://registry.npmjs.org/text-buffer/-/text-buffer-13.14.11.tgz", + "integrity": "sha512-Cn4dsuHM0MAtejnMAVpYL9FKEuOX2aa9tXorATofW3NEEU57SXkkFudfySzgRPWtx8ysRsZQjFLlCmCRJ6WFig==", "requires": { "delegato": "^1.0.0", "diff": "^2.2.1", @@ -5696,7 +5696,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "prebuild-install": { diff --git a/package.json b/package.json index 2f420d1c8..55f633054 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "symbols-view": "https://www.atom.io/api/packages/symbols-view/versions/0.118.2/tarball", "tabs": "https://www.atom.io/api/packages/tabs/versions/0.109.2/tarball", "temp": "^0.8.3", - "text-buffer": "13.14.10", + "text-buffer": "13.14.11", "timecop": "https://www.atom.io/api/packages/timecop/versions/0.36.2/tarball", "tree-sitter": "0.13.19", "tree-sitter-css": "^0.13.7", diff --git a/src/tree-sitter-language-mode.js b/src/tree-sitter-language-mode.js index 4df58c20e..3aa2e95b3 100644 --- a/src/tree-sitter-language-mode.js +++ b/src/tree-sitter-language-mode.js @@ -139,11 +139,7 @@ class TreeSitterLanguageMode { buildHighlightIterator () { if (!this.rootLanguageLayer) return new NullHighlightIterator() - const layerIterators = [ - this.rootLanguageLayer.buildHighlightIterator(), - ...this.injectionsMarkerLayer.getMarkers().map(m => m.languageLayer.buildHighlightIterator()) - ] - return new HighlightIterator(this, layerIterators) + return new HighlightIterator(this) } onDidTokenize (callback) { @@ -482,7 +478,7 @@ class TreeSitterLanguageMode { point = Point.fromObject(point) const iterator = this.buildHighlightIterator() const scopes = [] - for (const scope of iterator.seek(point)) { + for (const scope of iterator.seek(point, point.row + 1)) { scopes.push(this.grammar.scopeNameForScopeId(scope)) } if (point.isEqual(iterator.getPosition())) { @@ -765,12 +761,22 @@ class LanguageLayer { } class HighlightIterator { - constructor (languageMode, iterators) { + constructor (languageMode) { this.languageMode = languageMode - this.iterators = iterators.sort((a, b) => b.getIndex() - a.getIndex()) + this.iterators = null } - seek (targetPosition) { + seek (targetPosition, endRow) { + const injectionMarkers = this.languageMode.injectionsMarkerLayer.findMarkers({ + intersectsRange: new Range(targetPosition, new Point(endRow + 1, 0)) + }) + + this.iterators = [this.languageMode.rootLanguageLayer.buildHighlightIterator()] + for (const marker of injectionMarkers) { + this.iterators.push(marker.languageLayer.buildHighlightIterator()) + } + this.iterators.sort((a, b) => b.getIndex() - a.getIndex()) + const containingTags = [] const containingTagStartIndices = [] const targetIndex = this.languageMode.buffer.characterIndexForPosition(targetPosition)