From da2072e005ccdea12c94ba82d4664556040b81f0 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Tue, 21 Jan 2025 16:05:13 -0600 Subject: [PATCH] Fix drafting lines --- src/clientSideScene/sceneEntities.ts | 27 ++++++++++++++++----------- src/lang/std/sketch.ts | 13 +++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/clientSideScene/sceneEntities.ts b/src/clientSideScene/sceneEntities.ts index 0b3d73a83..b3cb95780 100644 --- a/src/clientSideScene/sceneEntities.ts +++ b/src/clientSideScene/sceneEntities.ts @@ -60,6 +60,7 @@ import { resultIsOk, SourceRange, topLevelRange, + CallExpressionKw, } from 'lang/wasm' import { calculate_circle_from_3_points } from '../wasm-lib/pkg/wasm_lib' import { @@ -1948,15 +1949,16 @@ export class SceneEntities { const dragTo: [number, number] = [snappedPoint.x, snappedPoint.y] let modifiedAst = draftInfo ? draftInfo.truncatedAst : { ...kclManager.ast } - const _node = getNodeFromPath>( + const _node = getNodeFromPath>( modifiedAst, pathToNode, - 'CallExpression' + ['CallExpression', 'CallExpressionKw'] ) if (trap(_node)) return const node = _node.node - if (node.type !== 'CallExpression') return + if (node.type !== 'CallExpression' && node.type !== 'CallExpressionKw') + return let modded: | { @@ -2262,11 +2264,12 @@ export class SceneEntities { if (trap(pResult) || !resultIsOk(pResult)) return Promise.reject(pResult) const updatedAst = pResult.program - const _node = getNodeFromPath>( - updatedAst, - parent.userData.pathToNode, - 'CallExpression' - ) + const _node = getNodeFromPath< + Node + >(updatedAst, parent.userData.pathToNode, [ + 'CallExpressionKw', + 'CallExpression', + ]) if (trap(_node, { suppress: true })) return const node = _node.node editorManager.setHighlightRange([topLevelRange(node.start, node.end)]) @@ -2427,9 +2430,11 @@ function prepareTruncatedMemoryAndAst( // truncatedAst needs to setup with another segment at the end let newSegment if (draftSegment === 'line') { - newSegment = createCallExpressionStdLib('line', [ - createArrayExpression([createLiteral(0), createLiteral(0)]), - createPipeSubstitution(), + newSegment = createCallExpressionStdLibKw('line', null, [ + createLabeledArg( + 'end', + createArrayExpression([createLiteral(0), createLiteral(0)]) + ), ]) } else { newSegment = createCallExpressionStdLib('tangentialArcTo', [ diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index 0072bbd47..b0bed2d9e 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -2029,6 +2029,19 @@ export function changeSketchArguments( input, }) } + if (callExpression?.callee?.name in sketchLineHelperMapKw) { + const { updateArgs } = sketchLineHelperMapKw[callExpression.callee.name] + if (!updateArgs) { + return new Error('not a sketch line keyword helper') + } + + return updateArgs({ + node: _node, + previousProgramMemory: programMemory, + pathToNode: shallowPath, + input, + }) + } return new Error(`not a sketch line helper: ${callExpression?.callee?.name}`) }