mirror of
https://github.com/atom/atom.git
synced 2026-01-25 23:08:18 -05:00
Merge pull request #17801 from atom/mb-tree-sitter-onDidTokenize
Emit onDidTokenize event from TreeSitterLanguageMode
This commit is contained in:
@@ -210,9 +210,6 @@ describe('TreeSitterLanguageMode', () => {
|
||||
buffer.setLanguageMode(languageMode)
|
||||
await nextHighlightingUpdate(languageMode)
|
||||
|
||||
console.log(languageMode.tree.rootNode.toString());
|
||||
console.log(languageMode.grammar.scopeMap);
|
||||
|
||||
expectTokensToEqual(editor, [
|
||||
[
|
||||
{text: 'a', scopes: ['function']},
|
||||
@@ -728,6 +725,39 @@ describe('TreeSitterLanguageMode', () => {
|
||||
],
|
||||
])
|
||||
})
|
||||
|
||||
it('notifies onDidTokenize listeners the first time all syntax highlighting is done', async () => {
|
||||
const promise = new Promise(resolve => {
|
||||
editor.onDidTokenize(event => {
|
||||
expectTokensToEqual(editor, [
|
||||
[
|
||||
{text: '<', scopes: ['html']},
|
||||
{text: 'script', scopes: ['html', 'tag']},
|
||||
{text: '>', scopes: ['html']},
|
||||
],
|
||||
[
|
||||
{text: 'hello', scopes: ['html', 'function']},
|
||||
{text: '();', scopes: ['html']},
|
||||
],
|
||||
[
|
||||
{text: '</', scopes: ['html']},
|
||||
{text: 'script', scopes: ['html', 'tag']},
|
||||
{text: '>', scopes: ['html']},
|
||||
]
|
||||
])
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
atom.grammars.addGrammar(jsGrammar)
|
||||
atom.grammars.addGrammar(htmlGrammar)
|
||||
buffer.setText('<script>\nhello();\n</script>')
|
||||
|
||||
const languageMode = new TreeSitterLanguageMode({buffer, grammar: htmlGrammar, grammars: atom.grammars})
|
||||
buffer.setLanguageMode(languageMode)
|
||||
|
||||
await promise
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const Parser = require('tree-sitter')
|
||||
const {Point, Range, spliceArray} = require('text-buffer')
|
||||
const {Patch} = require('superstring')
|
||||
const {Emitter, Disposable} = require('event-kit')
|
||||
const {Emitter} = require('event-kit')
|
||||
const ScopeDescriptor = require('./scope-descriptor')
|
||||
const TokenizedLine = require('./tokenized-line')
|
||||
const TextMateLanguageMode = require('./text-mate-language-mode')
|
||||
@@ -63,7 +63,9 @@ class TreeSitterLanguageMode {
|
||||
this.rootLanguageLayer.update(null)
|
||||
})
|
||||
|
||||
this.rootLanguageLayer.update(null)
|
||||
this.rootLanguageLayer.update(null).then(() =>
|
||||
this.emitter.emit('did-tokenize')
|
||||
)
|
||||
|
||||
// TODO: Remove this once TreeSitterLanguageMode implements its own auto-indentation system. This
|
||||
// is temporarily needed in order to delegate to the TextMateLanguageMode's auto-indent system.
|
||||
@@ -119,6 +121,10 @@ class TreeSitterLanguageMode {
|
||||
return new HighlightIterator(this, layerIterators)
|
||||
}
|
||||
|
||||
onDidTokenize (callback) {
|
||||
return this.emitter.on('did-tokenize', callback)
|
||||
}
|
||||
|
||||
onDidChangeHighlighting (callback) {
|
||||
return this.emitter.on('did-change-highlighting', callback)
|
||||
}
|
||||
@@ -386,8 +392,6 @@ class TreeSitterLanguageMode {
|
||||
Section - Backward compatibility shims
|
||||
*/
|
||||
|
||||
onDidTokenize (callback) { return new Disposable(() => {}) }
|
||||
|
||||
tokenizedLineForRow (row) {
|
||||
return new TokenizedLine({
|
||||
openScopes: [],
|
||||
|
||||
Reference in New Issue
Block a user