diff --git a/package-lock.json b/package-lock.json index dcdbd1a14..2bc2ca84a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7114,41 +7114,18 @@ "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==" }, "tree-sitter": { - "version": "0.13.23", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.13.23.tgz", - "integrity": "sha512-75AiPbMEstv+YK8h4FkAHnmAJ6nNIUj/NFzRvKCHovmwSEKMi8Wc/E/crB4lJnHBOfV/f/DMQjN+e1Y36kagug==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.15.0.tgz", + "integrity": "sha512-3CDZ7X4hSJgMXOo8WWhYIwS06hFDmI3x6/3rX+i+LP4ykL3UWVt5TgNKYjAkgBxbpFEHGkaSBe5LRQu5LHOQ3A==", "requires": { - "nan": "^2.10.0", + "nan": "^2.13.2", "prebuild-install": "^5.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "prebuild-install": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.1.tgz", - "integrity": "sha512-9DAccsInWHB48TBQi2eJkLPE049JuAI6FjIH0oIrij4bpDVEbX6JvlWRAcAAlUqBHhjgq0jNqA3m3bBXWm9v6w==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^1.0.2", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.2.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "os-homedir": "^1.0.1", - "pump": "^2.0.1", - "rc": "^1.2.7", - "simple-get": "^2.7.0", - "tar-fs": "^1.13.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" } } }, diff --git a/package.json b/package.json index 7501ebcca..e3fe2e954 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "temp": "^0.9.0", "text-buffer": "13.15.1", "timecop": "https://www.atom.io/api/packages/timecop/versions/0.36.2/tarball", - "tree-sitter": "0.13.23", + "tree-sitter": "0.15.0", "tree-sitter-css": "^0.13.7", "tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.227.0/tarball", "typescript-simple": "1.0.0", diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index f4f1f3568..f56f5c8dc 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -12,6 +12,7 @@ FindParentDir = require 'find-parent-dir' TextEditor = require '../src/text-editor' TextEditorElement = require '../src/text-editor-element' TextMateLanguageMode = require '../src/text-mate-language-mode' +TreeSitterLanguageMode = require '../src/tree-sitter-language-mode' {clipboard} = require 'electron' jasmineStyle = document.createElement('style') @@ -101,6 +102,7 @@ beforeEach -> # make tokenization synchronous TextMateLanguageMode.prototype.chunkSize = Infinity + TreeSitterLanguageMode.prototype.syncTimeoutMicros = Infinity spyOn(TextMateLanguageMode.prototype, "tokenizeInBackground").andCallFake -> @tokenizeNextChunk() # Without this spy, TextEditor.onDidTokenize callbacks would not be called diff --git a/spec/tree-sitter-language-mode-spec.js b/spec/tree-sitter-language-mode-spec.js index 7cc210c40..643a0d0c7 100644 --- a/spec/tree-sitter-language-mode-spec.js +++ b/spec/tree-sitter-language-mode-spec.js @@ -143,7 +143,7 @@ describe('TreeSitterLanguageMode', () => { languageMode.tree.rootNode .descendantForPosition(Point(1, 2), Point(1, 6)) .toString() - ).toBe('(declaration (primitive_type) (identifier) (MISSING))') + ).toBe('(declaration (primitive_type) (identifier) (MISSING ";"))') expectTokensToEqual(editor, [ [ @@ -414,7 +414,7 @@ describe('TreeSitterLanguageMode', () => { const languageMode = new TreeSitterLanguageMode({ buffer, grammar, - syncOperationLimit: 0 + syncTimeoutMicros: 0 }) buffer.setLanguageMode(languageMode) await nextHighlightingUpdate(languageMode) @@ -797,7 +797,7 @@ describe('TreeSitterLanguageMode', () => { buffer, grammar: htmlGrammar, grammars: atom.grammars, - syncOperationLimit: 0 + syncTimeoutMicros: 0 }) buffer.setLanguageMode(languageMode) @@ -827,7 +827,7 @@ describe('TreeSitterLanguageMode', () => { ) atom.grammars.loadGrammarSync(jsGrammarPath) atom.grammars.assignLanguageMode(buffer, 'source.js') - buffer.getLanguageMode().syncOperationLimit = 0 + buffer.getLanguageMode().syncTimeoutMicros = 0 const initialSeed = Date.now() for (let i = 0, trialCount = 10; i < trialCount; i++) { diff --git a/src/tree-sitter-language-mode.js b/src/tree-sitter-language-mode.js index 3b40f489f..a8baa45de 100644 --- a/src/tree-sitter-language-mode.js +++ b/src/tree-sitter-language-mode.js @@ -24,7 +24,7 @@ class TreeSitterLanguageMode { } } - constructor ({buffer, grammar, config, grammars, syncOperationLimit}) { + constructor ({buffer, grammar, config, grammars, syncTimeoutMicros}) { TreeSitterLanguageMode._patchSyntaxNode() this.id = nextId++ this.buffer = buffer @@ -35,8 +35,8 @@ class TreeSitterLanguageMode { this.rootLanguageLayer = new LanguageLayer(this, grammar) this.injectionsMarkerLayer = buffer.addMarkerLayer() - if (syncOperationLimit != null) { - this.syncOperationLimit = syncOperationLimit + if (syncTimeoutMicros != null) { + this.syncTimeoutMicros = syncTimeoutMicros } this.rootScopeDescriptor = new ScopeDescriptor({scopes: [this.grammar.scopeName]}) @@ -111,7 +111,7 @@ class TreeSitterLanguageMode { const parser = PARSER_POOL.pop() || new Parser() parser.setLanguage(language) const result = parser.parseTextBuffer(this.buffer.buffer, oldTree, { - syncOperationLimit: this.syncOperationLimit, + syncTimeoutMicros: this.syncTimeoutMicros, includedRanges: ranges }) @@ -1225,6 +1225,6 @@ function hasMatchingFoldSpec (specs, node) { }) TreeSitterLanguageMode.LanguageLayer = LanguageLayer -TreeSitterLanguageMode.prototype.syncOperationLimit = 1000 +TreeSitterLanguageMode.prototype.syncTimeoutMicros = 1000 module.exports = TreeSitterLanguageMode