Add TreeSitterLanguageMode.tokenForPosition

This commit is contained in:
Max Brunsfeld
2018-09-05 09:54:43 -07:00
parent d8c2f0cf0f
commit ba96bbf8f1
2 changed files with 15 additions and 0 deletions

View File

@@ -1360,6 +1360,14 @@ describe('TreeSitterLanguageMode', () => {
'source.js',
'property.name'
])
// Drive-by test for .tokenForPosition()
const token = editor.tokenForBufferPosition([0, 'foo({b'.length])
expect(token.value).toBe('bar')
expect(token.scopes).toEqual([
'source.js',
'property.name'
])
})
it('includes nodes in injected syntax trees', async () => {

View File

@@ -3,6 +3,7 @@ const {Point, Range, spliceArray} = require('text-buffer')
const {Patch} = require('superstring')
const {Emitter} = require('event-kit')
const ScopeDescriptor = require('./scope-descriptor')
const Token = require('./token')
const TokenizedLine = require('./tokenized-line')
const TextMateLanguageMode = require('./text-mate-language-mode')
const {matcherForSelector} = require('./selectors')
@@ -435,6 +436,12 @@ class TreeSitterLanguageMode {
return new ScopeDescriptor({scopes})
}
tokenForPosition (point) {
const node = this.getSyntaxNodeAtPosition(point)
const scopes = this.scopeDescriptorForPosition(point).getScopesArray()
return new Token({value: node.text, scopes})
}
getGrammar () {
return this.grammar
}