remove the copies everywhere
Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
		@ -534,7 +534,7 @@ export class SceneEntities {
 | 
			
		||||
    segmentName: 'line' | 'tangentialArcTo' = 'line',
 | 
			
		||||
    shouldTearDown = true
 | 
			
		||||
  ) => {
 | 
			
		||||
    const _ast = JSON.parse(JSON.stringify(kclManager.ast))
 | 
			
		||||
    const _ast = kclManager.ast
 | 
			
		||||
 | 
			
		||||
    const _node1 = getNodeFromPath<VariableDeclaration>(
 | 
			
		||||
      _ast,
 | 
			
		||||
@ -692,7 +692,7 @@ export class SceneEntities {
 | 
			
		||||
    sketchOrigin: [number, number, number],
 | 
			
		||||
    rectangleOrigin: [x: number, y: number]
 | 
			
		||||
  ) => {
 | 
			
		||||
    let _ast = JSON.parse(JSON.stringify(kclManager.ast))
 | 
			
		||||
    let _ast = kclManager.ast
 | 
			
		||||
 | 
			
		||||
    const _node1 = getNodeFromPath<VariableDeclaration>(
 | 
			
		||||
      _ast,
 | 
			
		||||
@ -723,7 +723,9 @@ export class SceneEntities {
 | 
			
		||||
      ...getRectangleCallExpressions(rectangleOrigin, tags),
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
    _ast = parse(recast(_ast))
 | 
			
		||||
    let result = parse(recast(_ast))
 | 
			
		||||
    if (trap(result)) return Promise.reject(result)
 | 
			
		||||
    _ast = result
 | 
			
		||||
 | 
			
		||||
    const { programMemoryOverride, truncatedAst } = await this.setupSketch({
 | 
			
		||||
      sketchPathToNode,
 | 
			
		||||
@ -737,7 +739,7 @@ export class SceneEntities {
 | 
			
		||||
    sceneInfra.setCallbacks({
 | 
			
		||||
      onMove: async (args) => {
 | 
			
		||||
        // Update the width and height of the draft rectangle
 | 
			
		||||
        const pathToNodeTwo = JSON.parse(JSON.stringify(sketchPathToNode))
 | 
			
		||||
        const pathToNodeTwo = sketchPathToNode
 | 
			
		||||
        pathToNodeTwo[1][0] = 0
 | 
			
		||||
 | 
			
		||||
        const _node = getNodeFromPath<VariableDeclaration>(
 | 
			
		||||
@ -799,7 +801,9 @@ export class SceneEntities {
 | 
			
		||||
        if (sketchInit.type === 'PipeExpression') {
 | 
			
		||||
          updateRectangleSketch(sketchInit, x, y, tags[0])
 | 
			
		||||
 | 
			
		||||
          _ast = parse(recast(_ast))
 | 
			
		||||
          let result = parse(recast(_ast))
 | 
			
		||||
          if (trap(result)) return Promise.reject(result)
 | 
			
		||||
          _ast = result
 | 
			
		||||
 | 
			
		||||
          // Update the primary AST and unequip the rectangle tool
 | 
			
		||||
          await kclManager.executeAstMock(_ast)
 | 
			
		||||
@ -1003,10 +1007,8 @@ export class SceneEntities {
 | 
			
		||||
      PROFILE_START,
 | 
			
		||||
    ])
 | 
			
		||||
    if (!group) return
 | 
			
		||||
    const pathToNode: PathToNode = JSON.parse(
 | 
			
		||||
      JSON.stringify(group.userData.pathToNode)
 | 
			
		||||
    )
 | 
			
		||||
    const varDecIndex = JSON.parse(JSON.stringify(pathToNode[1][0]))
 | 
			
		||||
    const pathToNode: PathToNode = group.userData.pathToNode
 | 
			
		||||
    const varDecIndex: number = pathToNode[1][0] as number
 | 
			
		||||
    if (draftInfo) {
 | 
			
		||||
      pathToNode[1][0] = 0
 | 
			
		||||
    }
 | 
			
		||||
@ -1719,7 +1721,7 @@ function prepareTruncatedMemoryAndAst(
 | 
			
		||||
    }
 | 
			
		||||
  | Error {
 | 
			
		||||
  const bodyIndex = Number(sketchPathToNode?.[1]?.[0]) || 0
 | 
			
		||||
  const _ast = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  const _ast = ast
 | 
			
		||||
 | 
			
		||||
  const _node = getNodeFromPath<VariableDeclaration>(
 | 
			
		||||
    _ast,
 | 
			
		||||
@ -1778,7 +1780,7 @@ function prepareTruncatedMemoryAndAst(
 | 
			
		||||
  }
 | 
			
		||||
  const truncatedAst: Program = {
 | 
			
		||||
    ..._ast,
 | 
			
		||||
    body: [JSON.parse(JSON.stringify(_ast.body[bodyIndex]))],
 | 
			
		||||
    body: [_ast.body[bodyIndex]],
 | 
			
		||||
  }
 | 
			
		||||
  const programMemoryOverride = programMemoryInit()
 | 
			
		||||
  if (err(programMemoryOverride)) return programMemoryOverride
 | 
			
		||||
@ -1804,7 +1806,7 @@ function prepareTruncatedMemoryAndAst(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (value.type === 'TagIdentifier') {
 | 
			
		||||
      programMemoryOverride.root[key] = JSON.parse(JSON.stringify(value))
 | 
			
		||||
      programMemoryOverride.root[key] = value
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -1819,7 +1821,7 @@ function prepareTruncatedMemoryAndAst(
 | 
			
		||||
    if (!memoryItem) {
 | 
			
		||||
      continue
 | 
			
		||||
    }
 | 
			
		||||
    programMemoryOverride.root[name] = JSON.parse(JSON.stringify(memoryItem))
 | 
			
		||||
    programMemoryOverride.root[name] = memoryItem
 | 
			
		||||
  }
 | 
			
		||||
  return {
 | 
			
		||||
    truncatedAst,
 | 
			
		||||
 | 
			
		||||
@ -151,9 +151,7 @@ export function useCalc({
 | 
			
		||||
        ast,
 | 
			
		||||
        engineCommandManager,
 | 
			
		||||
        useFakeExecutor: true,
 | 
			
		||||
        programMemoryOverride: JSON.parse(
 | 
			
		||||
          JSON.stringify(kclManager.programMemory)
 | 
			
		||||
        ),
 | 
			
		||||
        programMemoryOverride: kclManager.programMemory,
 | 
			
		||||
      }).then(({ programMemory }) => {
 | 
			
		||||
        const resultDeclaration = ast.body.find(
 | 
			
		||||
          (a) =>
 | 
			
		||||
 | 
			
		||||
@ -513,7 +513,7 @@ export const ModelingMachineProvider = ({
 | 
			
		||||
      services: {
 | 
			
		||||
        'AST-undo-startSketchOn': async ({ sketchDetails }) => {
 | 
			
		||||
          if (!sketchDetails) return
 | 
			
		||||
          const newAst: Program = JSON.parse(JSON.stringify(kclManager.ast))
 | 
			
		||||
          const newAst: Program = kclManager.ast
 | 
			
		||||
          const varDecIndex = sketchDetails.sketchPathToNode[1][0]
 | 
			
		||||
          // remove body item at varDecIndex
 | 
			
		||||
          newAst.body = newAst.body.filter((_, i) => i !== varDecIndex)
 | 
			
		||||
 | 
			
		||||
@ -145,7 +145,7 @@ export async function applyConstraintIntersect({
 | 
			
		||||
  const { transforms, forcedSelectionRanges } = info
 | 
			
		||||
 | 
			
		||||
  const transform1 = transformSecondarySketchLinesTagFirst({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges: forcedSelectionRanges,
 | 
			
		||||
    transformInfos: transforms,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
 | 
			
		||||
@ -106,7 +106,7 @@ export async function applyConstraintAbsDistance({
 | 
			
		||||
  const transformInfos = info.transforms
 | 
			
		||||
 | 
			
		||||
  const transform1 = transformAstSketchLines({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges: selectionRanges,
 | 
			
		||||
    transformInfos,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
@ -128,7 +128,7 @@ export async function applyConstraintAbsDistance({
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  const transform2 = transformAstSketchLines({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges: selectionRanges,
 | 
			
		||||
    transformInfos,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
@ -176,7 +176,7 @@ export function applyConstraintAxisAlign({
 | 
			
		||||
  let finalValue = createIdentifier('ZERO')
 | 
			
		||||
 | 
			
		||||
  return transformAstSketchLines({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges: selectionRanges,
 | 
			
		||||
    transformInfos,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
 | 
			
		||||
@ -100,7 +100,7 @@ export async function applyConstraintAngleBetween({
 | 
			
		||||
  const transformInfos = info.transforms
 | 
			
		||||
 | 
			
		||||
  const transformed1 = transformSecondarySketchLinesTagFirst({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges,
 | 
			
		||||
    transformInfos,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
 | 
			
		||||
@ -108,7 +108,7 @@ export async function applyConstraintHorzVertDistance({
 | 
			
		||||
  if (err(info)) return Promise.reject(info)
 | 
			
		||||
  const transformInfos = info.transforms
 | 
			
		||||
  const transformed = transformSecondarySketchLinesTagFirst({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges,
 | 
			
		||||
    transformInfos,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
 | 
			
		||||
@ -84,7 +84,7 @@ export async function applyConstraintAngleLength({
 | 
			
		||||
 | 
			
		||||
  const { transforms } = angleLength
 | 
			
		||||
  const sketched = transformAstSketchLines({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges,
 | 
			
		||||
    transformInfos: transforms,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
@ -139,7 +139,7 @@ export async function applyConstraintAngleLength({
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const retval = transformAstSketchLines({
 | 
			
		||||
    ast: JSON.parse(JSON.stringify(kclManager.ast)),
 | 
			
		||||
    ast: kclManager.ast,
 | 
			
		||||
    selectionRanges,
 | 
			
		||||
    transformInfos: transforms,
 | 
			
		||||
    programMemory: kclManager.programMemory,
 | 
			
		||||
 | 
			
		||||
@ -42,9 +42,8 @@ function registerServerCapability(
 | 
			
		||||
  serverCapabilities: ServerCapabilities,
 | 
			
		||||
  registration: Registration
 | 
			
		||||
): ServerCapabilities | Error {
 | 
			
		||||
  const serverCapabilitiesCopy = JSON.parse(
 | 
			
		||||
    JSON.stringify(serverCapabilities)
 | 
			
		||||
  ) as IFlexibleServerCapabilities
 | 
			
		||||
  const serverCapabilitiesCopy =
 | 
			
		||||
    serverCapabilities as IFlexibleServerCapabilities
 | 
			
		||||
  const { method, registerOptions } = registration
 | 
			
		||||
  const providerName = ServerCapabilitiesProviders[method]
 | 
			
		||||
 | 
			
		||||
@ -52,10 +51,7 @@ function registerServerCapability(
 | 
			
		||||
    if (!registerOptions) {
 | 
			
		||||
      serverCapabilitiesCopy[providerName] = true
 | 
			
		||||
    } else {
 | 
			
		||||
      serverCapabilitiesCopy[providerName] = Object.assign(
 | 
			
		||||
        {},
 | 
			
		||||
        JSON.parse(JSON.stringify(registerOptions))
 | 
			
		||||
      )
 | 
			
		||||
      serverCapabilitiesCopy[providerName] = Object.assign({}, registerOptions)
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    return new Error('Could not register server capability.')
 | 
			
		||||
@ -68,9 +64,8 @@ function unregisterServerCapability(
 | 
			
		||||
  serverCapabilities: ServerCapabilities,
 | 
			
		||||
  unregistration: Unregistration
 | 
			
		||||
): ServerCapabilities {
 | 
			
		||||
  const serverCapabilitiesCopy = JSON.parse(
 | 
			
		||||
    JSON.stringify(serverCapabilities)
 | 
			
		||||
  ) as IFlexibleServerCapabilities
 | 
			
		||||
  const serverCapabilitiesCopy =
 | 
			
		||||
    serverCapabilities as IFlexibleServerCapabilities
 | 
			
		||||
  const { method } = unregistration
 | 
			
		||||
  const providerName = ServerCapabilitiesProviders[method]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -710,7 +710,7 @@ export function moveValueIntoNewVariablePath(
 | 
			
		||||
    programMemory,
 | 
			
		||||
    pathToNode
 | 
			
		||||
  )
 | 
			
		||||
  let _node = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  let _node = ast
 | 
			
		||||
  const boop = replacer(_node, variableName)
 | 
			
		||||
  if (trap(boop)) return { modifiedAst: ast }
 | 
			
		||||
 | 
			
		||||
@ -742,7 +742,7 @@ export function moveValueIntoNewVariable(
 | 
			
		||||
    programMemory,
 | 
			
		||||
    sourceRange
 | 
			
		||||
  )
 | 
			
		||||
  let _node = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  let _node = ast
 | 
			
		||||
  const replaced = replacer(_node, variableName)
 | 
			
		||||
  if (trap(replaced)) return { modifiedAst: ast }
 | 
			
		||||
 | 
			
		||||
@ -767,7 +767,7 @@ export function deleteSegmentFromPipeExpression(
 | 
			
		||||
  code: string,
 | 
			
		||||
  pathToNode: PathToNode
 | 
			
		||||
): Program | Error {
 | 
			
		||||
  let _modifiedAst: Program = JSON.parse(JSON.stringify(modifiedAst))
 | 
			
		||||
  let _modifiedAst: Program = modifiedAst
 | 
			
		||||
 | 
			
		||||
  dependentRanges.forEach((range) => {
 | 
			
		||||
    const path = getNodePathFromSourceRange(_modifiedAst, range)
 | 
			
		||||
@ -884,7 +884,7 @@ export async function deleteFromSelection(
 | 
			
		||||
  getFaceDetails: (id: string) => Promise<Models['FaceIsPlanar_type']> = () =>
 | 
			
		||||
    ({} as any)
 | 
			
		||||
): Promise<Program | Error> {
 | 
			
		||||
  const astClone = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  const astClone = ast
 | 
			
		||||
  const range = selection.range
 | 
			
		||||
  const path = getNodePathFromSourceRange(ast, range)
 | 
			
		||||
  const varDec = getNodeFromPath<VariableDeclarator>(
 | 
			
		||||
 | 
			
		||||
@ -87,10 +87,7 @@ const yo2 = hmm([identifierGuy + 5])`
 | 
			
		||||
    expect(result.isSafe).toBe(true)
 | 
			
		||||
    expect(result.value?.type).toBe('BinaryExpression')
 | 
			
		||||
    expect(code.slice(result.value.start, result.value.end)).toBe('100 + 100')
 | 
			
		||||
    const replaced = result.replacer(
 | 
			
		||||
      JSON.parse(JSON.stringify(ast)),
 | 
			
		||||
      'replaceName'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(ast, 'replaceName')
 | 
			
		||||
    if (err(replaced)) throw replaced
 | 
			
		||||
    const outCode = recast(replaced.modifiedAst)
 | 
			
		||||
    expect(outCode).toContain(`angledLine([replaceName, 3.09], %)`)
 | 
			
		||||
@ -114,10 +111,7 @@ const yo2 = hmm([identifierGuy + 5])`
 | 
			
		||||
    expect(result.isSafe).toBe(true)
 | 
			
		||||
    expect(result.value?.type).toBe('CallExpression')
 | 
			
		||||
    expect(code.slice(result.value.start, result.value.end)).toBe("def('yo')")
 | 
			
		||||
    const replaced = result.replacer(
 | 
			
		||||
      JSON.parse(JSON.stringify(ast)),
 | 
			
		||||
      'replaceName'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(ast, 'replaceName')
 | 
			
		||||
    if (err(replaced)) throw replaced
 | 
			
		||||
    const outCode = recast(replaced.modifiedAst)
 | 
			
		||||
    expect(outCode).toContain(`angledLine([replaceName, 3.09], %)`)
 | 
			
		||||
@ -154,10 +148,7 @@ const yo2 = hmm([identifierGuy + 5])`
 | 
			
		||||
    expect(result.isSafe).toBe(true)
 | 
			
		||||
    expect(result.value?.type).toBe('BinaryExpression')
 | 
			
		||||
    expect(code.slice(result.value.start, result.value.end)).toBe('5 + 6')
 | 
			
		||||
    const replaced = result.replacer(
 | 
			
		||||
      JSON.parse(JSON.stringify(ast)),
 | 
			
		||||
      'replaceName'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(ast, 'replaceName')
 | 
			
		||||
    if (err(replaced)) throw replaced
 | 
			
		||||
    const outCode = recast(replaced.modifiedAst)
 | 
			
		||||
    expect(outCode).toContain(`const yo = replaceName`)
 | 
			
		||||
@ -173,10 +164,7 @@ const yo2 = hmm([identifierGuy + 5])`
 | 
			
		||||
    expect(code.slice(result.value.start, result.value.end)).toBe(
 | 
			
		||||
      "jkl('yo') + 2"
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(
 | 
			
		||||
      JSON.parse(JSON.stringify(ast)),
 | 
			
		||||
      'replaceName'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(ast, 'replaceName')
 | 
			
		||||
    if (err(replaced)) throw replaced
 | 
			
		||||
    const { modifiedAst } = replaced
 | 
			
		||||
    const outCode = recast(modifiedAst)
 | 
			
		||||
@ -195,10 +183,7 @@ const yo2 = hmm([identifierGuy + 5])`
 | 
			
		||||
    expect(code.slice(result.value.start, result.value.end)).toBe(
 | 
			
		||||
      'identifierGuy + 5'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(
 | 
			
		||||
      JSON.parse(JSON.stringify(ast)),
 | 
			
		||||
      'replaceName'
 | 
			
		||||
    )
 | 
			
		||||
    const replaced = result.replacer(ast, 'replaceName')
 | 
			
		||||
    if (err(replaced)) throw replaced
 | 
			
		||||
    const { modifiedAst } = replaced
 | 
			
		||||
    const outCode = recast(modifiedAst)
 | 
			
		||||
 | 
			
		||||
@ -520,8 +520,8 @@ export function isNodeSafeToReplacePath(
 | 
			
		||||
  const replaceNodeWithIdentifier: ReplacerFn = (_ast, varName) => {
 | 
			
		||||
    const identifier = createIdentifier(varName)
 | 
			
		||||
    const last = finPath[finPath.length - 1]
 | 
			
		||||
    const pathToReplaced = JSON.parse(JSON.stringify(finPath))
 | 
			
		||||
    pathToReplaced[1][0] = pathToReplaced[1][0] + 1
 | 
			
		||||
    const pathToReplaced = finPath
 | 
			
		||||
    pathToReplaced[1][0] = (pathToReplaced[1][0] as number) + 1
 | 
			
		||||
    const startPath = finPath.slice(0, -1)
 | 
			
		||||
    const _nodeToReplace = getNodeFromPath(_ast, startPath)
 | 
			
		||||
    if (err(_nodeToReplace)) return _nodeToReplace
 | 
			
		||||
 | 
			
		||||
@ -1496,7 +1496,7 @@ export function transformSecondarySketchLinesTagFirst({
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  | Error {
 | 
			
		||||
  // let node = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  // let node = ast
 | 
			
		||||
  const primarySelection = selectionRanges.codeBasedSelections[0].range
 | 
			
		||||
 | 
			
		||||
  const _tag = giveSketchFnCallTag(ast, primarySelection, forceSegName)
 | 
			
		||||
@ -1565,7 +1565,7 @@ export function transformAstSketchLines({
 | 
			
		||||
    }
 | 
			
		||||
  | Error {
 | 
			
		||||
  // deep clone since we are mutating in a loop, of which any could fail
 | 
			
		||||
  let node = JSON.parse(JSON.stringify(ast))
 | 
			
		||||
  let node = ast
 | 
			
		||||
  let _valueUsedInTransform // TODO should this be an array?
 | 
			
		||||
  const pathToNodeMap: PathToNodeMap = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ export function updatePathToNodeFromMap(
 | 
			
		||||
  oldPath: PathToNode,
 | 
			
		||||
  pathToNodeMap: { [key: number]: PathToNode }
 | 
			
		||||
): PathToNode {
 | 
			
		||||
  const updatedPathToNode = JSON.parse(JSON.stringify(oldPath))
 | 
			
		||||
  const updatedPathToNode = oldPath
 | 
			
		||||
  let max = 0
 | 
			
		||||
  Object.values(pathToNodeMap).forEach((path) => {
 | 
			
		||||
    const index = Number(path[1][0])
 | 
			
		||||
 | 
			
		||||
@ -96,9 +96,7 @@ export function useCalculateKclExpression({
 | 
			
		||||
        ast,
 | 
			
		||||
        engineCommandManager,
 | 
			
		||||
        useFakeExecutor: true,
 | 
			
		||||
        programMemoryOverride: JSON.parse(
 | 
			
		||||
          JSON.stringify(kclManager.programMemory)
 | 
			
		||||
        ),
 | 
			
		||||
        programMemoryOverride: kclManager.programMemory,
 | 
			
		||||
      })
 | 
			
		||||
      const resultDeclaration = ast.body.find(
 | 
			
		||||
        (a) =>
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user