diff --git a/e2e/playwright/regression-tests.spec.ts b/e2e/playwright/regression-tests.spec.ts index c7835fcf4..943523b25 100644 --- a/e2e/playwright/regression-tests.spec.ts +++ b/e2e/playwright/regression-tests.spec.ts @@ -841,6 +841,40 @@ washer = extrude(washerSketch, length = thicknessMax)` await editor.expectEditor.toContain('@settings(defaultLengthUnit = yd)') }) }) + + test('Exiting existing sketch without editing should not delete it', async ({ + page, + editor, + homePage, + context, + toolbar, + scene, + cmdBar, + }) => { + await context.folderSetupFn(async (dir) => { + const testDir = path.join(dir, 'test') + await fsp.mkdir(testDir, { recursive: true }) + await fsp.writeFile( + path.join(testDir, 'main.kcl'), + `s1 = startSketchOn(XY) + |> startProfile(at = [0, 25]) + |> xLine(endAbsolute = -15 + 1.5) +s2 = startSketchOn(XY) + |> startProfile(at = [25, 0]) + |> yLine(endAbsolute = -15 + 1.5)`, + 'utf-8' + ) + }) + + await homePage.openProject('test') + await scene.settled(cmdBar) + await toolbar.waitForFeatureTreeToBeBuilt() + await toolbar.editSketch(1) + await page.waitForTimeout(1000) // Just hang out for a second + await toolbar.exitSketch() + + await editor.expectEditor.toContain('s2 = startSketchOn(XY)') + }) }) async function clickExportButton(page: Page) { diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx index 502423b76..33a0d3eb4 100644 --- a/src/components/ModelingMachineProvider.tsx +++ b/src/components/ModelingMachineProvider.tsx @@ -751,13 +751,22 @@ export const ModelingMachineProvider = ({ if (err(varDec)) return reject(new Error('No varDec')) const variableName = varDec.node.declaration.id.name let isIdentifierUsed = false - traverse(newAst, { - enter: (node) => { - if (node.type === 'Name' && node.name.name === variableName) { - isIdentifierUsed = true - } - }, - }) + const isInitAPipe = + varDec.node.declaration.init.type === 'PipeExpression' + if (isInitAPipe) { + isIdentifierUsed = true + } else { + traverse(newAst, { + enter: (node) => { + if ( + node.type === 'Name' && + node.name.name === variableName + ) { + isIdentifierUsed = true + } + }, + }) + } if (isIdentifierUsed) return // remove body item at varDecIndex