UI fix for comment settings collision (#6249)
* UI fix for comment settings collision * fmt * Fix tsc by using Promise.reject --------- Co-authored-by: Frank Noirot <frankjohnson1993@gmail.com>
This commit is contained in:
@ -1180,7 +1180,8 @@ export class SceneEntities {
|
||||
_ast = pResult.program
|
||||
|
||||
// do a quick mock execution to get the program memory up-to-date
|
||||
await this.kclManager.executeAstMock(_ast)
|
||||
const didReParse = await this.kclManager.executeAstMock(_ast)
|
||||
if (err(didReParse)) return didReParse
|
||||
|
||||
const justCreatedNode = getNodeFromPath<VariableDeclaration>(
|
||||
_ast,
|
||||
@ -1580,7 +1581,8 @@ export class SceneEntities {
|
||||
_ast = pResult.program
|
||||
|
||||
// do a quick mock execution to get the program memory up-to-date
|
||||
await this.kclManager.executeAstMock(_ast)
|
||||
const didReParse = await this.kclManager.executeAstMock(_ast)
|
||||
if (err(didReParse)) return didReParse
|
||||
|
||||
const { truncatedAst } = await this.setupSketch({
|
||||
sketchEntryNodePath: updatedEntryNodePath,
|
||||
@ -1775,7 +1777,8 @@ export class SceneEntities {
|
||||
_ast = pResult.program
|
||||
|
||||
// do a quick mock execution to get the program memory up-to-date
|
||||
await this.kclManager.executeAstMock(_ast)
|
||||
const didReParse = await this.kclManager.executeAstMock(_ast)
|
||||
if (err(didReParse)) return didReParse
|
||||
|
||||
const index = sg.paths.length // because we've added a new segment that's not in the memory yet
|
||||
const draftExpressionsIndices = { start: index, end: index }
|
||||
@ -2002,7 +2005,8 @@ export class SceneEntities {
|
||||
_ast = pResult.program
|
||||
|
||||
// do a quick mock execution to get the program memory up-to-date
|
||||
await this.kclManager.executeAstMock(_ast)
|
||||
const didReParse = await this.kclManager.executeAstMock(_ast)
|
||||
if (err(didReParse)) return didReParse
|
||||
|
||||
const index = sg.paths.length // because we've added a new segment that's not in the memory yet
|
||||
const draftExpressionsIndices = { start: index, end: index }
|
||||
@ -2267,7 +2271,8 @@ export class SceneEntities {
|
||||
_ast = pResult.program
|
||||
|
||||
// do a quick mock execution to get the program memory up-to-date
|
||||
await this.kclManager.executeAstMock(_ast)
|
||||
const didReParse = await this.kclManager.executeAstMock(_ast)
|
||||
if (err(didReParse)) return didReParse
|
||||
|
||||
const { truncatedAst } = await this.setupSketch({
|
||||
sketchEntryNodePath: updatedEntryNodePath,
|
||||
@ -2500,7 +2505,10 @@ export class SceneEntities {
|
||||
addingNewSegmentStatus = 'pending'
|
||||
if (trap(mod)) return
|
||||
|
||||
await this.kclManager.executeAstMock(mod.modifiedAst)
|
||||
const didReParse = await this.kclManager.executeAstMock(
|
||||
mod.modifiedAst
|
||||
)
|
||||
if (err(didReParse)) return
|
||||
this.tearDownSketch({ removeAxis: false })
|
||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
this.setupSketch({
|
||||
|
@ -760,7 +760,8 @@ export const ModelingMachineProvider = ({
|
||||
|
||||
// remove body item at varDecIndex
|
||||
newAst.body = newAst.body.filter((_, i) => i !== varDecIndex)
|
||||
await kclManager.executeAstMock(newAst)
|
||||
const didReParse = await kclManager.executeAstMock(newAst)
|
||||
if (err(didReParse)) return reject(didReParse)
|
||||
await codeManager.updateEditorWithAstAndWriteToFile(newAst)
|
||||
}
|
||||
sceneInfra.setCallbacks({
|
||||
@ -773,6 +774,7 @@ export const ModelingMachineProvider = ({
|
||||
'animate-to-face': fromPromise(async ({ input }) => {
|
||||
if (!input) return null
|
||||
if (input.type === 'extrudeFace' || input.type === 'offsetPlane') {
|
||||
const originalCode = codeManager.code
|
||||
const sketched =
|
||||
input.type === 'extrudeFace'
|
||||
? sketchOnExtrudedFace(
|
||||
@ -791,7 +793,13 @@ export const ModelingMachineProvider = ({
|
||||
}
|
||||
const { modifiedAst, pathToNode: pathToNewSketchNode } = sketched
|
||||
|
||||
await kclManager.executeAstMock(modifiedAst)
|
||||
const didReParse = await kclManager.executeAstMock(modifiedAst)
|
||||
if (err(didReParse)) {
|
||||
// there was a problem, restore the original code
|
||||
codeManager.code = originalCode
|
||||
await kclManager.executeCode()
|
||||
return reject(didReParse)
|
||||
}
|
||||
|
||||
const id =
|
||||
input.type === 'extrudeFace' ? input.faceId : input.planeId
|
||||
|
@ -515,20 +515,21 @@ export class KclManager {
|
||||
}
|
||||
|
||||
// DO NOT CALL THIS from codemirror ever.
|
||||
async executeAstMock(ast: Program) {
|
||||
async executeAstMock(ast: Program): Promise<null | Error> {
|
||||
await this.ensureWasmInit()
|
||||
|
||||
const newCode = recast(ast)
|
||||
if (err(newCode)) {
|
||||
console.error(newCode)
|
||||
return
|
||||
return newCode
|
||||
}
|
||||
const newAst = await this.safeParse(newCode)
|
||||
|
||||
if (!newAst) {
|
||||
// By clearing the AST we indicate to our callers that there was an issue with execution and
|
||||
// the pre-execution state should be restored.
|
||||
this.clearAst()
|
||||
return
|
||||
return new Error('failed to re-parse')
|
||||
}
|
||||
this._ast = { ...newAst }
|
||||
|
||||
@ -544,6 +545,7 @@ export class KclManager {
|
||||
this.lastSuccessfulVariables = execState.variables
|
||||
this.lastSuccessfulOperations = execState.operations
|
||||
}
|
||||
return null
|
||||
}
|
||||
cancelAllExecutions() {
|
||||
this._cancelTokens.forEach((_, key) => {
|
||||
@ -651,7 +653,8 @@ export class KclManager {
|
||||
// When we don't re-execute, we still want to update the program
|
||||
// memory with the new ast. So we will hit the mock executor
|
||||
// instead..
|
||||
await this.executeAstMock(astWithUpdatedSource)
|
||||
const didReParse = await this.executeAstMock(astWithUpdatedSource)
|
||||
if (err(didReParse)) return Promise.reject(didReParse)
|
||||
}
|
||||
|
||||
return { selections: returnVal, newAst: astWithUpdatedSource }
|
||||
|
@ -18,6 +18,7 @@ import {
|
||||
EXECUTION_TYPE_REAL,
|
||||
} from '@src/lib/constants'
|
||||
import type { Selections } from '@src/lib/selections'
|
||||
import { err, reject } from '@src/lib/trap'
|
||||
|
||||
/**
|
||||
* Updates the complete modeling state:
|
||||
@ -89,7 +90,10 @@ export async function updateModelingState(
|
||||
ast: updatedAst.newAst,
|
||||
})
|
||||
} else if (executionType === EXECUTION_TYPE_MOCK) {
|
||||
await dependencies.kclManager.executeAstMock(updatedAst.newAst)
|
||||
const didReParse = await dependencies.kclManager.executeAstMock(
|
||||
updatedAst.newAst
|
||||
)
|
||||
if (err(didReParse)) return reject(didReParse)
|
||||
} else if (executionType === EXECUTION_TYPE_NONE) {
|
||||
// No execution.
|
||||
}
|
||||
|
Reference in New Issue
Block a user