Migrate more functions to use kwargs (#6551)
These little helper functions (legAng, segLen etc) were already using keyword arguments, but when the frontend created AST nodes, it was creating them as CallExpression not CallExpressionKw. We have backwards-compatibility so it's fine, but we should not be relying on that anymore. This PR should not have any user-observable change.
This commit is contained in:
@ -16,3 +16,5 @@ export const ARG_END_ABSOLUTE_Y = 'endAbsoluteY'
|
||||
export const ARG_INTERSECT_TAG = 'intersectTag'
|
||||
export const ARG_INTERIOR_ABSOLUTE = 'interiorAbsolute'
|
||||
export const ARG_AT = 'at'
|
||||
export const ARG_LEG = 'leg'
|
||||
export const ARG_HYPOTENUSE = 'hypotenuse'
|
||||
|
@ -318,8 +318,8 @@ part001 = startSketchOn(XY)
|
||||
|> angledLine(angle = myVar, length = segLen(seg01)) // ln-use segLen for second arg
|
||||
|> angledLine(angle = 45, length = segLen(seg01)) // ln-segLen again
|
||||
|> angledLine(angle = 54, length = segLen(seg01)) // ln-should be transformed to angledLine
|
||||
|> angledLine(angle = legAngX(segLen(seg01), myVar), lengthX = min([segLen(seg01), myVar])) // ln-should use legAngX to calculate angle
|
||||
|> angledLine(angle = 180 + legAngX(segLen(seg01), myVar), lengthX = min([segLen(seg01), myVar])) // ln-same as above but should have + 180 to match original quadrant
|
||||
|> angledLine(angle = legAngX(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-should use legAngX to calculate angle
|
||||
|> angledLine(angle = 180 + legAngX(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-same as above but should have + 180 to match original quadrant
|
||||
|> line(end = [
|
||||
legLen(hypotenuse = segLen(seg01), leg = myVar),
|
||||
min([segLen(seg01), myVar])
|
||||
@ -330,8 +330,8 @@ part001 = startSketchOn(XY)
|
||||
]) // ln-negative legLen yRelative
|
||||
|> angledLine(angle = 58, length = segLen(seg01)) // ln-angledLineOfYLength-free should become angledLine
|
||||
|> angledLine(angle = myAng, length = segLen(seg01)) // ln-angledLineOfYLength-angle should become angledLine
|
||||
|> angledLine(angle = legAngY(segLen(seg01), myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative use legAngY
|
||||
|> angledLine(angle = 270 + legAngY(segLen(seg01), myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp
|
||||
|> angledLine(angle = legAngY(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative use legAngY
|
||||
|> angledLine(angle = 270 + legAngY(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp
|
||||
|> xLine(length = segLen(seg01)) // ln-xLine-free should sub in segLen
|
||||
|> yLine(length = segLen(seg01)) // ln-yLine-free should sub in segLen
|
||||
|> xLine(length = segLen(seg01)) // ln-xLineTo-free should convert to xLine
|
||||
|
@ -6,6 +6,8 @@ import {
|
||||
ARG_END,
|
||||
ARG_END_ABSOLUTE,
|
||||
ARG_END_ABSOLUTE_X,
|
||||
ARG_LEG,
|
||||
ARG_HYPOTENUSE,
|
||||
ARG_END_ABSOLUTE_Y,
|
||||
ARG_INTERSECT_TAG,
|
||||
ARG_LENGTH,
|
||||
@ -473,9 +475,9 @@ const getMinAndSegAngVals = (
|
||||
createArrayExpression([createSegLen(referenceSegName), varVal]),
|
||||
[]
|
||||
)
|
||||
const legAngle = createCallExpression(fnName, [
|
||||
createSegLen(referenceSegName),
|
||||
varVal,
|
||||
const legAngle = createCallExpressionStdLibKw(fnName, null, [
|
||||
createLabeledArg(ARG_HYPOTENUSE, createSegLen(referenceSegName)),
|
||||
createLabeledArg(ARG_LEG, varVal),
|
||||
])
|
||||
return [minVal, legAngle]
|
||||
}
|
||||
@ -2177,26 +2179,38 @@ export function transformAstSketchLines({
|
||||
}
|
||||
|
||||
function createSegLen(referenceSegName: string): BinaryPart {
|
||||
return createCallExpression('segLen', [createLocalName(referenceSegName)])
|
||||
return createCallExpressionStdLibKw(
|
||||
'segLen',
|
||||
createLocalName(referenceSegName),
|
||||
[]
|
||||
)
|
||||
}
|
||||
|
||||
function createSegAngle(referenceSegName: string): BinaryPart {
|
||||
return createCallExpression('segAng', [createLocalName(referenceSegName)])
|
||||
return createCallExpressionStdLibKw(
|
||||
'segAng',
|
||||
createLocalName(referenceSegName),
|
||||
[]
|
||||
)
|
||||
}
|
||||
|
||||
function createSegEnd(
|
||||
referenceSegName: string,
|
||||
isX: boolean
|
||||
): Node<CallExpression> {
|
||||
return createCallExpression(isX ? 'segEndX' : 'segEndY', [
|
||||
): Node<CallExpressionKw> {
|
||||
return createCallExpressionStdLibKw(
|
||||
isX ? 'segEndX' : 'segEndY',
|
||||
createLocalName(referenceSegName),
|
||||
])
|
||||
[]
|
||||
)
|
||||
}
|
||||
|
||||
function createLastSeg(isX: boolean): Node<CallExpression> {
|
||||
return createCallExpression(isX ? 'lastSegX' : 'lastSegY', [
|
||||
function createLastSeg(isX: boolean): Node<CallExpressionKw> {
|
||||
return createCallExpressionStdLibKw(
|
||||
isX ? 'lastSegX' : 'lastSegY',
|
||||
createPipeSubstitution(),
|
||||
])
|
||||
[]
|
||||
)
|
||||
}
|
||||
|
||||
export type ConstraintLevel = 'free' | 'partial' | 'full'
|
||||
@ -2312,16 +2326,30 @@ export function isNotLiteralArrayOrStatic(
|
||||
}
|
||||
|
||||
export function isExprBinaryPart(expr: Expr): expr is BinaryPart {
|
||||
if (
|
||||
expr.type === 'Literal' ||
|
||||
expr.type === 'Name' ||
|
||||
expr.type === 'BinaryExpression' ||
|
||||
expr.type === 'CallExpression' ||
|
||||
expr.type === 'UnaryExpression' ||
|
||||
expr.type === 'MemberExpression'
|
||||
)
|
||||
return true
|
||||
return false
|
||||
switch (expr.type) {
|
||||
case 'Literal':
|
||||
case 'Name':
|
||||
case 'BinaryExpression':
|
||||
case 'CallExpression':
|
||||
case 'CallExpressionKw':
|
||||
case 'UnaryExpression':
|
||||
case 'MemberExpression':
|
||||
case 'IfExpression':
|
||||
return true
|
||||
case 'TagDeclarator':
|
||||
case 'PipeSubstitution':
|
||||
case 'ArrayExpression':
|
||||
case 'PipeExpression':
|
||||
case 'ObjectExpression':
|
||||
case 'FunctionExpression':
|
||||
case 'ArrayRangeExpression':
|
||||
case 'LabelledExpression':
|
||||
case 'AscribedExpression':
|
||||
return false
|
||||
default:
|
||||
const _exhaustiveCheck: never = expr
|
||||
return false // unreachable
|
||||
}
|
||||
}
|
||||
|
||||
function getInputOfType(a: InputArgs, b: LineInputsType | 'radius'): InputArg {
|
||||
|
Reference in New Issue
Block a user