store vscode Ranges on ktxt2 blocks
This commit is contained in:
@@ -64,17 +64,26 @@
|
|||||||
(outputDocument.save)]
|
(outputDocument.save)]
|
||||||
(assert (and saveSourceSuccess saveOutputSuccess))))))
|
(assert (and saveSourceSuccess saveOutputSuccess))))))
|
||||||
|
|
||||||
|
(function streamPosToVscodePos [pos]
|
||||||
|
(new vscode.Position pos.line (- pos.column 1)))
|
||||||
|
|
||||||
|
(function rangeFromStartEnd [start end]
|
||||||
|
(new Range (streamPosToVscodePos start) (streamPosToVscodePos end)))
|
||||||
|
|
||||||
(function :Array<Dynamic> splitFileBlocks []
|
(function :Array<Dynamic> splitFileBlocks []
|
||||||
(let [fileText (activeTextEditor.document.getText)
|
(let [fileText (activeTextEditor.document.getText)
|
||||||
fileStream (kiss.Stream.fromString fileText)
|
fileStream (kiss.Stream.fromString fileText)
|
||||||
blocks []]
|
blocks []]
|
||||||
(loop
|
(loop
|
||||||
(let [block (object source "" output "" outputLocked false)]
|
(let [block (object source "" sourceRange null output "" outputRange null outputLocked false)]
|
||||||
(case (fileStream.takeUntilAndDrop blockStartEnd)
|
(case (fileStream.takeUntilAndDrop blockStartEnd)
|
||||||
((Some _)
|
((Some _)
|
||||||
(let [sourceBlock (fileStream.expect "A chunk of source text followed by one of $outputStarts"
|
(let [sourceStartPosition (fileStream.position)
|
||||||
->(fileStream.takeUntilOneOf outputStarts))]
|
sourceBlock (fileStream.expect "A chunk of source text followed by one of $outputStarts"
|
||||||
(set block.source sourceBlock))
|
->(fileStream.takeUntilOneOf outputStarts))
|
||||||
|
sourceEndPosition (fileStream.position)]
|
||||||
|
(set block.source sourceBlock)
|
||||||
|
(set block.sourceRange (rangeFromStartEnd sourceStartPosition sourceEndPosition)))
|
||||||
(assert (apply = (for outputStart outputStarts outputStart.length)) "all output starts must be the same length!")
|
(assert (apply = (for outputStart outputStarts outputStart.length)) "all output starts must be the same length!")
|
||||||
(set block.outputLocked
|
(set block.outputLocked
|
||||||
(case (fileStream.expect "One of $outputStarts" ->(fileStream.takeChars .length (first outputStarts)))
|
(case (fileStream.expect "One of $outputStarts" ->(fileStream.takeChars .length (first outputStarts)))
|
||||||
@@ -82,9 +91,13 @@
|
|||||||
(unlockedStart false)
|
(unlockedStart false)
|
||||||
(otherwise
|
(otherwise
|
||||||
(throw "Expected one of $outputStarts"))))
|
(throw "Expected one of $outputStarts"))))
|
||||||
(let [outputBlock (fileStream.expect "A chunk of output text followed by $blockStartEnd"
|
(let [outputStartPosition (fileStream.position)
|
||||||
->(fileStream.takeUntilAndDrop blockStartEnd))]
|
outputBlock (fileStream.expect "A chunk of output text followed by $blockStartEnd"
|
||||||
(set block.output outputBlock)))
|
->(fileStream.takeUntilOneOf [blockStartEnd]))
|
||||||
|
outputEndPosition (fileStream.position)]
|
||||||
|
(fileStream.dropChars blockStartEnd.length)
|
||||||
|
(set block.output outputBlock)
|
||||||
|
(set block.outputRange (rangeFromStartEnd outputStartPosition outputEndPosition))))
|
||||||
(None
|
(None
|
||||||
(break)))
|
(break)))
|
||||||
(blocks.push block)))
|
(blocks.push block)))
|
||||||
|
Reference in New Issue
Block a user