Declare parts of std in KCL rather than Rust (#5147)

Declare std in KCL
This commit is contained in:
Nick Cameron
2025-02-20 19:33:21 +13:00
committed by GitHub
parent 099c48cd63
commit 7500ef0065
205 changed files with 17053 additions and 1503 deletions

15
docs/kcl/HALF_TURN.md Normal file
View File

@ -0,0 +1,15 @@
---
title: "HALF_TURN"
excerpt: ""
layout: manual
---
```js
HALF_TURN: number(deg) = 180deg
```

15
docs/kcl/QUARTER_TURN.md Normal file
View File

@ -0,0 +1,15 @@
---
title: "QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
QUARTER_TURN: number(deg) = 90deg
```

View File

@ -0,0 +1,15 @@
---
title: "THREE_QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
THREE_QUARTER_TURN: number(deg) = 270deg
```

15
docs/kcl/ZERO.md Normal file
View File

@ -0,0 +1,15 @@
---
title: "ZERO"
excerpt: ""
layout: manual
---
```js
ZERO: number = 0
```

32
docs/kcl/const_E.md Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
---
title: "HALF_TURN"
excerpt: ""
layout: manual
---
```js
HALF_TURN: number(deg) = 180deg
```

28
docs/kcl/const_PI.md Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
---
title: "QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
QUARTER_TURN: number(deg) = 90deg
```

32
docs/kcl/const_TAU.md Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
---
title: "THREE_QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
THREE_QUARTER_TURN: number(deg) = 270deg
```

15
docs/kcl/const_ZERO.md Normal file
View File

@ -0,0 +1,15 @@
---
title: "ZERO"
excerpt: ""
layout: manual
---
```js
ZERO: number = 0
```

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,15 @@
---
title: "std::prelude::HALF_TURN"
excerpt: ""
layout: manual
---
```js
std::prelude::HALF_TURN: number(deg) = 180deg
```

View File

@ -0,0 +1,15 @@
---
title: "std::prelude::QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
std::prelude::QUARTER_TURN: number(deg) = 90deg
```

View File

@ -0,0 +1,15 @@
---
title: "std::prelude::THREE_QUARTER_TURN"
excerpt: ""
layout: manual
---
```js
std::prelude::THREE_QUARTER_TURN: number(deg) = 270deg
```

View File

@ -0,0 +1,15 @@
---
title: "std::prelude::ZERO"
excerpt: ""
layout: manual
---
```js
std::prelude::ZERO: number = 0
```

File diff suppressed because one or more lines are too long

View File

@ -4,9 +4,11 @@ excerpt: "Return the value of Eulers number `e`."
layout: manual
---
**WARNING:** This function is deprecated.
Return the value of Eulers number `e`.
**DEPRECATED** use the constant E
```js
e() -> number

View File

@ -9,110 +9,117 @@ layout: manual
* [Types](kcl/types)
* [Modules](kcl/modules)
* [Known Issues](kcl/KNOWN-ISSUES)
* [`abs`](kcl/abs)
* [`acos`](kcl/acos)
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
* [`angledLine`](kcl/angledLine)
* [`angledLineOfXLength`](kcl/angledLineOfXLength)
* [`angledLineOfYLength`](kcl/angledLineOfYLength)
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
* [`angledLineToX`](kcl/angledLineToX)
* [`angledLineToY`](kcl/angledLineToY)
* [`appearance`](kcl/appearance)
* [`arc`](kcl/arc)
* [`arcTo`](kcl/arcTo)
* [`asin`](kcl/asin)
* [`assert`](kcl/assert)
* [`assertEqual`](kcl/assertEqual)
* [`assertGreaterThan`](kcl/assertGreaterThan)
* [`assertGreaterThanOrEq`](kcl/assertGreaterThanOrEq)
* [`assertLessThan`](kcl/assertLessThan)
* [`assertLessThanOrEq`](kcl/assertLessThanOrEq)
* [`atan`](kcl/atan)
* [`atan2`](kcl/atan2)
* [`bezierCurve`](kcl/bezierCurve)
* [`ceil`](kcl/ceil)
* [`chamfer`](kcl/chamfer)
* [`circle`](kcl/circle)
* [`circleThreePoint`](kcl/circleThreePoint)
* [`close`](kcl/close)
* [`cm`](kcl/cm)
* [`cos`](kcl/cos)
* [`e`](kcl/e)
* [`extrude`](kcl/extrude)
* [`fillet`](kcl/fillet)
* [`floor`](kcl/floor)
* [`ft`](kcl/ft)
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
* [`getOppositeEdge`](kcl/getOppositeEdge)
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
* [`helix`](kcl/helix)
* [`helixRevolutions`](kcl/helixRevolutions)
* [`hole`](kcl/hole)
* [`hollow`](kcl/hollow)
* [`inch`](kcl/inch)
* [`lastSegX`](kcl/lastSegX)
* [`lastSegY`](kcl/lastSegY)
* [`legAngX`](kcl/legAngX)
* [`legAngY`](kcl/legAngY)
* [`legLen`](kcl/legLen)
* [`line`](kcl/line)
* [`ln`](kcl/ln)
* [`loft`](kcl/loft)
* [`log`](kcl/log)
* [`log10`](kcl/log10)
* [`log2`](kcl/log2)
* [`m`](kcl/m)
* [`map`](kcl/map)
* [`max`](kcl/max)
* [`min`](kcl/min)
* [`mirror2d`](kcl/mirror2d)
* [`mm`](kcl/mm)
* [`offsetPlane`](kcl/offsetPlane)
* [`patternCircular2d`](kcl/patternCircular2d)
* [`patternCircular3d`](kcl/patternCircular3d)
* [`patternLinear2d`](kcl/patternLinear2d)
* [`patternLinear3d`](kcl/patternLinear3d)
* [`patternTransform`](kcl/patternTransform)
* [`patternTransform2d`](kcl/patternTransform2d)
* [`pi`](kcl/pi)
* [`polar`](kcl/polar)
* [`polygon`](kcl/polygon)
* [`pop`](kcl/pop)
* [`pow`](kcl/pow)
* [`profileStart`](kcl/profileStart)
* [`profileStartX`](kcl/profileStartX)
* [`profileStartY`](kcl/profileStartY)
* [`push`](kcl/push)
* [`reduce`](kcl/reduce)
* [`rem`](kcl/rem)
* [`revolve`](kcl/revolve)
* [`round`](kcl/round)
* [`segAng`](kcl/segAng)
* [`segEnd`](kcl/segEnd)
* [`segEndX`](kcl/segEndX)
* [`segEndY`](kcl/segEndY)
* [`segLen`](kcl/segLen)
* [`segStart`](kcl/segStart)
* [`segStartX`](kcl/segStartX)
* [`segStartY`](kcl/segStartY)
* [`shell`](kcl/shell)
* [`sin`](kcl/sin)
* [`sqrt`](kcl/sqrt)
* [`startProfileAt`](kcl/startProfileAt)
* [`startSketchOn`](kcl/startSketchOn)
* [`sweep`](kcl/sweep)
* [`tan`](kcl/tan)
* [`tangentToEnd`](kcl/tangentToEnd)
* [`tangentialArc`](kcl/tangentialArc)
* [`tangentialArcTo`](kcl/tangentialArcTo)
* [`tangentialArcToRelative`](kcl/tangentialArcToRelative)
* [`tau`](kcl/tau)
* [`toDegrees`](kcl/toDegrees)
* [`toRadians`](kcl/toRadians)
* [`xLine`](kcl/xLine)
* [`xLineTo`](kcl/xLineTo)
* [`yLine`](kcl/yLine)
* [`yLineTo`](kcl/yLineTo)
* [`yd`](kcl/yd)
* **`std`**
* [`abs`](kcl/abs)
* [`acos`](kcl/acos)
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
* [`angledLine`](kcl/angledLine)
* [`angledLineOfXLength`](kcl/angledLineOfXLength)
* [`angledLineOfYLength`](kcl/angledLineOfYLength)
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
* [`angledLineToX`](kcl/angledLineToX)
* [`angledLineToY`](kcl/angledLineToY)
* [`appearance`](kcl/appearance)
* [`arc`](kcl/arc)
* [`arcTo`](kcl/arcTo)
* [`asin`](kcl/asin)
* [`assert`](kcl/assert)
* [`assertEqual`](kcl/assertEqual)
* [`assertGreaterThan`](kcl/assertGreaterThan)
* [`assertGreaterThanOrEq`](kcl/assertGreaterThanOrEq)
* [`assertLessThan`](kcl/assertLessThan)
* [`assertLessThanOrEq`](kcl/assertLessThanOrEq)
* [`atan`](kcl/atan)
* [`atan2`](kcl/atan2)
* [`bezierCurve`](kcl/bezierCurve)
* [`ceil`](kcl/ceil)
* [`chamfer`](kcl/chamfer)
* [`circle`](kcl/circle)
* [`circleThreePoint`](kcl/circleThreePoint)
* [`close`](kcl/close)
* [`cm`](kcl/cm)
* [`extrude`](kcl/extrude)
* [`fillet`](kcl/fillet)
* [`floor`](kcl/floor)
* [`ft`](kcl/ft)
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
* [`getOppositeEdge`](kcl/getOppositeEdge)
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
* [`helix`](kcl/helix)
* [`helixRevolutions`](kcl/helixRevolutions)
* [`hole`](kcl/hole)
* [`hollow`](kcl/hollow)
* [`inch`](kcl/inch)
* [`lastSegX`](kcl/lastSegX)
* [`lastSegY`](kcl/lastSegY)
* [`legAngX`](kcl/legAngX)
* [`legAngY`](kcl/legAngY)
* [`legLen`](kcl/legLen)
* [`line`](kcl/line)
* [`ln`](kcl/ln)
* [`loft`](kcl/loft)
* [`log`](kcl/log)
* [`log10`](kcl/log10)
* [`log2`](kcl/log2)
* [`m`](kcl/m)
* [`map`](kcl/map)
* [`max`](kcl/max)
* [`min`](kcl/min)
* [`mirror2d`](kcl/mirror2d)
* [`mm`](kcl/mm)
* [`offsetPlane`](kcl/offsetPlane)
* [`patternCircular2d`](kcl/patternCircular2d)
* [`patternCircular3d`](kcl/patternCircular3d)
* [`patternLinear2d`](kcl/patternLinear2d)
* [`patternLinear3d`](kcl/patternLinear3d)
* [`patternTransform`](kcl/patternTransform)
* [`patternTransform2d`](kcl/patternTransform2d)
* [`polar`](kcl/polar)
* [`polygon`](kcl/polygon)
* [`pop`](kcl/pop)
* [`pow`](kcl/pow)
* [`profileStart`](kcl/profileStart)
* [`profileStartX`](kcl/profileStartX)
* [`profileStartY`](kcl/profileStartY)
* [`push`](kcl/push)
* [`reduce`](kcl/reduce)
* [`rem`](kcl/rem)
* [`revolve`](kcl/revolve)
* [`round`](kcl/round)
* [`segAng`](kcl/segAng)
* [`segEnd`](kcl/segEnd)
* [`segEndX`](kcl/segEndX)
* [`segEndY`](kcl/segEndY)
* [`segLen`](kcl/segLen)
* [`segStart`](kcl/segStart)
* [`segStartX`](kcl/segStartX)
* [`segStartY`](kcl/segStartY)
* [`shell`](kcl/shell)
* [`sqrt`](kcl/sqrt)
* [`startProfileAt`](kcl/startProfileAt)
* [`startSketchOn`](kcl/startSketchOn)
* [`sweep`](kcl/sweep)
* [`tangentToEnd`](kcl/tangentToEnd)
* [`tangentialArc`](kcl/tangentialArc)
* [`tangentialArcTo`](kcl/tangentialArcTo)
* [`tangentialArcToRelative`](kcl/tangentialArcToRelative)
* [`toDegrees`](kcl/toDegrees)
* [`toRadians`](kcl/toRadians)
* [`xLine`](kcl/xLine)
* [`xLineTo`](kcl/xLineTo)
* [`yLine`](kcl/yLine)
* [`yLineTo`](kcl/yLineTo)
* [`yd`](kcl/yd)
* **`std::math`**
* [`E`](kcl/const_std-math-E)
* [`PI`](kcl/const_std-math-PI)
* [`TAU`](kcl/const_std-math-TAU)
* [`cos`](kcl/std-math-cos)
* [`sin`](kcl/std-math-sin)
* [`tan`](kcl/std-math-tan)
* **`std::prelude`**
* [`HALF_TURN`](kcl/const_std-prelude-HALF_TURN)
* [`QUARTER_TURN`](kcl/const_std-prelude-QUARTER_TURN)
* [`THREE_QUARTER_TURN`](kcl/const_std-prelude-THREE_QUARTER_TURN)
* [`ZERO`](kcl/const_std-prelude-ZERO)

View File

@ -4,9 +4,11 @@ excerpt: "Return the value of `pi`. Archimedes constant (π)."
layout: manual
---
**WARNING:** This function is deprecated.
Return the value of `pi`. Archimedes constant (π).
**DEPRECATED** use the constant PI
```js
pi() -> number

View File

@ -76,7 +76,7 @@ assertEqual(sum, 6, 0.00001, "1 + 2 + 3 summed is 6")
// Declare a function that sketches a decagon.
fn decagon(radius) {
// Each side of the decagon is turned this many degrees from the previous angle.
stepAngle = 1 / 10 * tau()
stepAngle = 1 / 10 * TAU
// Start the decagon sketch at this point.
startOfDecagonSketch = startSketchOn('XY')
@ -97,7 +97,7 @@ fn decagon(radius) {
/* The `decagon` above is basically like this pseudo-code:
fn decagon(radius):
stepAngle = (1/10) * tau()
stepAngle = (1/10) * TAU
plane = startSketchOn('XY')
startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)

File diff suppressed because one or more lines are too long

44
docs/kcl/std-math-cos.md Normal file

File diff suppressed because one or more lines are too long

44
docs/kcl/std-math-sin.md Normal file

File diff suppressed because one or more lines are too long

44
docs/kcl/std-math-tan.md Normal file

File diff suppressed because one or more lines are too long

View File

@ -83689,52 +83689,10 @@
"totalWidth = 10 * cm()"
]
},
{
"name": "cos",
"summary": "Compute the cosine of a number (in radians).",
"description": "",
"tags": [
"math"
],
"keywordArguments": false,
"args": [
{
"name": "num",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
}
],
"returnValue": {
"name": "",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"examples": [
"exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({\n angle = 30,\n length = 3 / cos(toRadians(30))\n }, %)\n |> yLineTo(0, %)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
]
},
{
"name": "e",
"summary": "Return the value of Eulers number `e`.",
"description": "",
"description": "**DEPRECATED** use the constant E",
"tags": [
"math"
],
@ -83754,7 +83712,7 @@
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"deprecated": true,
"examples": [
"exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({ angle = 30, length = 2 * e() ^ 2 }, %)\n |> yLineTo(0, %)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)"
]
@ -135417,7 +135375,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -135428,7 +135385,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -138031,7 +137993,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -138042,7 +138003,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -140649,7 +140615,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -140660,7 +140625,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -208035,7 +208005,7 @@
{
"name": "pi",
"summary": "Return the value of `pi`. Archimedes constant (π).",
"description": "",
"description": "**DEPRECATED** use the constant PI",
"tags": [
"math"
],
@ -208055,7 +208025,7 @@
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"deprecated": true,
"examples": [
"circumference = 70\n\nexampleSketch = startSketchOn(\"XZ\")\n |> circle({\n center = [0, 0],\n radius = circumference / (2 * pi())\n }, %)\n\nexample = extrude(exampleSketch, length = 5)"
]
@ -213842,7 +213812,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -213853,7 +213822,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -216455,7 +216429,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -216466,7 +216439,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -217342,7 +217320,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -217353,7 +217330,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -224740,7 +224722,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -224751,7 +224732,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -227351,7 +227337,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -227362,7 +227347,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -227858,7 +227848,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -227869,7 +227858,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -230470,7 +230464,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -230481,7 +230474,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -231357,7 +231355,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -231368,7 +231365,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -233607,7 +233609,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -233618,7 +233619,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -236218,7 +236224,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -236229,7 +236234,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -236725,7 +236735,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -236736,7 +236745,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -239339,7 +239353,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -239350,7 +239363,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -241951,7 +241969,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -241962,7 +241979,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -242838,7 +242860,6 @@
"type": "object",
"required": [
"__meta",
"memory",
"type"
],
"properties": {
@ -242849,7 +242870,12 @@
]
},
"memory": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentRef"
}
],
"nullable": true
},
"__meta": {
"type": "array",
@ -244660,7 +244686,7 @@
"examples": [
"// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(arr) {\n return reduce(arr, 0, add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum([1, 2, 3]), 6, 0.00001, \"1 + 2 + 3 summed is 6\")",
"// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(arr, 0, fn(i, result_so_far) {\n return i + result_so_far\n})\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum, 6, 0.00001, \"1 + 2 + 3 summed is 6\")",
"// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many degrees from the previous angle.\n stepAngle = 1 / 10 * tau()\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn('XY')\n |> startProfileAt([cos(0) * radius, sin(0) * radius], %)\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * tau()\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()"
"// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many degrees from the previous angle.\n stepAngle = 1 / 10 * TAU\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn('XY')\n |> startProfileAt([cos(0) * radius, sin(0) * radius], %)\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * TAU\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()"
]
},
{
@ -265136,48 +265162,6 @@
"// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nsize = 100\ncase = startSketchOn('XY')\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle({\n center = [-size / 2, -size / 2],\n radius = 25\n }, %)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle({\n center = [size / 2, -size / 2],\n radius = 25\n }, %)\n |> extrude(length = 50)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell([thing1, thing2], faces = ['end'], thickness = 5)"
]
},
{
"name": "sin",
"summary": "Compute the sine of a number (in radians).",
"description": "",
"tags": [
"math"
],
"keywordArguments": false,
"args": [
{
"name": "num",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
}
],
"returnValue": {
"name": "",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"examples": [
"exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({\n angle = 50,\n length = 15 / sin(toDegrees(135))\n }, %)\n |> yLineTo(0, %)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
]
},
{
"name": "sqrt",
"summary": "Compute the square root of a number.",
@ -285689,48 +285673,6 @@
"// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle({ center = [0, 0], radius = 1 }, %)\n |> sweep(path = helixPath)"
]
},
{
"name": "tan",
"summary": "Compute the tangent of a number (in radians).",
"description": "",
"tags": [
"math"
],
"keywordArguments": false,
"args": [
{
"name": "num",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
}
],
"returnValue": {
"name": "",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "double",
"type": "number",
"format": "double"
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"examples": [
"exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({ angle = 50, length = 50 * tan(1 / 2) }, %)\n |> yLineTo(0, %)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
]
},
{
"name": "tangentToEnd",
"summary": "Returns the angle coming out of the end of the segment in degrees.",
@ -301795,7 +301737,7 @@
{
"name": "tau",
"summary": "Return the value of `tau`. The full circle constant (τ). Equal to 2π.",
"description": "",
"description": "**DEPRECATED** use the constant TAU",
"tags": [
"math"
],
@ -301815,7 +301757,7 @@
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"deprecated": true,
"examples": [
"exampleSketch = startSketchOn(\"XZ\")\n |> startProfileAt([0, 0], %)\n |> angledLine({ angle = 50, length = 10 * tau() }, %)\n |> yLineTo(0, %)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
]

File diff suppressed because one or more lines are too long

View File

@ -4,9 +4,11 @@ excerpt: "Return the value of `tau`. The full circle constant (τ). Equal to 2π
layout: manual
---
**WARNING:** This function is deprecated.
Return the value of `tau`. The full circle constant (τ). Equal to 2π.
**DEPRECATED** use the constant TAU
```js
tau() -> number

View File

@ -295,7 +295,7 @@ Data for an imported geometry.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `Function`| | No |
| `memory` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| Any KCL value. | No |
| `memory` |[`EnvironmentRef`](/docs/kcl/types/EnvironmentRef)| | No |
| `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| | No |

View File

@ -33,11 +33,8 @@ describe('processMemory', () => {
const output = processMemory(execState.variables)
expect(output.myVar).toEqual(5)
expect(output.otherVar).toEqual(3)
expect(output).toEqual({
myVar: 5,
myFn: '__function(a)__',
otherVar: 3,
theExtrude: [
expect(output.myFn).toEqual('__function(a)__')
expect(output.theExtrude).toEqual([
{
type: 'extrudePlane',
tag: null,
@ -52,8 +49,8 @@ describe('processMemory', () => {
faceId: expect.any(String),
sourceRange: [expect.any(Number), expect.any(Number), 0],
},
],
theSketch: [
])
expect(output.theSketch).toEqual([
{
type: 'ToPoint',
to: [-3.35, 0.17],
@ -75,7 +72,6 @@ describe('processMemory', () => {
units: { type: 'Mm' },
tag: null,
},
],
})
])
})
})

View File

@ -57,6 +57,7 @@ export function UnitsMenu() {
const newCode = changeKclSettings(codeManager.code, {
defaultLengthUnits: unitLengthToUnitLen(unit),
defaultAngleUnits: { type: 'Degrees' },
stdPath: null,
})
if (err(newCode)) {
toast.error(

View File

@ -1,4 +1,4 @@
use std::collections::BTreeMap;
use std::collections::{BTreeMap, HashMap};
use anyhow::Result;
use base64::Engine;
@ -13,6 +13,8 @@ use crate::{
std::StdLib,
};
use super::kcl_doc::{ConstData, DocData, FnData};
const TYPES_DIR: &str = "../../../docs/kcl/types";
fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
@ -289,17 +291,19 @@ fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
hbs.register_template_string("schema", include_str!("templates/schema.hbs"))?;
hbs.register_template_string("index", include_str!("templates/index.hbs"))?;
hbs.register_template_string("function", include_str!("templates/function.hbs"))?;
hbs.register_template_string("const", include_str!("templates/const.hbs"))?;
hbs.register_template_string("type", include_str!("templates/type.hbs"))?;
Ok(hbs)
}
fn generate_index(combined: &IndexMap<String, Box<dyn StdLibFn>>) -> Result<()> {
fn generate_index(combined: &IndexMap<String, Box<dyn StdLibFn>>, kcl_lib: &[DocData]) -> Result<()> {
let hbs = init_handlebars()?;
let mut functions = Vec::new();
let mut functions = HashMap::new();
functions.insert("std".to_owned(), Vec::new());
for key in combined.keys().sorted() {
for key in combined.keys() {
let internal_fn = combined
.get(key)
.ok_or_else(|| anyhow::anyhow!("Failed to get internal function: {}", key))?;
@ -308,13 +312,41 @@ fn generate_index(combined: &IndexMap<String, Box<dyn StdLibFn>>) -> Result<()>
continue;
}
functions.push(json!({
"name": internal_fn.name(),
}));
functions
.get_mut("std")
.unwrap()
.push((internal_fn.name(), internal_fn.name()));
}
for d in kcl_lib {
if d.hide() {
continue;
}
functions.entry(d.mod_name()).or_default().push(match d {
DocData::Fn(f) => (f.name.clone(), d.file_name()),
DocData::Const(c) => (c.name.clone(), d.file_name()),
});
}
let mut sorted: Vec<_> = functions
.into_iter()
.map(|(m, mut fns)| {
fns.sort();
let val = json!({
"name": m,
"functions": fns.into_iter().map(|(n, f)| json!({
"name": n,
"file_name": f,
})).collect::<Vec<_>>(),
});
(m, val)
})
.collect();
sorted.sort_by(|t1, t2| t1.0.cmp(&t2.0));
let data: Vec<_> = sorted.into_iter().map(|(_, val)| val).collect();
let data = json!({
"functions": functions,
"modules": data,
});
let output = hbs.render("index", &data)?;
@ -324,6 +356,112 @@ fn generate_index(combined: &IndexMap<String, Box<dyn StdLibFn>>) -> Result<()>
Ok(())
}
fn generate_function_from_kcl(function: &FnData, file_name: String) -> Result<()> {
if function.properties.doc_hidden {
return Ok(());
}
let hbs = init_handlebars()?;
let name = function.name.clone();
let examples: Vec<serde_json::Value> = function
.examples
.iter()
.enumerate()
.map(|(index, example)| {
let image_path = format!(
"{}/tests/outputs/serial_test_example_{}{}.png",
env!("CARGO_MANIFEST_DIR"),
file_name,
index
);
let image_data =
std::fs::read(&image_path).unwrap_or_else(|_| panic!("Failed to read image file: {}", image_path));
let image_base64 = base64::engine::general_purpose::STANDARD.encode(&image_data);
json!({
"content": example,
"image_base64": image_base64,
})
})
.collect();
let data = json!({
"name": function.qual_name,
"summary": function.summary,
"description": function.description,
"deprecated": function.properties.deprecated,
"fn_signature": name.clone() + &function.fn_signature(),
"tags": [],
"examples": examples,
"is_utilities": false,
"args": function.args.iter().map(|arg| {
json!({
"name": arg.name,
"type_": arg.ty,
"description": arg.docs.as_deref().unwrap_or(""),
"required": arg.kind.required(),
})
}).collect::<Vec<_>>(),
"return_value": function.return_type.as_ref().map(|t| {
json!({
"type_": t,
"description": "",
})
}),
});
let output = hbs.render("function", &data)?;
expectorate::assert_contents(format!("../../../docs/kcl/{}.md", file_name), &output);
Ok(())
}
fn generate_const_from_kcl(cnst: &ConstData, file_name: String) -> Result<()> {
if cnst.properties.doc_hidden {
return Ok(());
}
let hbs = init_handlebars()?;
let examples: Vec<serde_json::Value> = cnst
.examples
.iter()
.enumerate()
.map(|(index, example)| {
let image_path = format!(
"{}/tests/outputs/serial_test_example_{}{}.png",
env!("CARGO_MANIFEST_DIR"),
file_name,
index
);
let image_data =
std::fs::read(&image_path).unwrap_or_else(|_| panic!("Failed to read image file: {}", image_path));
let image_base64 = base64::engine::general_purpose::STANDARD.encode(&image_data);
json!({
"content": example,
"image_base64": image_base64,
})
})
.collect();
let data = json!({
"name": cnst.qual_name,
"summary": cnst.summary,
"description": cnst.description,
"deprecated": cnst.properties.deprecated,
"type_": cnst.ty,
"examples": examples,
"value": cnst.value.as_deref().unwrap_or(""),
});
let output = hbs.render("const", &data)?;
expectorate::assert_contents(format!("../../../docs/kcl/const_{}.md", file_name), &output);
Ok(())
}
fn generate_function(internal_fn: Box<dyn StdLibFn>) -> Result<BTreeMap<String, schemars::schema::Schema>> {
let hbs = init_handlebars()?;
@ -802,9 +940,10 @@ fn recurse_and_create_references(
fn test_generate_stdlib_markdown_docs() {
let stdlib = StdLib::new();
let combined = stdlib.combined();
let kcl_std = crate::docs::kcl_doc::walk_prelude();
// Generate the index which is the table of contents.
generate_index(&combined).unwrap();
generate_index(&combined, &kcl_std).unwrap();
let mut types = BTreeMap::new();
for key in combined.keys().sorted() {
@ -817,6 +956,13 @@ fn test_generate_stdlib_markdown_docs() {
for (name, schema) in &types {
generate_type(name, schema, &types).unwrap();
}
for d in &kcl_std {
match d {
DocData::Fn(f) => generate_function_from_kcl(f, d.file_name()).unwrap(),
DocData::Const(c) => generate_const_from_kcl(c, d.file_name()).unwrap(),
}
}
}
#[test]

View File

@ -0,0 +1,704 @@
use tower_lsp::lsp_types::{
CompletionItem, CompletionItemKind, CompletionItemLabelDetails, Documentation, InsertTextFormat, MarkupContent,
MarkupKind, ParameterInformation, ParameterLabel, SignatureHelp, SignatureInformation,
};
use crate::{
parsing::{
ast::types::{Annotation, Node, NonCodeNode, NonCodeValue, VariableKind},
token::NumericSuffix,
},
ModuleId,
};
pub fn walk_prelude() -> Vec<DocData> {
let mut visitor = CollectionVisitor::default();
visitor.visit_module("prelude").unwrap();
visitor.result
}
#[derive(Debug, Clone, Default)]
struct CollectionVisitor {
name: String,
result: Vec<DocData>,
id: usize,
}
impl CollectionVisitor {
fn visit_module(&mut self, name: &str) -> Result<(), String> {
let old_name = std::mem::replace(&mut self.name, name.to_owned());
let source = crate::modules::read_std(name).unwrap();
let parsed = crate::parsing::parse_str(source, ModuleId::from_usize(self.id))
.parse_errs_as_err()
.unwrap();
self.id += 1;
for (i, n) in parsed.body.iter().enumerate() {
match n {
crate::parsing::ast::types::BodyItem::ImportStatement(import) if !import.visibility.is_default() => {
// Only supports glob imports for now.
assert!(matches!(
import.selector,
crate::parsing::ast::types::ImportSelector::Glob(..)
));
match &import.path {
crate::parsing::ast::types::ImportPath::Std { path } => {
self.visit_module(&path[1])?;
}
p => return Err(format!("Unexpected import: `{p}`")),
}
}
crate::parsing::ast::types::BodyItem::VariableDeclaration(var) if !var.visibility.is_default() => {
let mut dd = match var.kind {
// TODO metadata for args
VariableKind::Fn => DocData::Fn(FnData::from_ast(var, format!("std::{}::", self.name))),
VariableKind::Const => {
DocData::Const(ConstData::from_ast(var, format!("std::{}::", self.name)))
}
};
// FIXME this association of metadata with items is pretty flaky.
if i == 0 {
dd.with_meta(&parsed.non_code_meta.start_nodes, &var.outer_attrs);
} else if let Some(meta) = parsed.non_code_meta.non_code_nodes.get(&(i - 1)) {
dd.with_meta(meta, &var.outer_attrs);
}
self.result.push(dd);
}
_ => {}
}
}
self.name = old_name;
Ok(())
}
}
#[derive(Debug, Clone)]
pub enum DocData {
Fn(FnData),
Const(ConstData),
}
impl DocData {
pub fn name(&self) -> &str {
match self {
DocData::Fn(f) => &f.name,
DocData::Const(c) => &c.name,
}
}
#[allow(dead_code)]
pub fn file_name(&self) -> String {
match self {
DocData::Fn(f) => f.qual_name.replace("::", "-"),
DocData::Const(c) => format!("const_{}", c.qual_name.replace("::", "-")),
}
}
#[allow(dead_code)]
pub fn mod_name(&self) -> String {
let q = match self {
DocData::Fn(f) => &f.qual_name,
DocData::Const(c) => &c.qual_name,
};
q[0..q.rfind("::").unwrap()].to_owned()
}
#[allow(dead_code)]
pub fn hide(&self) -> bool {
match self {
DocData::Fn(f) => f.properties.doc_hidden || f.properties.deprecated,
DocData::Const(c) => c.properties.doc_hidden || c.properties.deprecated,
}
}
pub fn to_completion_item(&self) -> CompletionItem {
match self {
DocData::Fn(f) => f.to_completion_item(),
DocData::Const(c) => c.to_completion_item(),
}
}
pub fn to_signature_help(&self) -> Option<SignatureHelp> {
match self {
DocData::Fn(f) => Some(f.to_signature_help()),
DocData::Const(_) => None,
}
}
fn with_meta(&mut self, meta: &[Node<NonCodeNode>], attrs: &[Node<Annotation>]) {
match self {
DocData::Fn(f) => f.with_meta(meta, attrs),
DocData::Const(c) => c.with_meta(meta, attrs),
}
}
#[cfg(test)]
fn examples(&self) -> &[String] {
match self {
DocData::Fn(f) => &f.examples,
DocData::Const(c) => &c.examples,
}
}
}
#[derive(Debug, Clone)]
pub struct ConstData {
pub name: String,
/// The fully qualified name.
pub qual_name: String,
pub value: Option<String>,
pub ty: Option<String>,
pub properties: Properties,
/// The summary of the function.
pub summary: Option<String>,
/// The description of the function.
pub description: Option<String>,
/// Code examples.
/// These are tested and we know they compile and execute.
pub examples: Vec<String>,
}
impl ConstData {
fn from_ast(var: &crate::parsing::ast::types::VariableDeclaration, mut qual_name: String) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Const);
let (value, ty) = match &var.declaration.init {
crate::parsing::ast::types::Expr::Literal(lit) => (
Some(lit.raw.clone()),
Some(match &lit.value {
crate::parsing::ast::types::LiteralValue::Number { suffix, .. } => {
if *suffix == NumericSuffix::None || *suffix == NumericSuffix::Count {
"number".to_owned()
} else {
format!("number({suffix})")
}
}
crate::parsing::ast::types::LiteralValue::String { .. } => "string".to_owned(),
crate::parsing::ast::types::LiteralValue::Bool { .. } => "boolean".to_owned(),
}),
),
_ => (None, None),
};
let name = var.declaration.id.name.clone();
qual_name.push_str(&name);
ConstData {
name,
qual_name,
value,
// TODO use type decl when we have them.
ty,
properties: Properties {
exported: !var.visibility.is_default(),
deprecated: false,
doc_hidden: false,
impl_kind: ImplKind::Kcl,
},
summary: None,
description: None,
examples: Vec::new(),
}
}
fn short_docs(&self) -> Option<String> {
match (&self.summary, &self.description) {
(None, None) => None,
(None, Some(d)) | (Some(d), None) => Some(d.clone()),
(Some(s), Some(d)) => Some(format!("{s}\n\n{d}")),
}
}
fn to_completion_item(&self) -> CompletionItem {
let mut detail = self.qual_name.clone();
if let Some(ty) = &self.ty {
detail.push_str(": ");
detail.push_str(ty);
}
CompletionItem {
label: self.name.clone(),
label_details: Some(CompletionItemLabelDetails {
detail: self.value.clone(),
description: None,
}),
kind: Some(CompletionItemKind::CONSTANT),
detail: Some(detail),
documentation: self.short_docs().map(|s| {
Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: s,
})
}),
deprecated: Some(self.properties.deprecated),
preselect: None,
sort_text: None,
filter_text: None,
insert_text: None,
insert_text_format: None,
insert_text_mode: None,
text_edit: None,
additional_text_edits: None,
command: None,
commit_characters: None,
data: None,
tags: None,
}
}
}
#[derive(Debug, Clone)]
pub struct FnData {
/// The name of the function.
pub name: String,
/// The fully qualified name.
pub qual_name: String,
/// The args of the function.
pub args: Vec<ArgData>,
/// The return value of the function.
pub return_type: Option<String>,
pub properties: Properties,
/// The summary of the function.
pub summary: Option<String>,
/// The description of the function.
pub description: Option<String>,
/// Code examples.
/// These are tested and we know they compile and execute.
pub examples: Vec<String>,
}
impl FnData {
fn from_ast(var: &crate::parsing::ast::types::VariableDeclaration, mut qual_name: String) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Fn);
let crate::parsing::ast::types::Expr::FunctionExpression(expr) = &var.declaration.init else {
unreachable!();
};
let name = var.declaration.id.name.clone();
qual_name.push_str(&name);
FnData {
name,
qual_name,
args: expr.params.iter().map(ArgData::from_ast).collect(),
return_type: expr.return_type.as_ref().map(|t| t.recast(&Default::default(), 0)),
properties: Properties {
exported: !var.visibility.is_default(),
deprecated: false,
doc_hidden: false,
impl_kind: ImplKind::Kcl,
},
summary: None,
description: None,
examples: Vec::new(),
}
}
fn short_docs(&self) -> Option<String> {
match (&self.summary, &self.description) {
(None, None) => None,
(None, Some(d)) | (Some(d), None) => Some(d.clone()),
(Some(s), Some(d)) => Some(format!("{s}\n\n{d}")),
}
}
pub fn fn_signature(&self) -> String {
let mut signature = String::new();
signature.push('(');
for (i, arg) in self.args.iter().enumerate() {
if i > 0 {
signature.push_str(", ");
}
match &arg.kind {
ArgKind::Special => signature.push_str(&format!("@{}", arg.name)),
ArgKind::Labelled(false) => signature.push_str(&arg.name),
ArgKind::Labelled(true) => signature.push_str(&format!("{}?", arg.name)),
}
if let Some(ty) = &arg.ty {
signature.push_str(&format!(": {ty}"));
}
}
signature.push(')');
if let Some(ty) = &self.return_type {
signature.push_str(&format!(": {ty}"));
}
signature
}
fn to_completion_item(&self) -> CompletionItem {
CompletionItem {
label: self.name.clone(),
label_details: Some(CompletionItemLabelDetails {
detail: Some(self.fn_signature()),
description: None,
}),
kind: Some(CompletionItemKind::FUNCTION),
detail: Some(self.qual_name.clone()),
documentation: self.short_docs().map(|s| {
Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: s,
})
}),
deprecated: Some(self.properties.deprecated),
preselect: None,
sort_text: None,
filter_text: None,
insert_text: Some(self.to_autocomplete_snippet()),
insert_text_format: Some(InsertTextFormat::SNIPPET),
insert_text_mode: None,
text_edit: None,
additional_text_edits: None,
command: None,
commit_characters: None,
data: None,
tags: None,
}
}
fn to_autocomplete_snippet(&self) -> String {
if self.name == "loft" {
return "loft([${0:sketch000}, ${1:sketch001}])${}".to_owned();
} else if self.name == "hole" {
return "hole(${0:holeSketch}, ${1:%})${}".to_owned();
}
let mut args = Vec::new();
let mut index = 0;
for arg in self.args.iter() {
if let Some((i, arg_str)) = arg.get_autocomplete_snippet(index) {
index = i + 1;
args.push(arg_str);
}
}
// We end with ${} so you can jump to the end of the snippet.
// After the last argument.
format!("{}({})${{}}", self.name, args.join(", "))
}
fn to_signature_help(&self) -> SignatureHelp {
// TODO Fill this in based on the current position of the cursor.
let active_parameter = None;
SignatureHelp {
signatures: vec![SignatureInformation {
label: self.name.clone(),
documentation: self.short_docs().map(|s| {
Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: s,
})
}),
parameters: Some(self.args.iter().map(|arg| arg.to_param_info()).collect()),
active_parameter,
}],
active_signature: Some(0),
active_parameter,
}
}
}
#[derive(Debug, Clone)]
pub struct Properties {
pub deprecated: bool,
pub doc_hidden: bool,
#[allow(dead_code)]
pub exported: bool,
pub impl_kind: ImplKind,
}
#[derive(Debug, Clone)]
pub enum ImplKind {
Kcl,
Rust,
}
#[derive(Debug, Clone)]
pub struct ArgData {
/// The name of the argument.
pub name: String,
/// The type of the argument.
pub ty: Option<String>,
/// If the argument is required.
pub kind: ArgKind,
/// Additional information that could be used instead of the type's description.
/// This is helpful if the type is really basic, like "u32" -- that won't tell the user much about
/// how this argument is meant to be used.
pub docs: Option<String>,
}
#[derive(Debug, Clone, Copy)]
pub enum ArgKind {
Special,
// Parameter is whether the arg is optional.
// TODO should store default value if present
Labelled(bool),
}
impl ArgData {
fn from_ast(arg: &crate::parsing::ast::types::Parameter) -> Self {
ArgData {
name: arg.identifier.name.clone(),
ty: arg.type_.as_ref().map(|t| t.recast(&Default::default(), 0)),
// Doc comments are not yet supported on parameters.
docs: None,
kind: if arg.labeled {
ArgKind::Labelled(arg.optional())
} else {
ArgKind::Special
},
}
}
fn _with_meta(&mut self, _meta: &[Node<NonCodeNode>]) {
// TODO use comments for docs (we can't currently get the comments for an argument)
}
pub fn get_autocomplete_snippet(&self, index: usize) -> Option<(usize, String)> {
match &self.ty {
Some(s)
if [
"Sketch",
"SketchSet",
"Solid",
"SolidSet",
"SketchSurface",
"SketchOrSurface",
]
.contains(&&**s) =>
{
Some((index, format!("${{{}:{}}}", index, "%")))
}
_ => None,
}
}
fn to_param_info(&self) -> ParameterInformation {
ParameterInformation {
label: ParameterLabel::Simple(self.name.clone()),
documentation: self.docs.as_ref().map(|docs| {
Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: docs.clone(),
})
}),
}
}
}
impl ArgKind {
#[allow(dead_code)]
pub fn required(self) -> bool {
match self {
ArgKind::Special => true,
ArgKind::Labelled(opt) => !opt,
}
}
}
trait ApplyMeta {
fn apply_docs(&mut self, summary: Option<String>, description: Option<String>, examples: Vec<String>);
fn deprecated(&mut self, deprecated: bool);
fn doc_hidden(&mut self, doc_hidden: bool);
fn impl_kind(&mut self, impl_kind: ImplKind);
fn with_meta(&mut self, meta: &[Node<NonCodeNode>], attrs: &[Node<Annotation>]) {
for attr in attrs {
if let Annotation {
name: None,
properties: Some(props),
..
} = &attr.inner
{
for p in props {
match &*p.key.name {
"impl" => {
if let Some(s) = p.value.ident_name() {
self.impl_kind(match s {
"kcl" => ImplKind::Kcl,
"std_rust" => ImplKind::Rust,
_ => unreachable!(),
});
}
}
"deprecated" => {
if let Some(b) = p.value.literal_bool() {
self.deprecated(b);
}
}
"doc_hidden" => {
if let Some(b) = p.value.literal_bool() {
self.doc_hidden(b);
}
}
_ => {}
}
}
}
}
let mut comments = Vec::new();
for m in meta {
match &m.value {
NonCodeValue::BlockComment { value, .. } | NonCodeValue::NewLineBlockComment { value, .. } => {
comments.push(value)
}
_ => {}
}
}
let mut summary = None;
let mut description = None;
let mut example: Option<String> = None;
let mut examples = Vec::new();
for l in comments.into_iter().filter(|l| l.starts_with('/')).map(|l| {
if let Some(ll) = l.strip_prefix("/ ") {
ll
} else {
&l[1..]
}
}) {
if description.is_none() && summary.is_none() {
summary = Some(l.to_owned());
continue;
}
if description.is_none() {
if l.is_empty() {
description = Some(String::new());
} else {
description = summary;
summary = None;
let d = description.as_mut().unwrap();
d.push_str(l);
d.push('\n');
}
continue;
}
if l.starts_with("```") {
if let Some(e) = example {
examples.push(e.trim().to_owned());
example = None;
} else {
example = Some(String::new());
}
continue;
}
if let Some(e) = &mut example {
e.push_str(l);
e.push('\n');
continue;
}
match &mut description {
Some(d) => {
d.push_str(l);
d.push('\n');
}
None => unreachable!(),
}
}
assert!(example.is_none());
if let Some(d) = &mut description {
if d.is_empty() {
description = None;
}
}
self.apply_docs(
summary.map(|s| s.trim().to_owned()),
description.map(|s| s.trim().to_owned()),
examples,
);
}
}
impl ApplyMeta for ConstData {
fn apply_docs(&mut self, summary: Option<String>, description: Option<String>, examples: Vec<String>) {
self.summary = summary;
self.description = description;
self.examples = examples;
}
fn deprecated(&mut self, deprecated: bool) {
self.properties.deprecated = deprecated;
}
fn doc_hidden(&mut self, doc_hidden: bool) {
self.properties.doc_hidden = doc_hidden;
}
fn impl_kind(&mut self, _impl_kind: ImplKind) {}
}
impl ApplyMeta for FnData {
fn apply_docs(&mut self, summary: Option<String>, description: Option<String>, examples: Vec<String>) {
self.summary = summary;
self.description = description;
self.examples = examples;
}
fn deprecated(&mut self, deprecated: bool) {
self.properties.deprecated = deprecated;
}
fn doc_hidden(&mut self, doc_hidden: bool) {
self.properties.doc_hidden = doc_hidden;
}
fn impl_kind(&mut self, impl_kind: ImplKind) {
self.properties.impl_kind = impl_kind;
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn smoke() {
let result = walk_prelude();
for d in result {
if let DocData::Const(d) = d {
if d.name == "PI" {
assert!(d.value.unwrap().starts_with('3'));
assert_eq!(d.ty, Some("number".to_owned()));
assert_eq!(d.qual_name, "std::math::PI");
assert!(d.summary.is_some());
assert!(!d.examples.is_empty());
return;
}
}
}
panic!("didn't find PI");
}
#[tokio::test(flavor = "multi_thread", worker_threads = 5)]
async fn test_examples() -> miette::Result<()> {
let std = walk_prelude();
for d in std {
for (i, eg) in d.examples().iter().enumerate() {
let result =
match crate::test_server::execute_and_snapshot(eg, crate::settings::types::UnitLength::Mm, None)
.await
{
Err(crate::errors::ExecError::Kcl(e)) => {
return Err(miette::Report::new(crate::errors::Report {
error: e.error,
filename: format!("{}{i}", d.name()),
kcl_source: eg.to_string(),
}));
}
Err(other_err) => panic!("{}", other_err),
Ok(img) => img,
};
twenty_twenty::assert_image(
format!("tests/outputs/serial_test_example_{}{i}.png", d.file_name()),
&result,
0.99,
);
}
}
Ok(())
}
}

View File

@ -2,6 +2,7 @@
#[cfg(test)]
mod gen_std_tests;
pub mod kcl_doc;
use std::path::Path;
@ -896,60 +897,6 @@ fn get_autocomplete_string_from_schema(schema: &schemars::schema::Schema) -> Res
}
}
pub fn completion_item_from_enum_schema(
schema: &schemars::schema::Schema,
kind: CompletionItemKind,
) -> Result<CompletionItem> {
// Get the docs for the schema.
let schemars::schema::Schema::Object(o) = schema else {
anyhow::bail!("expected object schema: {:#?}", schema);
};
let description = get_description_string_from_schema(&schemars::schema::RootSchema {
schema: o.clone(),
..Default::default()
})
.unwrap_or_default();
let Some(enum_values) = o.enum_values.as_ref() else {
anyhow::bail!("expected enum values: {:#?}", o);
};
if enum_values.len() > 1 {
anyhow::bail!("expected only one enum value: {:#?}", o);
}
if enum_values.is_empty() {
anyhow::bail!("expected at least one enum value: {:#?}", o);
}
let serde_json::Value::String(ref enum_value) = enum_values[0] else {
anyhow::bail!("expected string enum value: {:#?}", enum_values[0]);
};
Ok(CompletionItem {
label: enum_value.to_string(),
label_details: None,
kind: Some(kind),
detail: Some(description.to_string()),
documentation: Some(Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: description.to_string(),
})),
deprecated: Some(false),
preselect: None,
sort_text: None,
filter_text: None,
insert_text: None,
insert_text_format: None,
insert_text_mode: None,
text_edit: None,
additional_text_edits: None,
command: None,
commit_characters: None,
data: None,
tags: None,
})
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
@ -1138,13 +1085,15 @@ mod tests {
#[test]
fn get_all_stdlib_autocomplete_snippets() {
let stdlib = crate::std::StdLib::new();
crate::lsp::kcl::get_completions_from_stdlib(&stdlib).unwrap();
let kcl_std = crate::docs::kcl_doc::walk_prelude();
crate::lsp::kcl::get_completions_from_stdlib(&stdlib, &kcl_std).unwrap();
}
// We want to test the signatures we compile at lsp start.
#[test]
fn get_all_stdlib_signatures() {
let stdlib = crate::std::StdLib::new();
crate::lsp::kcl::get_signatures_from_stdlib(&stdlib);
let kcl_std = crate::docs::kcl_doc::walk_prelude();
crate::lsp::kcl::get_signatures_from_stdlib(&stdlib, &kcl_std);
}
}

