|
import Parser from "tree-sitter"; |
|
import JavaScript from "tree-sitter-javascript"; |
|
|
|
let src = ``; |
|
const dest = `a = 1 |
|
b = 2`; |
|
const edits = [ |
|
{ |
|
startIndex: 0, |
|
oldEndIndex: 0, |
|
newEndIndex: 1, |
|
startPosition: { row: 0, column: 0 }, |
|
oldEndPosition: { row: 0, column: 0 }, |
|
newEndPosition: { row: 0, column: 1 } |
|
}, |
|
{ |
|
startIndex: 1, |
|
oldEndIndex: 1, |
|
newEndIndex: 2, |
|
startPosition: { row: 0, column: 1 }, |
|
oldEndPosition: { row: 0, column: 1 }, |
|
newEndPosition: { row: 0, column: 2 } |
|
}, |
|
{ |
|
startIndex: 2, |
|
oldEndIndex: 2, |
|
newEndIndex: 3, |
|
startPosition: { row: 0, column: 2 }, |
|
oldEndPosition: { row: 0, column: 2 }, |
|
newEndPosition: { row: 0, column: 3 } |
|
}, |
|
{ |
|
startIndex: 3, |
|
oldEndIndex: 3, |
|
newEndIndex: 4, |
|
startPosition: { row: 0, column: 3 }, |
|
oldEndPosition: { row: 0, column: 3 }, |
|
newEndPosition: { row: 0, column: 4 } |
|
}, |
|
{ |
|
startIndex: 4, |
|
oldEndIndex: 4, |
|
newEndIndex: 5, |
|
startPosition: { row: 0, column: 4 }, |
|
oldEndPosition: { row: 0, column: 4 }, |
|
newEndPosition: { row: 0, column: 5 } |
|
}, |
|
{ |
|
startIndex: 5, |
|
oldEndIndex: 5, |
|
newEndIndex: 6, |
|
startPosition: { row: 0, column: 5 }, |
|
oldEndPosition: { row: 0, column: 5 }, |
|
newEndPosition: { row: 1, column: 0 } |
|
}, |
|
{ |
|
startIndex: 6, |
|
oldEndIndex: 6, |
|
newEndIndex: 7, |
|
startPosition: { row: 1, column: 0 }, |
|
oldEndPosition: { row: 1, column: 0 }, |
|
newEndPosition: { row: 1, column: 1 } |
|
}, |
|
{ |
|
startIndex: 7, |
|
oldEndIndex: 7, |
|
newEndIndex: 8, |
|
startPosition: { row: 1, column: 1 }, |
|
oldEndPosition: { row: 1, column: 1 }, |
|
newEndPosition: { row: 1, column: 2 } |
|
}, |
|
{ |
|
startIndex: 8, |
|
oldEndIndex: 8, |
|
newEndIndex: 9, |
|
startPosition: { row: 1, column: 2 }, |
|
oldEndPosition: { row: 1, column: 2 }, |
|
newEndPosition: { row: 1, column: 3 } |
|
}, |
|
{ |
|
startIndex: 9, |
|
oldEndIndex: 9, |
|
newEndIndex: 10, |
|
startPosition: { row: 1, column: 3 }, |
|
oldEndPosition: { row: 1, column: 3 }, |
|
newEndPosition: { row: 1, column: 4 } |
|
}, |
|
{ |
|
startIndex: 10, |
|
oldEndIndex: 10, |
|
newEndIndex: 11, |
|
startPosition: { row: 1, column: 4 }, |
|
oldEndPosition: { row: 1, column: 4 }, |
|
newEndPosition: { row: 1, column: 5 } |
|
} |
|
]; |
|
|
|
const parser = new Parser(); |
|
parser.setLanguage(JavaScript); |
|
let tree = parser.parse(src); |
|
console.log(tree.rootNode.toString()); |
|
|
|
edits.forEach((e, i) => { |
|
const c = dest[i]; |
|
console.log(`Typing ${c}`); |
|
src += c; |
|
tree.edit(e); |
|
tree = parser.parse(src, tree); |
|
console.log(tree.rootNode.toString()); |
|
}); |