mirror of
https://github.com/atom/atom.git
synced 2026-01-25 23:08:18 -05:00
Added getSyntaxNodeAtPosition and getSyntaxNodeContainingRange, tested
This commit is contained in:
@@ -20,6 +20,13 @@ class TreeSitterLanguageMode {
|
||||
}
|
||||
})
|
||||
}
|
||||
if (!Parser.SyntaxNode.prototype.hasOwnProperty('range')) {
|
||||
Object.defineProperty(Parser.SyntaxNode.prototype, 'range', {
|
||||
get () {
|
||||
return rangeForNode(this)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
constructor ({buffer, grammar, config, grammars}) {
|
||||
@@ -349,12 +356,11 @@ class TreeSitterLanguageMode {
|
||||
Section - Syntax Tree APIs
|
||||
*/
|
||||
|
||||
getRangeForSyntaxNodeContainingRange (range, where = _ => true) {
|
||||
getSyntaxNodeContainingRange (range, where = _ => true) {
|
||||
const startIndex = this.buffer.characterIndexForPosition(range.start)
|
||||
const endIndex = this.buffer.characterIndexForPosition(range.end)
|
||||
const searchEndIndex = Math.max(0, endIndex - 1)
|
||||
|
||||
|
||||
let smallestNode
|
||||
this._forEachTreeWithRange(range, tree => {
|
||||
if (typeof selector === 'function') debugger
|
||||
@@ -368,7 +374,11 @@ class TreeSitterLanguageMode {
|
||||
}
|
||||
})
|
||||
|
||||
if (smallestNode) return rangeForNode(smallestNode)
|
||||
return smallestNode
|
||||
}
|
||||
|
||||
getSyntaxNodeAtPosition (position, where) {
|
||||
return this.getSyntaxNodeContainingRange(new Range(position, position), where)
|
||||
}
|
||||
|
||||
bufferRangeForScopeAtPosition (selector, position) {
|
||||
@@ -377,7 +387,8 @@ class TreeSitterLanguageMode {
|
||||
selector = ({type}) => match(type)
|
||||
}
|
||||
if (selector === null) selector = undefined
|
||||
return this.getRangeForSyntaxNodeContainingRange(new Range(position, position), selector)
|
||||
const node = this.getSyntaxNodeAtPosition(position, selector)
|
||||
return node && node.range
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user