View File

@ -0,0 +1,33 @@
---
title: "{{name}}"
excerpt: "{{safe_yaml summary}}"
layout: manual
---
{{#if deprecated}}
**WARNING:** This function is deprecated.
{{/if}}
{{{summary}}}
{{{description}}}
```js
{{{name}}}{{#if type_}}: {{{type_}}}{{/if}}{{#if value}} = {{{value}}}{{/if}}
```
{{#if examples}}
### Examples
{{#each examples}}
```js
{{{this.content}}}
```
{{#unless @root.is_utilities}}
![Rendered example of {{@root.name}} {{@index}}](data:image/png;base64,{{{this.image_base64}}})
{{/unless}}
{{/each}}
{{/if}}

View File

@ -38,7 +38,7 @@ layout: manual
{{#if return_value}}
### Returns
`{{return_value.type_}}` {{#if return_value.description}}- {{{firstLine return_value.description}}}{{/if}}
`{{return_value.type_}}`{{#if return_value.description}} - {{{firstLine return_value.description}}}{{/if}}
{{/if}}

View File

@ -9,6 +9,9 @@ layout: manual
* [Types](kcl/types)
* [Modules](kcl/modules)
* [Known Issues](kcl/KNOWN-ISSUES)
{{#each modules}}
* **`{{name}}`**
{{#each functions}}
* [`{{name}}`](kcl/{{name}})
* [`{{name}}`](kcl/{{file_name}})
{{/each}}
{{/each}}

View File

@ -12,8 +12,7 @@ use crate::{
kcl_value::NumericType,
memory,
state::ModuleState,
BodyType, EnvironmentRef, ExecState, ExecutorContext, KclValue, MemoryFunction, Metadata, TagEngineInfo,
TagIdentifier,
BodyType, EnvironmentRef, ExecState, ExecutorContext, KclValue, Metadata, TagEngineInfo, TagIdentifier,
},
modules::{ModuleId, ModulePath, ModuleRepr},
parsing::ast::types::{
@ -34,7 +33,17 @@ enum StatementKind<'a> {
Expression,
}
impl<'a> StatementKind<'a> {
fn expect_name(&self) -> &'a str {
match self {
StatementKind::Declaration { name } => name,
StatementKind::Expression => unreachable!(),
}
}
}
impl ExecutorContext {
/// Returns true if importing the prelude should be skipped.
async fn handle_annotations(
&self,
annotations: impl Iterator<Item = &Node<Annotation>>,
@ -83,14 +92,41 @@ impl ExecutorContext {
exec_state: &mut ExecState,
body_type: BodyType,
) -> Result<Option<KclValue>, KclError> {
if body_type == BodyType::Root {
let _no_prelude = self
if let BodyType::Root(init_mem) = body_type {
let no_prelude = self
.handle_annotations(
program.inner_attrs.iter(),
annotations::AnnotationScope::Module,
exec_state,
)
.await?;
if !no_prelude && init_mem {
// Import std::prelude
let prelude_range = SourceRange::from(program).start_as_range();
let id = self
.open_module(
&ImportPath::Std {
path: vec!["std".to_owned(), "prelude".to_owned()],
},
&[],
exec_state,
prelude_range,
)
.await?;
let (module_memory, module_exports) = self
.exec_module_for_items(id, exec_state, ExecutionKind::Isolated, prelude_range)
.await
.unwrap();
for name in module_exports {
let item = exec_state
.memory()
.get_from(&name, module_memory, prelude_range)
.cloned()
.unwrap();
exec_state.mut_memory().add(name, item, prelude_range)?;
}
}
}
let mut last_expr = None;
@ -98,7 +134,7 @@ impl ExecutorContext {
for statement in &program.body {
match statement {
BodyItem::ImportStatement(import_stmt) => {
if body_type != BodyType::Root {
if !matches!(body_type, BodyType::Root(_)) {
return Err(KclError::Semantic(KclErrorDetails {
message: "Imports are only supported at the top-level of a file.".to_owned(),
source_ranges: vec![import_stmt.into()],
@ -194,6 +230,7 @@ impl ExecutorContext {
&expression_statement.expression,
exec_state,
&metadata,
&[],
StatementKind::Expression,
)
.await?,
@ -204,13 +241,14 @@ impl ExecutorContext {
let source_range = SourceRange::from(&variable_declaration.declaration.init);
let metadata = Metadata { source_range };
let _annotations = &variable_declaration.outer_attrs;
let annotations = &variable_declaration.outer_attrs;
let memory_item = self
.execute_expr(
&variable_declaration.declaration.init,
exec_state,
&metadata,
annotations,
StatementKind::Declaration { name: &var_name },
)
.await?;
@ -227,7 +265,7 @@ impl ExecutorContext {
BodyItem::ReturnStatement(return_statement) => {
let metadata = Metadata::from(return_statement);
if body_type == BodyType::Root {
if matches!(body_type, BodyType::Root(_)) {
return Err(KclError::Semantic(KclErrorDetails {
message: "Cannot return from outside a function.".to_owned(),
source_ranges: vec![metadata.source_range],
@ -239,6 +277,7 @@ impl ExecutorContext {
&return_statement.argument,
exec_state,
&metadata,
&[],
StatementKind::Expression,
)
.await?;
@ -256,7 +295,7 @@ impl ExecutorContext {
}
}
if BodyType::Root == body_type {
if matches!(body_type, BodyType::Root(_)) {
// Flush the batch queue.
self.engine
.flush_batch(
@ -389,14 +428,14 @@ impl ExecutorContext {
source_range: SourceRange,
) -> Result<(Option<KclValue>, EnvironmentRef, Vec<String>), KclError> {
let old_units = exec_state.length_unit();
let mut local_state = ModuleState::new(&self.settings);
let mut local_state = ModuleState::new(&self.settings, path.std_path());
exec_state.global.mod_loader.enter_module(path);
std::mem::swap(&mut exec_state.mod_local, &mut local_state);
exec_state.mut_memory().push_new_root_env();
let original_execution = self.engine.replace_execution_kind(exec_kind).await;
let result = self
.exec_program(program, exec_state, crate::execution::BodyType::Root)
.exec_program(program, exec_state, crate::execution::BodyType::Root(true))
.await;
let new_units = exec_state.length_unit();
@ -433,6 +472,7 @@ impl ExecutorContext {
init: &Expr,
exec_state: &mut ExecState,
metadata: &Metadata,
annotations: &[Node<Annotation>],
statement_kind: StatementKind<'a>,
) -> Result<KclValue, KclError> {
let item = match init {
@ -463,12 +503,50 @@ impl ExecutorContext {
}
}
Expr::BinaryExpression(binary_expression) => binary_expression.get_result(exec_state, self).await?,
Expr::FunctionExpression(function_expression) => KclValue::Function {
Expr::FunctionExpression(function_expression) => {
let mut rust_impl = false;
for attr in annotations {
if attr.name.is_some() || attr.properties.is_none() {
continue;
}
for p in attr.properties.as_ref().unwrap() {
if &*p.key.name == "impl" {
if let Some(s) = p.value.ident_name() {
if s == "std_rust" {
rust_impl = true;
}
}
}
}
}
if rust_impl {
if let Some(std_path) = &exec_state.mod_local.settings.std_path {
KclValue::Function {
expression: function_expression.clone(),
meta: vec![metadata.to_owned()],
func: Some(crate::std::std_fn(std_path, statement_kind.expect_name())),
memory: None,
}
} else {
return Err(KclError::Semantic(KclErrorDetails {
message: "Rust implementation of functions is restricted to the standard library"
.to_owned(),
source_ranges: vec![metadata.source_range],
}));
}
} else {
// Cloning memory here is crucial for semantics so that we close
// over variables. Variables defined lexically later shouldn't
// be available to the function body.
KclValue::Function {
expression: function_expression.clone(),
meta: vec![metadata.to_owned()],
func: None,
memory: exec_state.mut_memory().snapshot(),
},
memory: Some(exec_state.mut_memory().snapshot()),
}
}
}
Expr::CallExpression(call_expression) => call_expression.execute(exec_state, self).await?,
Expr::CallExpressionKw(call_expression) => call_expression.execute(exec_state, self).await?,
Expr::PipeExpression(pipe_expression) => pipe_expression.get_result(exec_state, self).await?,
@ -501,7 +579,7 @@ impl ExecutorContext {
Expr::IfExpression(expr) => expr.get_result(exec_state, self).await?,
Expr::LabelledExpression(expr) => {
let result = self
.execute_expr(&expr.expr, exec_state, metadata, statement_kind)
.execute_expr(&expr.expr, exec_state, metadata, &[], statement_kind)
.await?;
exec_state
.mut_memory()
@ -836,7 +914,7 @@ pub(crate) async fn execute_pipe_body(
source_range: SourceRange::from(first),
};
let output = ctx
.execute_expr(first, exec_state, &meta, StatementKind::Expression)
.execute_expr(first, exec_state, &meta, &[], StatementKind::Expression)
.await?;
// Now that we've evaluated the first child expression in the pipeline, following child expressions
@ -870,7 +948,7 @@ async fn inner_execute_pipe_body(
source_range: SourceRange::from(expression),
};
let output = ctx
.execute_expr(expression, exec_state, &metadata, StatementKind::Expression)
.execute_expr(expression, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
exec_state.mod_local.pipe_value = Some(output);
}
@ -891,7 +969,7 @@ impl Node<CallExpressionKw> {
let source_range = SourceRange::from(arg_expr.arg.clone());
let metadata = Metadata { source_range };
let value = ctx
.execute_expr(&arg_expr.arg, exec_state, &metadata, StatementKind::Expression)
.execute_expr(&arg_expr.arg, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
fn_args.insert(arg_expr.label.name.clone(), Arg::new(value, source_range));
}
@ -902,7 +980,7 @@ impl Node<CallExpressionKw> {
let source_range = SourceRange::from(arg_expr.clone());
let metadata = Metadata { source_range };
let value = ctx
.execute_expr(arg_expr, exec_state, &metadata, StatementKind::Expression)
.execute_expr(arg_expr, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
Some(Arg::new(value, source_range))
} else {
@ -1029,7 +1107,7 @@ impl Node<CallExpression> {
source_range: SourceRange::from(arg_expr),
};
let value = ctx
.execute_expr(arg_expr, exec_state, &metadata, StatementKind::Expression)
.execute_expr(arg_expr, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
let arg = Arg::new(value, SourceRange::from(arg_expr));
fn_args.push(arg);
@ -1104,7 +1182,10 @@ impl Node<CallExpression> {
source_range: callsite,
});
let return_value = func.call_fn(fn_args, exec_state, ctx.clone()).await.map_err(|e| {
let return_value = func
.call_fn(fn_args, exec_state, ctx.clone(), source_range)
.await
.map_err(|e| {
// Add the call expression to the source ranges.
// TODO currently ignored by the frontend
e.add_source_ranges(vec![source_range])
@ -1251,7 +1332,7 @@ impl Node<ArrayExpression> {
// TODO: Carry statement kind here so that we know if we're
// inside a variable declaration.
let value = ctx
.execute_expr(element, exec_state, &metadata, StatementKind::Expression)
.execute_expr(element, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
results.push(value);
@ -1269,7 +1350,13 @@ impl Node<ArrayRangeExpression> {
pub async fn execute(&self, exec_state: &mut ExecState, ctx: &ExecutorContext) -> Result<KclValue, KclError> {
let metadata = Metadata::from(&self.start_element);
let start = ctx
.execute_expr(&self.start_element, exec_state, &metadata, StatementKind::Expression)
.execute_expr(
&self.start_element,
exec_state,
&metadata,
&[],
StatementKind::Expression,
)
.await?;
let start = start.as_int().ok_or(KclError::Semantic(KclErrorDetails {
source_ranges: vec![self.into()],
@ -1277,7 +1364,7 @@ impl Node<ArrayRangeExpression> {
}))?;
let metadata = Metadata::from(&self.end_element);
let end = ctx
.execute_expr(&self.end_element, exec_state, &metadata, StatementKind::Expression)
.execute_expr(&self.end_element, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
let end = end.as_int().ok_or(KclError::Semantic(KclErrorDetails {
source_ranges: vec![self.into()],
@ -1321,7 +1408,7 @@ impl Node<ObjectExpression> {
for property in &self.properties {
let metadata = Metadata::from(&property.value);
let result = ctx
.execute_expr(&property.value, exec_state, &metadata, StatementKind::Expression)
.execute_expr(&property.value, exec_state, &metadata, &[], StatementKind::Expression)
.await?;
object.insert(property.key.name.clone(), result);
@ -1366,7 +1453,13 @@ impl Node<IfExpression> {
pub async fn get_result(&self, exec_state: &mut ExecState, ctx: &ExecutorContext) -> Result<KclValue, KclError> {
// Check the `if` branch.
let cond = ctx
.execute_expr(&self.cond, exec_state, &Metadata::from(self), StatementKind::Expression)
.execute_expr(
&self.cond,
exec_state,
&Metadata::from(self),
&[],
StatementKind::Expression,
)
.await?
.get_bool()?;
if cond {
@ -1384,6 +1477,7 @@ impl Node<IfExpression> {
&else_if.cond,
exec_state,
&Metadata::from(self),
&[],
StatementKind::Expression,
)
.await?
@ -1682,27 +1776,30 @@ pub(crate) async fn call_user_defined_function_kw(
/// A function being used as a parameter into a stdlib function. This is a
/// closure, plus everything needed to execute it.
pub struct FunctionParam<'a> {
pub inner: Option<&'a MemoryFunction>,
pub memory: EnvironmentRef,
pub inner: Option<&'a crate::std::StdFn>,
pub memory: Option<EnvironmentRef>,
pub fn_expr: crate::parsing::ast::types::BoxNode<FunctionExpression>,
pub meta: Vec<Metadata>,
pub ctx: ExecutorContext,
}
impl FunctionParam<'_> {
pub async fn call(&self, exec_state: &mut ExecState, args: Vec<Arg>) -> Result<Option<KclValue>, KclError> {
pub async fn call(
&self,
exec_state: &mut ExecState,
args: Vec<Arg>,
source_range: SourceRange,
) -> Result<Option<KclValue>, KclError> {
if let Some(inner) = self.inner {
inner(
let args = crate::std::Args::new(
args,
self.memory,
self.fn_expr.clone(),
self.meta.clone(),
exec_state,
source_range,
self.ctx.clone(),
)
.await
exec_state.mod_local.pipe_value.clone().map(Arg::synthetic),
);
inner(exec_state, args).await.map(Some)
} else {
call_user_defined_function(args, self.memory, self.fn_expr.as_ref(), exec_state, &self.ctx).await
call_user_defined_function(args, self.memory.unwrap(), self.fn_expr.as_ref(), exec_state, &self.ctx).await
}
}
}

View File

@ -6,10 +6,9 @@ use serde::{Deserialize, Serialize};
use crate::{
errors::KclErrorDetails,
exec::Sketch,
execution::{
ExecState, Face, Helix, ImportedGeometry, MemoryFunction, Metadata, Plane, SketchSet, Solid, SolidSet,
TagIdentifier,
state::MetaSettings, EnvironmentRef, ExecState, ExecutorContext, Face, Helix, ImportedGeometry, Metadata,
Plane, Sketch, SketchSet, Solid, SolidSet, TagIdentifier,
},
parsing::{
ast::types::{
@ -18,11 +17,9 @@ use crate::{
token::NumericSuffix,
},
std::{args::Arg, FnAsArg},
ExecutorContext, KclError, ModuleId, SourceRange,
KclError, ModuleId, SourceRange,
};
use super::{memory::EnvironmentRef, MetaSettings};
pub type KclObjectFields = HashMap<String, KclValue>;
/// Any KCL value.
@ -87,15 +84,12 @@ pub enum KclValue {
ImportedGeometry(ImportedGeometry),
#[ts(skip)]
Function {
/// Adam Chalmers speculation:
/// Reference to a KCL stdlib function (written in Rust).
/// Some if the KCL value is an alias of a stdlib function,
/// None if it's a KCL function written/declared in KCL.
#[serde(skip)]
func: Option<MemoryFunction>,
func: Option<crate::std::StdFn>,
#[schemars(skip)]
expression: crate::parsing::ast::types::BoxNode<FunctionExpression>,
memory: EnvironmentRef,
// Invariant: Always Some except for std lib functions
memory: Option<EnvironmentRef>,
#[serde(rename = "__meta")]
meta: Vec<Metadata>,
},
@ -326,7 +320,11 @@ impl KclValue {
pub(crate) fn map_env_ref(&self, env_map: &HashMap<EnvironmentRef, EnvironmentRef>) -> Self {
let mut result = self.clone();
if let KclValue::Function { ref mut memory, .. } = result {
if let KclValue::Function {
memory: Some(ref mut memory),
..
} = result
{
if let Some(new) = env_map.get(memory) {
*memory = *new;
}
@ -555,12 +553,13 @@ impl KclValue {
args: Vec<Arg>,
exec_state: &mut ExecState,
ctx: ExecutorContext,
source_range: SourceRange,
) -> Result<Option<KclValue>, KclError> {
let KclValue::Function {
func,
expression,
memory: closure_memory,
meta,
..
} = &self
else {
return Err(KclError::Semantic(KclErrorDetails {
@ -569,14 +568,20 @@ impl KclValue {
}));
};
if let Some(func) = func {
exec_state.mut_memory().push_new_env_for_call(*closure_memory);
let result = func(args, *closure_memory, expression.clone(), meta.clone(), exec_state, ctx).await;
exec_state.mut_memory().push_new_env_for_rust_call();
let args = crate::std::Args::new(
args,
source_range,
ctx.clone(),
exec_state.mod_local.pipe_value.clone().map(Arg::synthetic),
);
let result = func(exec_state, args).await.map(Some);
exec_state.mut_memory().pop_env();
result
} else {
crate::execution::exec_ast::call_user_defined_function(
args,
*closure_memory,
closure_memory.unwrap(),
expression.as_ref(),
exec_state,
&ctx,
@ -611,7 +616,7 @@ impl KclValue {
} else {
crate::execution::exec_ast::call_user_defined_function_kw(
args.kw_args,
*closure_memory,
closure_memory.unwrap(),
expression.as_ref(),
exec_state,
&ctx,

View File

@ -144,7 +144,7 @@ use serde::{Deserialize, Serialize};
use crate::{
errors::{KclError, KclErrorDetails},
execution::{KclValue, Metadata},
execution::KclValue,
source_range::SourceRange,
};
use env::Environment;
@ -626,16 +626,8 @@ mod env {
impl Environment {
/// Create a new root environment (new program or module)
pub(super) fn new_root() -> Self {
const NO_META: Vec<Metadata> = Vec::new();
Self {
// Prelude
bindings: IndexMap::from([
("ZERO".to_string(), KclValue::from_number(0.0, NO_META)),
("QUARTER_TURN".to_string(), KclValue::from_number(90.0, NO_META)),
("HALF_TURN".to_string(), KclValue::from_number(180.0, NO_META)),
("THREE_QUARTER_TURN".to_string(), KclValue::from_number(270.0, NO_META)),
]),
bindings: IndexMap::new(),
snapshots: Vec::new(),
parent: None,
}
@ -1217,7 +1209,7 @@ mod test {
KclValue::Function {
func: None,
expression: crate::parsing::ast::types::FunctionExpression::dummy(),
memory: sn2,
memory: Some(sn2),
meta: Vec::new(),
},
sr(),
@ -1228,7 +1220,7 @@ mod test {
assert_get(mem, "a", 1);
assert_get(mem, "b", 2);
match mem.get("f", SourceRange::default()).unwrap() {
KclValue::Function { memory, .. } if *memory == sn1 => {}
KclValue::Function { memory, .. } if memory.unwrap() == sn1 => {}
v => panic!("{v:#?}"),
}
assert_eq!(mem.environments.len(), 1);

View File

@ -21,12 +21,13 @@ use crate::{
execution::{
artifact::build_artifact_graph,
cache::{CacheInformation, CacheResult},
memory::ProgramMemory,
},
fs::FileManager,
parsing::ast::types::{Expr, FunctionExpression, Node, NodeRef, Program},
parsing::ast::types::{Expr, Node, NodeRef, Program},
settings::types::UnitLength,
source_range::SourceRange,
std::{args::Arg, StdLib},
std::StdLib,
ExecError, KclErrorWithOutputs,
};
@ -131,16 +132,6 @@ impl std::hash::Hash for TagIdentifier {
}
}
pub type MemoryFunction =
fn(
s: Vec<Arg>,
memory: EnvironmentRef,
expression: crate::parsing::ast::types::BoxNode<FunctionExpression>,
metadata: Vec<Metadata>,
exec_state: &ExecState,
ctx: ExecutorContext,
) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<Option<KclValue>, KclError>> + Send>>;
/// Engine information for a tag.
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
#[ts(export)]
@ -156,11 +147,9 @@ pub struct TagEngineInfo {
pub surface: Option<ExtrudeSurface>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum BodyType {
Root,
Root(bool),
Block,
}
@ -507,18 +496,18 @@ impl ExecutorContext {
assert!(self.is_mock());
let mut exec_state = ExecState::new(&self.settings);
let mut mem = if use_prev_memory {
let (mut mem, init_mem) = if use_prev_memory {
cache::read_old_memory()
.await
.unwrap_or_else(|| exec_state.memory().clone())
.map(|m| (m, false))
.unwrap_or_else(|| (ProgramMemory::new(), true))
} else {
exec_state.memory().clone()
(ProgramMemory::new(), true)
};
// Add any extra variables to memory
let mut to_restore = Vec::new();
for (k, v) in variables {
crate::log::log(format!("add var: {k}"));
to_restore.push((k.clone(), mem.get(&k, SourceRange::default()).ok().cloned()));
mem.add(k, v, SourceRange::synthetic())
.map_err(KclErrorWithOutputs::no_outputs)?;
@ -530,7 +519,7 @@ impl ExecutorContext {
*exec_state.mut_memory() = mem;
self.inner_run(&program.ast, &mut exec_state).await?;
self.inner_run(&program.ast, &mut exec_state, init_mem).await?;
// Restore any temporary variables, then save any newly created variables back to
// memory in case another run wants to use them. Note this is just saved to the preserved
@ -549,14 +538,13 @@ impl ExecutorContext {
cache::write_old_memory(mem).await;
let outcome = exec_state.to_mock_wasm_outcome();
crate::log::log(format!("return mock {:#?}", outcome.variables));
Ok(outcome)
}
pub async fn run_with_caching(&self, program: crate::Program) -> Result<ExecOutcome, KclErrorWithOutputs> {
assert!(!self.is_mock());
let (program, mut exec_state) = if let Some(OldAstState {
let (program, mut exec_state, init_mem) = if let Some(OldAstState {
ast: old_ast,
exec_state: old_state,
settings: old_settings,
@ -620,16 +608,16 @@ impl ExecutorContext {
old_state
};
(program, exec_state)
(program, exec_state, clear_scene)
} else {
let mut exec_state = ExecState::new(&self.settings);
self.send_clear_scene(&mut exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
(program.ast, exec_state)
(program.ast, exec_state, true)
};
let result = self.inner_run(&program, &mut exec_state).await;
let result = self.inner_run(&program, &mut exec_state, init_mem).await;
if result.is_err() {
cache::bust_cache().await;
@ -678,7 +666,7 @@ impl ExecutorContext {
self.send_clear_scene(exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
self.inner_run(&program.ast, exec_state).await
self.inner_run(&program.ast, exec_state, true).await
}
/// Perform the execution of a program. Accept all possible parameters and
@ -687,6 +675,7 @@ impl ExecutorContext {
&self,
program: &Node<Program>,
exec_state: &mut ExecState,
init_mem: bool,
) -> Result<Option<ModelingSessionData>, KclErrorWithOutputs> {
let _stats = crate::log::LogPerfStats::new("Interpretation");
@ -696,7 +685,9 @@ impl ExecutorContext {
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
self.execute_and_build_graph(program, exec_state).await.map_err(|e| {
self.execute_and_build_graph(program, exec_state, init_mem)
.await
.map_err(|e| {
KclErrorWithOutputs::new(
e,
exec_state.mod_local.operations.clone(),
@ -723,12 +714,11 @@ impl ExecutorContext {
&self,
program: NodeRef<'_, crate::parsing::ast::types::Program>,
exec_state: &mut ExecState,
init_mem: bool,
) -> Result<Option<KclValue>, KclError> {
// Don't early return! We need to build other outputs regardless of
// whether execution failed.
let exec_result = self
.exec_program(program, exec_state, crate::execution::BodyType::Root)
.await;
let exec_result = self.exec_program(program, exec_state, BodyType::Root(init_mem)).await;
// Move the artifact commands and responses to simplify cache management
// and error creation.
exec_state
@ -1282,7 +1272,7 @@ let shape = layer() |> patternTransform(instances = 10, transform = transform)
#[tokio::test(flavor = "multi_thread")]
async fn test_math_execute_with_pi() {
let ast = r#"const myVar = pi() * 2"#;
let ast = r#"const myVar = PI * 2"#;
let (_, _, exec_state) = parse_execute(ast).await.unwrap();
assert_eq!(
std::f64::consts::TAU,

View File

@ -68,7 +68,7 @@ impl ExecState {
pub fn new(exec_settings: &ExecutorSettings) -> Self {
ExecState {
global: GlobalState::new(exec_settings),
mod_local: ModuleState::new(exec_settings),
mod_local: ModuleState::new(exec_settings, None),
}
}
@ -83,7 +83,7 @@ impl ExecState {
*self = ExecState {
global,
mod_local: ModuleState::new(exec_settings),
mod_local: ModuleState::new(exec_settings, None),
};
}
@ -212,7 +212,7 @@ impl GlobalState {
}
impl ModuleState {
pub(super) fn new(exec_settings: &ExecutorSettings) -> Self {
pub(super) fn new(exec_settings: &ExecutorSettings, std_path: Option<String>) -> Self {
ModuleState {
pipe_value: Default::default(),
module_exports: Default::default(),
@ -220,6 +220,7 @@ impl ModuleState {
settings: MetaSettings {
default_length_units: exec_settings.units.into(),
default_angle_units: Default::default(),
std_path,
},
}
}
@ -231,6 +232,7 @@ impl ModuleState {
pub struct MetaSettings {
pub default_length_units: kcl_value::UnitLen,
pub default_angle_units: kcl_value::UnitAngle,
pub std_path: Option<String>,
}
impl MetaSettings {

View File

@ -42,6 +42,7 @@ use tower_lsp::{
};
use crate::{
docs::kcl_doc::DocData,
errors::Suggestion,
lsp::{backend::Backend as _, util::IntoDiagnostic},
parsing::{
@ -164,8 +165,9 @@ impl Backend {
can_send_telemetry: bool,
) -> Result<Self, String> {
let stdlib = crate::std::StdLib::new();
let stdlib_completions = get_completions_from_stdlib(&stdlib).map_err(|e| e.to_string())?;
let stdlib_signatures = get_signatures_from_stdlib(&stdlib);
let kcl_std = crate::docs::kcl_doc::walk_prelude();
let stdlib_completions = get_completions_from_stdlib(&stdlib, &kcl_std).map_err(|e| e.to_string())?;
let stdlib_signatures = get_signatures_from_stdlib(&stdlib, &kcl_std);
Ok(Self {
client,
@ -1402,7 +1404,10 @@ impl LanguageServer for Backend {
}
/// Get completions from our stdlib.
pub fn get_completions_from_stdlib(stdlib: &crate::std::StdLib) -> Result<HashMap<String, CompletionItem>> {
pub fn get_completions_from_stdlib(
stdlib: &crate::std::StdLib,
kcl_std: &[DocData],
) -> Result<HashMap<String, CompletionItem>> {
let mut completions = HashMap::new();
let combined = stdlib.combined();
@ -1410,7 +1415,11 @@ pub fn get_completions_from_stdlib(stdlib: &crate::std::StdLib) -> Result<HashMa
completions.insert(internal_fn.name(), internal_fn.to_completion_item()?);
}
let variable_kinds = VariableKind::to_completion_items()?;
for d in kcl_std {
completions.insert(d.name().to_owned(), d.to_completion_item());
}
let variable_kinds = VariableKind::to_completion_items();
for variable_kind in variable_kinds {
completions.insert(variable_kind.label.clone(), variable_kind);
}
@ -1419,7 +1428,7 @@ pub fn get_completions_from_stdlib(stdlib: &crate::std::StdLib) -> Result<HashMa
}
/// Get signatures from our stdlib.
pub fn get_signatures_from_stdlib(stdlib: &crate::std::StdLib) -> HashMap<String, SignatureHelp> {
pub fn get_signatures_from_stdlib(stdlib: &crate::std::StdLib, kcl_std: &[DocData]) -> HashMap<String, SignatureHelp> {
let mut signatures = HashMap::new();
let combined = stdlib.combined();
@ -1427,6 +1436,12 @@ pub fn get_signatures_from_stdlib(stdlib: &crate::std::StdLib) -> HashMap<String
signatures.insert(internal_fn.name(), internal_fn.to_signature_help());
}
for d in kcl_std {
if let Some(sig) = d.to_signature_help() {
signatures.insert(d.name().to_owned(), sig);
}
}
signatures
}

View File

@ -6,8 +6,9 @@ use tower_lsp::LanguageServer;
// Create a fake kcl lsp server for testing.
pub async fn kcl_lsp_server(execute: bool) -> Result<crate::lsp::kcl::Backend> {
let stdlib = crate::std::StdLib::new();
let stdlib_completions = crate::lsp::kcl::get_completions_from_stdlib(&stdlib)?;
let stdlib_signatures = crate::lsp::kcl::get_signatures_from_stdlib(&stdlib);
let kcl_std = crate::docs::kcl_doc::walk_prelude();
let stdlib_completions = crate::lsp::kcl::get_completions_from_stdlib(&stdlib, &kcl_std)?;
let stdlib_signatures = crate::lsp::kcl::get_signatures_from_stdlib(&stdlib, &kcl_std);
let zoo_client = crate::engine::new_zoo_client(None, None)?;

View File

@ -807,11 +807,8 @@ async fn test_kcl_lsp_completions_const_raw() {
// Check the completions.
if let tower_lsp::lsp_types::CompletionResponse::Array(completions) = completions {
assert!(completions.len() > 10);
// Find the one with label "const".
let const_completion = completions
.iter()
.find(|completion| completion.label == "const")
.unwrap();
// Find the one with label "fn".
let const_completion = completions.iter().find(|completion| completion.label == "fn").unwrap();
assert_eq!(
const_completion.kind,
Some(tower_lsp::lsp_types::CompletionItemKind::KEYWORD)

View File

@ -43,7 +43,13 @@ pub(crate) struct ModuleLoader {
impl ModuleLoader {
pub(crate) fn cycle_check(&self, path: &ModulePath, source_range: SourceRange) -> Result<(), KclError> {
if self.import_stack.contains(path.expect_path()) {
return Err(KclError::ImportCycle(KclErrorDetails {
return Err(self.import_cycle_error(path, source_range));
}
Ok(())
}
pub(crate) fn import_cycle_error(&self, path: &ModulePath, source_range: SourceRange) -> KclError {
KclError::ImportCycle(KclErrorDetails {
message: format!(
"circular import of modules is not allowed: {} -> {}",
self.import_stack
@ -54,9 +60,7 @@ impl ModuleLoader {
path,
),
source_ranges: vec![source_range],
}));
}
Ok(())
})
}
pub(crate) fn enter_module(&mut self, path: &ModulePath) {
@ -73,8 +77,12 @@ impl ModuleLoader {
}
}
pub(crate) fn read_std(_mod_name: &str) -> Option<&'static str> {
None
pub(crate) fn read_std(mod_name: &str) -> Option<&'static str> {
match mod_name {
"prelude" => Some(include_str!("../std/prelude.kcl")),
"math" => Some(include_str!("../std/math.kcl")),
_ => None,
}
}
/// Info about a module.
@ -125,6 +133,13 @@ impl ModulePath {
}
}
pub(crate) fn std_path(&self) -> Option<String> {
match self {
ModulePath::Local(_) => None,
ModulePath::Std(p) => Some(p.clone()),
}
}
pub(crate) async fn source(&self, fs: &FileManager, source_range: SourceRange) -> Result<String, KclError> {
match self {
ModulePath::Local(p) => fs.read_to_string(p, source_range).await,

View File

@ -26,8 +26,7 @@ use crate::{
docs::StdLibFn,
errors::KclError,
execution::{annotations, KclValue, Metadata, TagIdentifier},
parsing::{ast::digest::Digest, PIPE_OPERATOR},
pretty::NumericSuffix,
parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR},
source_range::SourceRange,
ModuleId,
};
@ -887,6 +886,34 @@ impl Expr {
}
}
/// Describe this expression's type for a human, for typechecking.
/// This is a best-effort function, it's OK to give a shitty string here (but we should work on improving it)
pub fn human_friendly_type(&self) -> &'static str {
match self {
Expr::Literal(node) => match node.inner.value {
LiteralValue::Number { .. } => "number",
LiteralValue::String(_) => "string (text)",
LiteralValue::Bool(_) => "boolean (true/false value)",
},
Expr::Identifier(_) => "named constant",
Expr::TagDeclarator(_) => "tag declarator",
Expr::BinaryExpression(_) => "expression",
Expr::FunctionExpression(_) => "function definition",
Expr::CallExpression(_) => "function call",
Expr::CallExpressionKw(_) => "function call",
Expr::PipeExpression(_) => "pipeline of function calls",
Expr::PipeSubstitution(_) => "left-hand side of a |> pipeline",
Expr::ArrayExpression(_) => "array",
Expr::ArrayRangeExpression(_) => "array",
Expr::ObjectExpression(_) => "object",
Expr::MemberExpression(_) => "property of an object/array",
Expr::UnaryExpression(_) => "expression",
Expr::IfExpression(_) => "if expression",
Expr::LabelledExpression(_) => "labelled expression",
Expr::None(_) => "none",
}
}
pub fn literal_bool(&self) -> Option<bool> {
match self {
Expr::Literal(lit) => match lit.value {
@ -923,34 +950,6 @@ impl Expr {
_ => None,
}
}
/// Describe this expression's type for a human, for typechecking.
/// This is a best-effort function, it's OK to give a shitty string here (but we should work on improving it)
pub fn human_friendly_type(&self) -> &'static str {
match self {
Expr::Literal(node) => match node.inner.value {
LiteralValue::Number { .. } => "number",
LiteralValue::String(_) => "string (text)",
LiteralValue::Bool(_) => "boolean (true/false value)",
},
Expr::Identifier(_) => "named constant",
Expr::TagDeclarator(_) => "tag declarator",
Expr::BinaryExpression(_) => "expression",
Expr::FunctionExpression(_) => "function definition",
Expr::CallExpression(_) => "function call",
Expr::CallExpressionKw(_) => "function call",
Expr::PipeExpression(_) => "pipeline of function calls",
Expr::PipeSubstitution(_) => "left-hand side of a |> pipeline",
Expr::ArrayExpression(_) => "array",
Expr::ArrayRangeExpression(_) => "array",
Expr::ObjectExpression(_) => "object",
Expr::MemberExpression(_) => "property of an object/array",
Expr::UnaryExpression(_) => "expression",
Expr::IfExpression(_) => "if expression",
Expr::LabelledExpression(_) => "labelled expression",
Expr::None(_) => "none",
}
}
}
impl From<Expr> for SourceRange {
@ -1519,7 +1518,7 @@ impl ImportStatement {
return None;
}
path.rsplit('/').next().map(str::to_owned)
path.rsplit(&['/', '\\']).next().map(str::to_owned)
}
}
@ -1996,31 +1995,36 @@ pub enum VariableKind {
}
impl VariableKind {
pub fn to_completion_items() -> Result<Vec<CompletionItem>> {
let mut settings = schemars::gen::SchemaSettings::openapi3();
settings.inline_subschemas = true;
let mut generator = schemars::gen::SchemaGenerator::new(settings);
let schema = VariableKind::json_schema(&mut generator);
let schemars::schema::Schema::Object(o) = &schema else {
anyhow::bail!("expected object schema: {:#?}", schema);
};
let Some(subschemas) = &o.subschemas else {
anyhow::bail!("expected subschemas: {:#?}", schema);
};
let Some(one_ofs) = &subschemas.one_of else {
anyhow::bail!("expected one_of: {:#?}", schema);
};
// Iterate over all the VariableKinds and create a completion for each.
let mut completions = vec![];
for one_of in one_ofs {
completions.push(crate::docs::completion_item_from_enum_schema(
one_of,
CompletionItemKind::KEYWORD,
)?);
pub fn to_completion_items() -> Vec<CompletionItem> {
fn completion_item(keyword: &str, description: &str) -> CompletionItem {
CompletionItem {
label: keyword.to_owned(),
label_details: None,
kind: Some(CompletionItemKind::KEYWORD),
detail: Some(description.to_owned()),
documentation: Some(tower_lsp::lsp_types::Documentation::MarkupContent(
tower_lsp::lsp_types::MarkupContent {
kind: tower_lsp::lsp_types::MarkupKind::Markdown,
value: description.to_owned(),
},
)),
deprecated: Some(false),
preselect: None,
sort_text: None,
filter_text: None,
insert_text: None,
insert_text_format: None,
insert_text_mode: None,
text_edit: None,
additional_text_edits: None,
command: None,
commit_characters: None,
data: None,
tags: None,
}
}
Ok(completions)
vec![completion_item("fn", "Declare a function.")]
}
}
@ -3461,7 +3465,7 @@ mod tests {
// We have this as a test so we can ensure it never panics with an unwrap in the server.
#[test]
fn test_variable_kind_to_completion() {
let completions = VariableKind::to_completion_items().unwrap();
let completions = VariableKind::to_completion_items();
assert!(!completions.is_empty());
}

View File

@ -342,7 +342,9 @@ fn non_code_node_no_leading_whitespace(i: &mut TokenSlice) -> PResult<Node<NonCo
None
} else {
let value = match token.token_type {
TokenType::Whitespace if token.value.contains("\n\n") => NonCodeValue::NewLine,
TokenType::Whitespace if token.value.contains("\n\n") || token.value.contains("\n\r\n") => {
NonCodeValue::NewLine
}
TokenType::LineComment => NonCodeValue::BlockComment {
value: token.value.trim_start_matches("//").trim().to_owned(),
style: CommentStyle::Line,
@ -1402,7 +1404,7 @@ fn function_body(i: &mut TokenSlice) -> PResult<Node<Program>> {
// if it has an empty line, it should be considered a noncode token, because the user
// deliberately put an empty line there. We should track this and preserve it.
if let Ok(ref ws_token) = found_ws {
if ws_token.value.contains("\n\n") {
if ws_token.value.contains("\n\n") || ws_token.value.contains("\n\r\n") {
things_within_body.push(WithinFunction::NonCode(Node::new(
NonCodeNode {
value: NonCodeValue::NewLine,
@ -1735,6 +1737,7 @@ fn validate_path_string(path_string: String, var_name: bool, path_range: SourceR
ImportPath::Std { path: segments }
} else if path_string.contains('.') {
// TODO should allow other extensions if there is a format attribute.
let extn = &path_string[path_string.rfind('.').unwrap() + 1..];
if !FOREIGN_IMPORT_EXTENSIONS.contains(&extn) {
ParseContext::warn(CompilationError::err(

View File

@ -99,7 +99,7 @@ pub(super) fn token(i: &mut Input<'_>) -> PResult<Token> {
'#' => hash,
'$' => dollar,
'!' => alt((operator, bang)),
' ' | '\t' | '\n' => whitespace,
' ' | '\t' | '\n' | '\r' => whitespace,
_ => alt((operator, keyword_type_or_word))
}
.parse_next(i)

View File

@ -17,7 +17,6 @@ pub async fn map(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
let map_fn = FunctionParam {
inner: f.func,
fn_expr: f.expr,
meta: meta.clone(),
ctx: args.ctx.clone(),
memory: f.memory,
};
@ -78,7 +77,9 @@ async fn call_map_closure(
source_range: SourceRange,
exec_state: &mut ExecState,
) -> Result<KclValue, KclError> {
let output = map_fn.call(exec_state, vec![Arg::synthetic(input)]).await?;
let output = map_fn
.call(exec_state, vec![Arg::synthetic(input)], source_range)
.await?;
let source_ranges = vec![source_range];
let output = output.ok_or_else(|| {
KclError::Semantic(KclErrorDetails {
@ -95,7 +96,6 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
let reduce_fn = FunctionParam {
inner: f.func,
fn_expr: f.expr,
meta: vec![args.source_range.into()],
ctx: args.ctx.clone(),
memory: f.memory,
};
@ -141,7 +141,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// // Declare a function that sketches a decagon.
/// fn decagon(radius) {
/// // Each side of the decagon is turned this many degrees from the previous angle.
/// stepAngle = (1/10) * tau()
/// stepAngle = (1/10) * TAU
///
/// // Start the decagon sketch at this point.
/// startOfDecagonSketch = startSketchOn('XY')
@ -164,7 +164,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// /*
/// The `decagon` above is basically like this pseudo-code:
/// fn decagon(radius):
/// stepAngle = (1/10) * tau()
/// stepAngle = (1/10) * TAU
/// plane = startSketchOn('XY')
/// startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)
///
@ -208,7 +208,7 @@ async fn call_reduce_closure(
) -> Result<KclValue, KclError> {
// Call the reduce fn for this repetition.
let reduce_fn_args = vec![Arg::synthetic(elem), Arg::synthetic(start)];
let transform_fn_return = reduce_fn.call(exec_state, reduce_fn_args).await?;
let transform_fn_return = reduce_fn.call(exec_state, reduce_fn_args, source_range).await?;
// Unpack the returned transform object.
let source_ranges = vec![source_range];

View File

@ -48,91 +48,19 @@ fn inner_rem(num: f64, divisor: f64) -> f64 {
/// Compute the cosine of a number (in radians).
pub async fn cos(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num = args.get_number()?;
let result = inner_cos(num)?;
Ok(args.make_user_val_from_f64_with_type(result, NumericType::count()))
}
/// Compute the cosine of a number (in radians).
///
/// ```no_run
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 30,
/// length = 3 / cos(toRadians(30)),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
#[stdlib {
name = "cos",
tags = ["math"],
}]
fn inner_cos(num: f64) -> Result<f64, KclError> {
Ok(num.cos())
Ok(args.make_user_val_from_f64_with_type(num.cos(), NumericType::count()))
}
/// Compute the sine of a number (in radians).
pub async fn sin(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num = args.get_number()?;
let result = inner_sin(num)?;
Ok(args.make_user_val_from_f64_with_type(result, NumericType::count()))
}
/// Compute the sine of a number (in radians).
///
/// ```no_run
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 50,
/// length = 15 / sin(toDegrees(135)),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
#[stdlib {
name = "sin",
tags = ["math"],
}]
fn inner_sin(num: f64) -> Result<f64, KclError> {
Ok(num.sin())
Ok(args.make_user_val_from_f64_with_type(num.sin(), NumericType::count()))
}
/// Compute the tangent of a number (in radians).
pub async fn tan(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let num = args.get_number()?;
let result = inner_tan(num)?;
Ok(args.make_user_val_from_f64_with_type(result, NumericType::count()))
}
/// Compute the tangent of a number (in radians).
///
/// ```no_run
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 50,
/// length = 50 * tan(1/2),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
#[stdlib {
name = "tan",
tags = ["math"],
}]
fn inner_tan(num: f64) -> Result<f64, KclError> {
Ok(num.tan())
Ok(args.make_user_val_from_f64_with_type(num.tan(), NumericType::count()))
}
/// Return the value of `pi`. Archimedes constant (π).
@ -144,6 +72,8 @@ pub async fn pi(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
/// Return the value of `pi`. Archimedes constant (π).
///
/// **DEPRECATED** use the constant PI
///
/// ```no_run
/// circumference = 70
///
@ -155,6 +85,7 @@ pub async fn pi(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
#[stdlib {
name = "pi",
tags = ["math"],
deprecated = true,
}]
fn inner_pi() -> Result<f64, KclError> {
Ok(std::f64::consts::PI)
@ -692,6 +623,8 @@ pub async fn e(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclE
/// Return the value of Eulers number `e`.
///
/// **DEPRECATED** use the constant E
///
/// ```no_run
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
@ -707,6 +640,7 @@ pub async fn e(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclE
#[stdlib {
name = "e",
tags = ["math"],
deprecated = true,
}]
fn inner_e() -> Result<f64, KclError> {
Ok(std::f64::consts::E)
@ -721,6 +655,8 @@ pub async fn tau(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
/// Return the value of `tau`. The full circle constant (τ). Equal to 2π.
///
/// **DEPRECATED** use the constant TAU
///
/// ```no_run
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
@ -736,6 +672,7 @@ pub async fn tau(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
#[stdlib {
name = "tau",
tags = ["math"],
deprecated = true,
}]
fn inner_tau() -> Result<f64, KclError> {
Ok(std::f64::consts::TAU)

View File

@ -122,9 +122,6 @@ lazy_static! {
Box::new(crate::std::loft::Loft),
Box::new(crate::std::planes::OffsetPlane),
Box::new(crate::std::import::Import),
Box::new(crate::std::math::Cos),
Box::new(crate::std::math::Sin),
Box::new(crate::std::math::Tan),
Box::new(crate::std::math::Acos),
Box::new(crate::std::math::Asin),
Box::new(crate::std::math::Atan),
@ -171,6 +168,15 @@ pub fn get_stdlib_fn(name: &str) -> Option<Box<dyn StdLibFn>> {
CORE_FNS.iter().find(|f| f.name() == name).cloned()
}
pub(crate) fn std_fn(path: &str, fn_name: &str) -> crate::std::StdFn {
match (path, fn_name) {
("math", "cos") => |e, a| Box::pin(crate::std::math::cos(e, a)),
("math", "sin") => |e, a| Box::pin(crate::std::math::sin(e, a)),
("math", "tan") => |e, a| Box::pin(crate::std::math::tan(e, a)),
_ => unreachable!(),
}
}
pub struct StdLib {
pub fns: IndexMap<String, Box<dyn StdLibFn>>,
}
@ -303,7 +309,7 @@ pub enum Primitive {
/// A closure used as an argument to a stdlib function.
pub struct FnAsArg<'a> {
pub func: Option<&'a crate::execution::MemoryFunction>,
pub func: Option<&'a crate::std::StdFn>,
pub expr: crate::parsing::ast::types::BoxNode<FunctionExpression>,
pub memory: EnvironmentRef,
pub memory: Option<EnvironmentRef>,
}

View File

@ -58,7 +58,6 @@ pub async fn pattern_transform(exec_state: &mut ExecState, args: Args) -> Result
FunctionParam {
inner: transform.func,
fn_expr: transform.expr,
meta: vec![args.source_range.into()],
ctx: args.ctx.clone(),
memory: transform.memory,
},
@ -83,7 +82,6 @@ pub async fn pattern_transform_2d(exec_state: &mut ExecState, args: Args) -> Res
FunctionParam {
inner: transform.func,
fn_expr: transform.expr,
meta: vec![args.source_range.into()],
ctx: args.ctx.clone(),
memory: transform.memory,
},
@ -452,7 +450,7 @@ async fn make_transform<T: GeometryTrait>(
meta: vec![source_range.into()],
};
let transform_fn_args = vec![Arg::synthetic(repetition_num)];
let transform_fn_return = transform.call(exec_state, transform_fn_args).await?;
let transform_fn_return = transform.call(exec_state, transform_fn_args, source_range).await?;
// Unpack the returned transform object.
let source_ranges = vec![source_range];

View File

@ -0,0 +1,96 @@
@no_prelude
/// The value of `pi`, Archimedes constant (π).
///
/// ```
/// circumference = 70
///
/// exampleSketch = startSketchOn("XZ")
/// |> circle({ center = [0, 0], radius = circumference/ (2 * PI) }, %)
///
/// example = extrude(exampleSketch, length = 5)
/// ```
export PI = 3.14159265358979323846264338327950288_
/// The value of Eulers number `e`.
///
/// ```
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 30,
/// length = 2 * E ^ 2,
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
export E = 2.71828182845904523536028747135266250_
/// The value of `tau`, the full circle constant (τ). Equal to 2π.
///
/// ```
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 50,
/// length = 10 * TAU,
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
export TAU = 6.28318530717958647692528676655900577_
/// Compute the cosine of a number (in radians).
///
/// ```
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 30,
/// length = 3 / cos(toRadians(30)),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
@(impl = std_rust)
export fn cos(num: number(rad)): number(_) {}
/// Compute the sine of a number (in radians).
///
/// ```
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 50,
/// length = 15 / sin(toDegrees(135)),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
@(impl = std_rust)
export fn sin(num: number(rad)): number(_) {}
/// Compute the tangent of a number (in radians).
///
/// ```
/// exampleSketch = startSketchOn("XZ")
/// |> startProfileAt([0, 0], %)
/// |> angledLine({
/// angle = 50,
/// length = 50 * tan(1/2),
/// }, %)
/// |> yLineTo(0, %)
/// |> close()
///
/// example = extrude(exampleSketch, length = 5)
/// ```
@(impl = std_rust)
export fn tan(num: number(rad)): number(_) {}

View File

@ -0,0 +1,7 @@
@no_prelude
export import * from "std::math"
export ZERO = 0
export QUARTER_TURN = 90deg
export HALF_TURN = 180deg
export THREE_QUARTER_TURN = 270deg

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing add_lots.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"f": {
"type": "Function",
@ -104,6 +236,80 @@ description: Variables in memory after executing add_lots.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"x": {
"type": "Number",
"value": 10100.0,

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing angled_line.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -472,5 +604,79 @@ description: Variables in memory after executing angled_line.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing array_elem_pop.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"arr": {
"type": "Array",
@ -115,6 +210,43 @@ description: Variables in memory after executing array_elem_pop.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"new_arr1": {
"type": "Array",
"value": [
@ -221,5 +353,79 @@ description: Variables in memory after executing array_elem_pop.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing array_elem_push.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"arr": {
"type": "Array",
@ -115,6 +210,43 @@ description: Variables in memory after executing array_elem_push.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"new_arr1": {
"type": "Array",
"value": [
@ -340,5 +472,79 @@ description: Variables in memory after executing array_elem_push.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing array_range_expr.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"five": {
"type": "Number",
@ -475,6 +607,80 @@ description: Variables in memory after executing array_range_expr.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"zero": {
"type": "Number",
"value": 0.0,

View File

@ -3,37 +3,243 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing array_range_negative_expr.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"xs": {
"type": "Array",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing artifact_graph_example_code1.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"extrude001": {
"type": "Solid",
@ -1205,6 +1337,43 @@ description: Variables in memory after executing artifact_graph_example_code1.kc
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"sketch001": {
"type": "Sketch",
"value": {
@ -2108,5 +2277,42 @@ description: Variables in memory after executing artifact_graph_example_code1.kc
}
]
}
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing artifact_graph_example_code_no_3d.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"rectangleSegmentA001": {
"type": "TagIdentifier",
@ -179,6 +311,43 @@ description: Variables in memory after executing artifact_graph_example_code_no_
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"sketch003": {
"type": "Sketch",
"value": {
@ -680,5 +849,42 @@ description: Variables in memory after executing artifact_graph_example_code_no_
}
]
}
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing artifact_graph_example_code_offset_planes.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"offsetPlane001": {
"type": "Plane",
@ -131,6 +263,43 @@ description: Variables in memory after executing artifact_graph_example_code_off
"__meta": []
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"sketch002": {
"type": "Sketch",
"value": {
@ -228,5 +397,42 @@ description: Variables in memory after executing artifact_graph_example_code_off
}
]
}
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing artifact_graph_sketch_on_face_etc.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"extrude001": {
"type": "Solid",
@ -2825,6 +2957,43 @@ description: Variables in memory after executing artifact_graph_sketch_on_face_e
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"sketch001": {
"type": "Sketch",
"value": {
@ -5258,5 +5427,42 @@ description: Variables in memory after executing artifact_graph_sketch_on_face_e
}
]
}
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -298,7 +298,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
0,
33,
1
3
],
"command": {
"type": "set_scene_units",
@ -310,7 +310,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
172,
191,
1
3
],
"command": {
"type": "make_plane",
@ -339,7 +339,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
197,
239,
1
3
],
"command": {
"type": "enable_sketch_mode",
@ -359,7 +359,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
197,
239,
1
3
],
"command": {
"type": "start_path"
@ -370,7 +370,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
197,
239,
1
3
],
"command": {
"type": "move_path_pen",
@ -387,7 +387,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
197,
239,
1
3
],
"command": {
"type": "extend_path",
@ -416,7 +416,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
197,
239,
1
3
],
"command": {
"type": "close_path",
@ -428,7 +428,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
0,
33,
2
4
],
"command": {
"type": "set_scene_units",
@ -440,7 +440,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
89,
108,
2
4
],
"command": {
"type": "make_plane",
@ -469,7 +469,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
114,
156,
2
4
],
"command": {
"type": "enable_sketch_mode",
@ -489,7 +489,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
114,
156,
2
4
],
"command": {
"type": "start_path"
@ -500,7 +500,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
114,
156,
2
4
],
"command": {
"type": "move_path_pen",
@ -517,7 +517,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
114,
156,
2
4
],
"command": {
"type": "extend_path",
@ -546,7 +546,7 @@ description: Artifact commands assembly_non_default_units.kcl
"range": [
114,
156,
2
4
],
"command": {
"type": "close_path",

View File

@ -1,17 +1,17 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[197, 239, 1]"]
3["Segment<br>[197, 239, 1]"]
2["Path<br>[197, 239, 3]"]
3["Segment<br>[197, 239, 3]"]
4[Solid2d]
end
subgraph path6 [Path]
6["Path<br>[114, 156, 2]"]
7["Segment<br>[114, 156, 2]"]
6["Path<br>[114, 156, 4]"]
7["Segment<br>[114, 156, 4]"]
8[Solid2d]
end
1["Plane<br>[172, 191, 1]"]
5["Plane<br>[89, 108, 2]"]
1["Plane<br>[172, 191, 3]"]
5["Plane<br>[89, 108, 4]"]
1 --- 2
2 --- 3
2 --- 4

View File

@ -3,41 +3,173 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing assembly_non_default_units.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"other1": {
"type": "Module",
"value": 1,
"value": 3,
"__meta": [
{
"sourceRange": [
@ -50,7 +182,7 @@ description: Variables in memory after executing assembly_non_default_units.kcl
},
"other2": {
"type": "Module",
"value": 2,
"value": 4,
"__meta": [
{
"sourceRange": [
@ -60,5 +192,79 @@ description: Variables in memory after executing assembly_non_default_units.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing basic_fillet_cube_close_opposite.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -502,6 +634,80 @@ description: Variables in memory after executing basic_fillet_cube_close_opposit
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "TagIdentifier",
"type": "TagIdentifier",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing basic_fillet_cube_end.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -430,6 +562,80 @@ description: Variables in memory after executing basic_fillet_cube_end.kcl
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "TagIdentifier",
"type": "TagIdentifier",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing basic_fillet_cube_next_adjacent.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -567,6 +699,80 @@ description: Variables in memory after executing basic_fillet_cube_next_adjacent
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "TagIdentifier",
"type": "TagIdentifier",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing basic_fillet_cube_previous_adjacent.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -567,6 +699,80 @@ description: Variables in memory after executing basic_fillet_cube_previous_adja
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "TagIdentifier",
"type": "TagIdentifier",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing basic_fillet_cube_start.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -430,6 +562,80 @@ description: Variables in memory after executing basic_fillet_cube_start.kcl
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "TagIdentifier",
"type": "TagIdentifier",

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing big_number_angle_to_match_length_x.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -370,5 +502,79 @@ description: Variables in memory after executing big_number_angle_to_match_lengt
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing big_number_angle_to_match_length_y.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -370,5 +502,79 @@ description: Variables in memory after executing big_number_angle_to_match_lengt
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing boolean_logical_and.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"a": {
"type": "Number",
@ -161,6 +256,43 @@ description: Variables in memory after executing boolean_logical_and.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"d": {
"type": "Number",
"value": 2.0,
@ -202,5 +334,79 @@ description: Variables in memory after executing boolean_logical_and.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing boolean_logical_multiple.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"i": {
"type": "Number",
@ -146,5 +278,79 @@ description: Variables in memory after executing boolean_logical_multiple.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing boolean_logical_or.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"a": {
"type": "Number",
@ -161,6 +256,43 @@ description: Variables in memory after executing boolean_logical_or.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"d": {
"type": "Number",
"value": 2.0,
@ -202,5 +334,79 @@ description: Variables in memory after executing boolean_logical_or.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,206 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing circle_three_point.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"sketch001": {
"type": "Solid",
@ -177,5 +346,42 @@ description: Variables in memory after executing circle_three_point.kcl
}
]
}
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing circular_pattern3d_a_pattern.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"exampleSketch": {
"type": "Solid",
@ -67897,5 +68029,79 @@ description: Variables in memory after executing circular_pattern3d_a_pattern.kc
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,36 +3,242 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing comparisons.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -391,9 +391,180 @@ description: Result of parsing computed_var.kcl
"start": 168,
"type": "ExpressionStatement",
"type": "ExpressionStatement"
},
{
"end": 242,
"expression": {
"arguments": [
{
"end": 222,
"name": "PI",
"start": 220,
"type": "Identifier",
"type": "Identifier"
},
{
"end": 225,
"raw": "3",
"start": 224,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.0,
"suffix": "None"
}
},
{
"end": 230,
"raw": "0.2",
"start": 227,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.2,
"suffix": "None"
}
},
{
"end": 241,
"raw": "\"oops pi\"",
"start": 232,
"type": "Literal",
"type": "Literal",
"value": "oops pi"
}
],
"end": 207,
"callee": {
"end": 219,
"name": "assertEqual",
"start": 208,
"type": "Identifier"
},
"end": 242,
"start": 208,
"type": "CallExpression",
"type": "CallExpression"
},
"start": 208,
"type": "ExpressionStatement",
"type": "ExpressionStatement"
},
{
"declaration": {
"end": 258,
"id": {
"end": 244,
"name": "x",
"start": 243,
"type": "Identifier"
},
"init": {
"arguments": [
{
"end": 257,
"left": {
"end": 252,
"raw": "2",
"start": 251,
"type": "Literal",
"type": "Literal",
"value": {
"value": 2.0,
"suffix": "None"
}
},
"operator": "*",
"right": {
"end": 257,
"name": "PI",
"start": 255,
"type": "Identifier",
"type": "Identifier"
},
"start": 251,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
],
"callee": {
"end": 250,
"name": "cos",
"start": 247,
"type": "Identifier"
},
"end": 258,
"start": 247,
"type": "CallExpression",
"type": "CallExpression"
},
"start": 243,
"type": "VariableDeclarator"
},
"end": 258,
"kind": "const",
"start": 243,
"type": "VariableDeclaration",
"type": "VariableDeclaration"
},
{
"end": 298,
"expression": {
"arguments": [
{
"end": 272,
"name": "x",
"start": 271,
"type": "Identifier",
"type": "Identifier"
},
{
"end": 275,
"raw": "1",
"start": 274,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.0,
"suffix": "None"
}
},
{
"end": 285,
"raw": "0.000001",
"start": 277,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.000001,
"suffix": "None"
}
},
{
"end": 297,
"raw": "\"oops cos\"",
"start": 287,
"type": "Literal",
"type": "Literal",
"value": "oops cos"
}
],
"callee": {
"end": 270,
"name": "assertEqual",
"start": 259,
"type": "Identifier"
},
"end": 298,
"start": 259,
"type": "CallExpression",
"type": "CallExpression"
},
"start": 259,
"type": "ExpressionStatement",
"type": "ExpressionStatement"
}
],
"end": 299,
"nonCodeMeta": {
"nonCodeNodes": {
"2": [
@ -425,6 +596,16 @@ description: Result of parsing computed_var.kcl
"type": "newLine"
}
}
],
"7": [
{
"end": 208,
"start": 206,
"type": "NonCodeNode",
"value": {
"type": "newLine"
}
}
]
},
"startNodes": [

View File

@ -12,3 +12,7 @@ obj = { foo = 1, bar = 0 }
one = obj[p]
assertEqual(one, 1, 0.0000001, "oops")
assertEqual(PI, 3, 0.2, "oops pi")
x = cos(2 * PI)
assertEqual(x, 1, 0.000001, "oops cos")

View File

@ -1,6 +1,25 @@
---
source: kcl/src/simulation_tests.rs
description: Operations executed computed_var.kcl
snapshot_kind: text
---
[]
[
{
"type": "UserDefinedFunctionCall",
"name": "cos",
"functionSourceRange": [
1446,
1478,
2
],
"unlabeledArg": null,
"labeledArgs": {},
"sourceRange": [
247,
258,
0
]
},
{
"type": "UserDefinedFunctionReturn"
}
]

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing computed_var.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"arr": {
"type": "Array",
@ -137,6 +232,43 @@ description: Variables in memory after executing computed_var.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"i": {
"type": "Number",
"value": 3.0,
@ -252,6 +384,80 @@ description: Variables in memory after executing computed_var.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"ten": {
"type": "Number",
"value": 10.0,
@ -273,5 +479,22 @@ description: Variables in memory after executing computed_var.kcl
]
}
]
},
"x": {
"type": "Number",
"value": 1.0,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
247,
258,
0
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing cube.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"cube": {
"type": "Function",
@ -974,5 +1106,79 @@ description: Variables in memory after executing cube.kcl
}
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing double_map_fn.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"increment": {
"type": "Function",
@ -104,6 +236,80 @@ description: Variables in memory after executing double_map_fn.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"xs": {
"type": "Array",
"value": [

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing fillet-and-shell.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"border": {
"type": "Number",
@ -736,6 +831,43 @@ description: Variables in memory after executing fillet-and-shell.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"edge1": {
"type": "TagIdentifier",
"type": "TagIdentifier",
@ -1736,6 +1868,80 @@ description: Variables in memory after executing fillet-and-shell.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"widthBetweenScrews": {
"type": "Number",
"value": 23.0,

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing function_sketch.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"box": {
"type": "Function",
@ -417,6 +512,43 @@ description: Variables in memory after executing function_sketch.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"fnBox": {
"type": "Solid",
"value": {
@ -649,5 +781,79 @@ description: Variables in memory after executing function_sketch.kcl
}
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing function_sketch_with_position.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"box": {
"type": "Function",
@ -403,6 +498,117 @@ description: Variables in memory after executing function_sketch_with_position.k
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"thing": {
"type": "Solid",
"value": {

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing helix_ccw.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"part001": {
"type": "Solid",
@ -171,5 +303,79 @@ description: Variables in memory after executing helix_ccw.kcl
}
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,169 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing helix_simple.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"edge001": {
"type": "TagIdentifier",
@ -256,5 +388,79 @@ description: Variables in memory after executing helix_simple.kcl
}
]
}
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing i_shape.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"brace_base": {
"type": "Sketch",
@ -767,6 +862,43 @@ description: Variables in memory after executing i_shape.kcl
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"d_wrist_circumference": {
"type": "Array",
"value": [
@ -2211,6 +2343,80 @@ description: Variables in memory after executing i_shape.kcl
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"width": {
"type": "Number",
"value": 68.4,

View File

@ -3,37 +3,132 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing if_else.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"a": {
"type": "Number",
@ -100,5 +195,116 @@ description: Variables in memory after executing if_else.kcl
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

View File

@ -3,37 +3,243 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing import_constant.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"three": {
"type": "Number",
@ -52,7 +258,7 @@ description: Variables in memory after executing import_constant.kcl
"sourceRange": [
15,
16,
1
3
]
}
]

View File

@ -1,7 +1,6 @@
---
source: kcl/src/simulation_tests.rs
description: Artifact commands import_cycle1.kcl
snapshot_kind: text
---
[
{
@ -281,5 +280,17 @@ snapshot_kind: text
"object_id": "[uuid]",
"hidden": true
}
},
{
"cmdId": "[uuid]",
"range": [
0,
33,
0
],
"command": {
"type": "set_scene_units",
"unit": "in"
}
}
]

View File

@ -3,37 +3,243 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing import_export.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
},
"three": {
"type": "Number",
@ -52,7 +258,7 @@ description: Variables in memory after executing import_export.kcl
"sourceRange": [
15,
16,
2
4
]
}
]

View File

@ -3,41 +3,173 @@ source: kcl/src/simulation_tests.rs
description: Variables in memory after executing import_foreign.kcl
---
{
"E": {
"type": "Number",
"value": 2.718281828459045,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
651,
689,
2
]
}
]
},
"HALF_TURN": {
"type": "Number",
"value": 180.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
109,
115,
1
]
}
]
},
"PI": {
"type": "Number",
"value": 3.141592653589793,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
290,
328,
2
]
}
]
},
"QUARTER_TURN": {
"type": "Number",
"value": 90.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
84,
89,
1
]
}
]
},
"TAU": {
"type": "Number",
"value": 6.283185307179586,
"ty": {
"type": "Known",
"type": "Count"
},
"__meta": [
{
"sourceRange": [
1042,
1080,
2
]
}
]
},
"THREE_QUARTER_TURN": {
"type": "Number",
"value": 270.0,
"ty": {
"type": "Unknown"
"type": "Known",
"type": "Angle",
"type": "Degrees"
},
"__meta": []
"__meta": [
{
"sourceRange": [
144,
150,
1
]
}
]
},
"ZERO": {
"type": "Number",
"value": 0.0,
"ty": {
"type": "Unknown"
"type": "Default",
"len": {
"type": "Mm"
},
"__meta": []
"angle": {
"type": "Degrees"
}
},
"__meta": [
{
"sourceRange": [
60,
61,
1
]
}
]
},
"cos": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1477,
"moduleId": 2,
"start": 1477
},
"end": 1478,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1450,
"moduleId": 2,
"name": "num",
"start": 1447,
"type": "Identifier"
}
}
],
"start": 1446,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1446,
1478,
2
]
}
]
},
"cube": {
"type": "Module",
"value": 1,
"value": 3,
"__meta": [
{
"sourceRange": [
@ -63,5 +195,79 @@ description: Variables in memory after executing import_foreign.kcl
]
}
]
},
"sin": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 1875,
"moduleId": 2,
"start": 1875
},
"end": 1876,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 1848,
"moduleId": 2,
"name": "num",
"start": 1845,
"type": "Identifier"
}
}
],
"start": 1844,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
1844,
1876,
2
]
}
]
},
"tan": {
"type": "Function",
"expression": {
"body": {
"body": [],
"end": 2265,
"moduleId": 2,
"start": 2265
},
"end": 2266,
"moduleId": 2,
"params": [
{
"type": "Parameter",
"identifier": {
"end": 2238,
"moduleId": 2,
"name": "num",
"start": 2235,
"type": "Identifier"
}
}
],
"start": 2234,
"type": "FunctionExpression"
},
"memory": null,
"__meta": [
{
"sourceRange": [
2234,
2266,
2
]
}
]
}
}

Some files were not shown because too many files have changed in this diff Show More