Don't mutate the user's codeBasedSelections when they apply a multi-selection constraint (#4141)

* Don't mutate the user's `codeBasedSelections` when they apply a multi-selection constraint

* Fix to not mutate the input parameter

* Format

---------

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
This commit is contained in:
Frank Noirot
2024-10-11 12:53:33 -04:00
committed by GitHub
parent 23c2aa948a
commit 85a39109f8

View File

@ -1559,9 +1559,15 @@ export function transformSecondarySketchLinesTagFirst({
} }
| Error { | Error {
// let node = structuredClone(ast) // let node = structuredClone(ast)
const primarySelection = selectionRanges.codeBasedSelections.sort(
// We need to sort the selections by their start position
// so that we can process them in dependency order and not write invalid KCL.
const sortedCodeBasedSelections =
selectionRanges.codeBasedSelections.toSorted(
(a, b) => a.range[0] - b.range[0] (a, b) => a.range[0] - b.range[0]
)[0].range )
const primarySelection = sortedCodeBasedSelections[0].range
const secondarySelections = sortedCodeBasedSelections.slice(1)
const _tag = giveSketchFnCallTag(ast, primarySelection, forceSegName) const _tag = giveSketchFnCallTag(ast, primarySelection, forceSegName)
if (err(_tag)) return _tag if (err(_tag)) return _tag
@ -1571,7 +1577,7 @@ export function transformSecondarySketchLinesTagFirst({
ast: modifiedAst, ast: modifiedAst,
selectionRanges: { selectionRanges: {
...selectionRanges, ...selectionRanges,
codeBasedSelections: selectionRanges.codeBasedSelections.slice(1), codeBasedSelections: secondarySelections,
}, },
referencedSegmentRange: primarySelection, referencedSegmentRange: primarySelection,
transformInfos, transformInfos,