We continue migrating KCL stdlib functions to use keyword arguments. Next up is the `angledLine` family of functions (except `angledLineThatIntersects, which will be a quick follow-up). Before vs. after: `angledLine({angle = 90, length = 3}, %, $edge)` => `angledLine(angle = 90, length = 3, tag = $edge)` `angledLineOfXLength({angle = 90, length = 3}, %, $edge)` => `angledLine(angle = 90, lengthX = 3, tag = $edge)` `angledLineOfYLength({angle = 90, length = 3}, %, $edge)` => `angledLine(angle = 90, lengthY = 3, tag = $edge)` `angledLineToX({angle = 90, length = 3}, %, $edge)` => `angledLine(angle = 90, endAbsoluteX = 3, tag = $edge)` `angledLineToY({angle = 90, length = 3}, %, $edge)` => `angledLine(angle = 90, endAbsoluteY = 3, tag = $edge)`
33 lines
876 B
TypeScript
33 lines
876 B
TypeScript
import {
|
|
ARG_ANGLE,
|
|
ARG_END_ABSOLUTE_X,
|
|
ARG_END_ABSOLUTE_Y,
|
|
ARG_LENGTH,
|
|
ARG_LENGTH_X,
|
|
ARG_LENGTH_Y,
|
|
} from '@src/lang/constants'
|
|
import { createArrayExpression } from '@src/lang/create'
|
|
import { findKwArg, findKwArgAny } from '@src/lang/util'
|
|
import type { CallExpressionKw, Expr } from '@src/lang/wasm'
|
|
|
|
/**
|
|
Find the angle and some sort of length parameter from an angledLine-ish call.
|
|
E.g. finds the (angle, length) in angledLine or the (angle, endAbsoluteX) in angledLineToX
|
|
*/
|
|
export function findAngleLengthPair(call: CallExpressionKw): Expr | undefined {
|
|
const angle = findKwArg(ARG_ANGLE, call)
|
|
const lengthLike = findKwArgAny(
|
|
[
|
|
ARG_LENGTH,
|
|
ARG_LENGTH_X,
|
|
ARG_LENGTH_Y,
|
|
ARG_END_ABSOLUTE_X,
|
|
ARG_END_ABSOLUTE_Y,
|
|
],
|
|
call
|
|
)
|
|
if (angle && lengthLike) {
|
|
return createArrayExpression([angle, lengthLike])
|
|
}
|
|
}
|