diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png
index 1573d2eb94c..74ac043b9e9 100644
Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-3-Google-Chrome-linux.png differ
diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png
index 1268febbbd7..1b86e938d17 100644
Binary files a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png and b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Draft-segments-should-look-right-4-Google-Chrome-linux.png differ
diff --git a/rust/kcl-lib/src/simulation_tests.rs b/rust/kcl-lib/src/simulation_tests.rs
index 1cdafb27706..23c51f925a9 100644
--- a/rust/kcl-lib/src/simulation_tests.rs
+++ b/rust/kcl-lib/src/simulation_tests.rs
@@ -3838,3 +3838,24 @@ mod tag_inner_face {
super::execute(TEST_NAME, true).await
}
}
+mod sweep_tag_end {
+ const TEST_NAME: &str = "sweep_tag_end";
+
+ /// Test parsing KCL.
+ #[test]
+ fn parse() {
+ super::parse(TEST_NAME)
+ }
+
+ /// Test that parsing and unparsing KCL produces the original KCL input.
+ #[tokio::test(flavor = "multi_thread")]
+ async fn unparse() {
+ super::unparse(TEST_NAME).await
+ }
+
+ /// Test that KCL is executed correctly.
+ #[tokio::test(flavor = "multi_thread")]
+ async fn kcl_test_execute() {
+ super::execute(TEST_NAME, true).await
+ }
+}
diff --git a/rust/kcl-lib/src/std/extrude.rs b/rust/kcl-lib/src/std/extrude.rs
index a5a42d19c04..348d42bf107 100644
--- a/rust/kcl-lib/src/std/extrude.rs
+++ b/rust/kcl-lib/src/std/extrude.rs
@@ -211,6 +211,7 @@ pub(crate) async fn do_post_extrude<'a>(
let mut sketch = sketch.clone();
// If we were sketching on a face, we need the original face id.
+ let faces_sketch_id = sketch.id;
if let SketchSurface::Face(ref face) = sketch.on {
// If we are creating a new body we need to preserve its new id.
if extrude_method != ExtrudeMethod::New {
@@ -223,7 +224,7 @@ pub(crate) async fn do_post_extrude<'a>(
args.into(),
ModelingCmd::from(mcmd::Solid3dGetExtrusionFaceInfo {
edge_id: any_edge_id,
- object_id: sketch.id,
+ object_id: faces_sketch_id,
}),
)
.await?;
diff --git a/rust/kcl-lib/tests/sweep_tag_end/artifact_commands.snap b/rust/kcl-lib/tests/sweep_tag_end/artifact_commands.snap
new file mode 100644
index 00000000000..c6ed03e763f
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/artifact_commands.snap
@@ -0,0 +1,677 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Artifact commands sweep_tag_end.kcl
+---
+{
+ "rust/kcl-lib/tests/sweep_tag_end/input.kcl": [
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "make_plane",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "x_axis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "y_axis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0
+ },
+ "size": 60.0,
+ "clobber": false,
+ "hide": true
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "start_path"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "move_path_pen",
+ "path": "[uuid]",
+ "to": {
+ "x": -5.0,
+ "y": -5.0,
+ "z": 0.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": 10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": -10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": -10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "close_path",
+ "path_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extrude",
+ "target": "[uuid]",
+ "distance": 20.0,
+ "faces": null,
+ "opposite": "None",
+ "extrude_method": "merge"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "object_bring_to_front",
+ "object_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_extrusion_face_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_adjacency_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "make_plane",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "x_axis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "y_axis": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0
+ },
+ "size": 60.0,
+ "clobber": false,
+ "hide": true
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": {
+ "x": 0.0,
+ "y": -1.0,
+ "z": 0.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "start_path"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "move_path_pen",
+ "path": "[uuid]",
+ "to": {
+ "x": 0.0,
+ "y": 20.0,
+ "z": 0.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": 2.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "tangential_arc",
+ "radius": 8.25,
+ "offset": {
+ "unit": "degrees",
+ "value": 75.0
+ }
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": -1.9318516525781368,
+ "y": 0.5176380902050403,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": null
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "start_path"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "move_path_pen",
+ "path": "[uuid]",
+ "to": {
+ "x": -5.0,
+ "y": -5.0,
+ "z": 0.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": 10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": -10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": -10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "close_path",
+ "path_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sweep",
+ "target": "[uuid]",
+ "trajectory": "[uuid]",
+ "sectional": false,
+ "tolerance": 0.0000001,
+ "relative_to": "trajectory_curve"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "object_bring_to_front",
+ "object_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_extrusion_face_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_adjacency_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "object_visible",
+ "object_id": "[uuid]",
+ "hidden": true
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": null
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "start_path"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "move_path_pen",
+ "path": "[uuid]",
+ "to": {
+ "x": -5.0,
+ "y": -5.0,
+ "z": 0.0
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": 10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": -10.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extend_path",
+ "path": "[uuid]",
+ "segment": {
+ "type": "line",
+ "end": {
+ "x": 0.0,
+ "y": -10.0,
+ "z": 0.0
+ },
+ "relative": true
+ }
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "close_path",
+ "path_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "enable_sketch_mode",
+ "entity_id": "[uuid]",
+ "ortho": false,
+ "animated": false,
+ "adjust_camera": false,
+ "planar_normal": null
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "extrude",
+ "target": "[uuid]",
+ "distance": 20.0,
+ "faces": null,
+ "opposite": "None",
+ "extrude_method": "merge"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "sketch_mode_disable"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "object_bring_to_front",
+ "object_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_extrusion_face_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ },
+ {
+ "cmdId": "[uuid]",
+ "range": [],
+ "command": {
+ "type": "solid3d_get_adjacency_info",
+ "object_id": "[uuid]",
+ "edge_id": "[uuid]"
+ }
+ }
+ ],
+ "std::appearance": [],
+ "std::array": [],
+ "std::math": [],
+ "std::prelude": [],
+ "std::sketch": [],
+ "std::solid": [],
+ "std::sweep": [],
+ "std::transform": [],
+ "std::turns": [],
+ "std::types": [],
+ "std::units": [],
+ "std::vector": []
+}
diff --git a/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap b/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap
new file mode 100644
index 00000000000..768fec264a4
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap
@@ -0,0 +1,6 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Artifact graph flowchart sweep_tag_end.kcl
+extension: md
+snapshot_kind: binary
+---
diff --git a/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap.md
new file mode 100644
index 00000000000..c8fb237002e
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/artifact_graph_flowchart.snap.md
@@ -0,0 +1,181 @@
+```mermaid
+flowchart LR
+ subgraph path2 [Path]
+ 2["Path
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 3["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 4["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 5["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 6["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 7[Solid2d]
+ end
+ subgraph path24 [Path]
+ 24["Path
[326, 356, 0]"]
+ %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
+ 25["Segment
[362, 387, 0]"]
+ %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
+ 26["Segment
[393, 475, 0]"]
+ %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
+ 27["Segment
[481, 538, 0]"]
+ %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
+ end
+ subgraph path28 [Path]
+ 28["Path
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 29["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 30["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 31["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 32["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 33[Solid2d]
+ end
+ subgraph path41 [Path]
+ 41["Path
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 42["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 43["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 44["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 45["Segment
[123, 203, 0]"]
+ %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg]
+ 46[Solid2d]
+ end
+ 1["Plane
[222, 239, 0]"]
+ %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 8["Sweep Extrusion
[264, 288, 0]"]
+ %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
+ 9[Wall]
+ %% face_code_ref=Missing NodePath
+ 10[Wall]
+ %% face_code_ref=Missing NodePath
+ 11[Wall]
+ %% face_code_ref=Missing NodePath
+ 12[Wall]
+ %% face_code_ref=Missing NodePath
+ 13["Cap Start"]
+ %% face_code_ref=Missing NodePath
+ 14["Cap End"]
+ %% face_code_ref=[ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 15["SweepEdge Opposite"]
+ 16["SweepEdge Adjacent"]
+ 17["SweepEdge Opposite"]
+ 18["SweepEdge Adjacent"]
+ 19["SweepEdge Opposite"]
+ 20["SweepEdge Adjacent"]
+ 21["SweepEdge Opposite"]
+ 22["SweepEdge Adjacent"]
+ 23["Plane
[303, 320, 0]"]
+ %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 34["Sweep Sweep
[618, 661, 0]"]
+ %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
+ 35[Wall]
+ %% face_code_ref=Missing NodePath
+ 36[Wall]
+ %% face_code_ref=Missing NodePath
+ 37[Wall]
+ %% face_code_ref=Missing NodePath
+ 38[Wall]
+ %% face_code_ref=Missing NodePath
+ 39["Cap End"]
+ %% face_code_ref=Missing NodePath
+ 40["Cap End"]
+ %% face_code_ref=[ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 47["Sweep Extrusion
[745, 769, 0]"]
+ %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
+ 48["StartSketchOnFace
[554, 593, 0]"]
+ %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 49["StartSketchOnFace
[678, 720, 0]"]
+ %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
+ 1 --- 2
+ 2 --- 3
+ 2 --- 4
+ 2 --- 5
+ 2 --- 6
+ 2 --- 7
+ 2 ---- 8
+ 3 --- 9
+ 3 x--> 13
+ 3 --- 15
+ 3 --- 16
+ 4 --- 10
+ 4 x--> 13
+ 4 --- 17
+ 4 --- 18
+ 5 --- 11
+ 5 x--> 13
+ 5 --- 19
+ 5 --- 20
+ 6 --- 12
+ 6 x--> 13
+ 6 --- 21
+ 6 --- 22
+ 8 --- 9
+ 8 --- 10
+ 8 --- 11
+ 8 --- 12
+ 8 --- 13
+ 8 --- 14
+ 8 --- 15
+ 8 --- 16
+ 8 --- 17
+ 8 --- 18
+ 8 --- 19
+ 8 --- 20
+ 8 --- 21
+ 8 --- 22
+ 9 --- 15
+ 9 --- 16
+ 22 <--x 9
+ 16 <--x 10
+ 10 --- 17
+ 10 --- 18
+ 18 <--x 11
+ 11 --- 19
+ 11 --- 20
+ 20 <--x 12
+ 12 --- 21
+ 12 --- 22
+ 15 <--x 14
+ 17 <--x 14
+ 19 <--x 14
+ 21 <--x 14
+ 14 --- 28
+ 14 <--x 48
+ 23 --- 24
+ 24 --- 25
+ 24 --- 26
+ 24 --- 27
+ 28 --- 29
+ 28 --- 30
+ 28 --- 31
+ 28 --- 32
+ 28 --- 33
+ 28 ---- 34
+ 29 --- 35
+ 30 --- 36
+ 31 --- 37
+ 32 --- 38
+ 34 --- 35
+ 34 --- 36
+ 34 --- 37
+ 34 --- 38
+ 34 --- 39
+ 34 --- 40
+ 40 --- 41
+ 40 <--x 49
+ 41 --- 42
+ 41 --- 43
+ 41 --- 44
+ 41 --- 45
+ 41 --- 46
+ 41 ---- 47
+```
diff --git a/rust/kcl-lib/tests/sweep_tag_end/ast.snap b/rust/kcl-lib/tests/sweep_tag_end/ast.snap
new file mode 100644
index 00000000000..08f57d1319d
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/ast.snap
@@ -0,0 +1,1596 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Result of parsing sweep_tag_end.kcl
+---
+{
+ "Ok": {
+ "body": [
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "fudge",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "1.5",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 1.5,
+ "suffix": "None"
+ }
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "thickness",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "2",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 2.0,
+ "suffix": "None"
+ }
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "20",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 20.0,
+ "suffix": "None"
+ }
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "angle",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "75deg",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 75.0,
+ "suffix": "Deg"
+ }
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tubeProfile",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "body": {
+ "body": [
+ {
+ "argument": {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "width",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "10",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 10.0,
+ "suffix": "None"
+ }
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "height",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "10",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 10.0,
+ "suffix": "None"
+ }
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "center",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "elements": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "0",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 0.0,
+ "suffix": "None"
+ }
+ },
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "0",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 0.0,
+ "suffix": "None"
+ }
+ }
+ ],
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "ArrayExpression",
+ "type": "ArrayExpression"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "rectangle",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "sketch",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "ReturnStatement",
+ "type": "ReturnStatement"
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "params": [
+ {
+ "type": "Parameter",
+ "identifier": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "sketch",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "labeled": false
+ }
+ ],
+ "start": 0,
+ "type": "FunctionExpression",
+ "type": "FunctionExpression"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "fn",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "lowerSection",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "body": [
+ {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "startSketchOn",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "XY",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tubeProfile",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "extrude",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "PipeExpression",
+ "type": "PipeExpression"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "trajectory",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "body": [
+ {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "startSketchOn",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "XZ",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "at",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "elements": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "0",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 0.0,
+ "suffix": "None"
+ }
+ },
+ {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ ],
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "ArrayExpression",
+ "type": "ArrayExpression"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "startProfile",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "thickness",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "yLine",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "angle",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "angle",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "radius",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "end": 0,
+ "left": {
+ "commentStart": 0,
+ "end": 0,
+ "left": {
+ "commentStart": 0,
+ "end": 0,
+ "left": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "7",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 7.0,
+ "suffix": "None"
+ }
+ },
+ "moduleId": 0,
+ "operator": "+",
+ "right": {
+ "commentStart": 0,
+ "end": 0,
+ "left": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "2",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 2.0,
+ "suffix": "None"
+ }
+ },
+ "moduleId": 0,
+ "operator": "*",
+ "right": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "thickness",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ },
+ "start": 0,
+ "type": "BinaryExpression",
+ "type": "BinaryExpression"
+ },
+ "start": 0,
+ "type": "BinaryExpression",
+ "type": "BinaryExpression"
+ },
+ "moduleId": 0,
+ "operator": "/",
+ "right": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "raw": "2",
+ "start": 0,
+ "type": "Literal",
+ "type": "Literal",
+ "value": {
+ "value": 2.0,
+ "suffix": "None"
+ }
+ },
+ "start": 0,
+ "type": "BinaryExpression",
+ "type": "BinaryExpression"
+ },
+ "moduleId": 0,
+ "operator": "*",
+ "right": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "fudge",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ },
+ "start": 0,
+ "type": "BinaryExpression",
+ "type": "BinaryExpression"
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tag",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "TagDeclarator",
+ "type": "TagDeclarator",
+ "value": "arc"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tangentialArc",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "angle",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tangentToEnd",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "arc",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "thickness",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "angledLine",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "PipeExpression",
+ "type": "PipeExpression"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "bentSection",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "body": [
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "face",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "END",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "startSketchOn",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "lowerSection",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tubeProfile",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "path",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "trajectory",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tagEnd",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "TagDeclarator",
+ "type": "TagDeclarator",
+ "value": "bentEnd"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "sweep",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "PipeExpression",
+ "type": "PipeExpression"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ },
+ {
+ "commentStart": 0,
+ "declaration": {
+ "commentStart": 0,
+ "end": 0,
+ "id": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "upperSection",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "init": {
+ "body": [
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "face",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "bentEnd",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "startSketchOn",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "bentSection",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ },
+ {
+ "arguments": [],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "tubeProfile",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ },
+ {
+ "arguments": [
+ {
+ "type": "LabeledArg",
+ "label": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "arg": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "length",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "callee": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "extrude",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name"
+ },
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "CallExpressionKw",
+ "type": "CallExpressionKw",
+ "unlabeled": null
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "PipeExpression",
+ "type": "PipeExpression"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclarator"
+ },
+ "end": 0,
+ "kind": "const",
+ "moduleId": 0,
+ "start": 0,
+ "type": "VariableDeclaration",
+ "type": "VariableDeclaration"
+ }
+ ],
+ "commentStart": 0,
+ "end": 0,
+ "innerAttrs": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "settings",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "properties": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "key": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "defaultLengthUnit",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "moduleId": 0,
+ "start": 0,
+ "type": "ObjectProperty",
+ "value": {
+ "abs_path": false,
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "name": "mm",
+ "start": 0,
+ "type": "Identifier"
+ },
+ "path": [],
+ "start": 0,
+ "type": "Name",
+ "type": "Name"
+ }
+ }
+ ],
+ "start": 0,
+ "type": "Annotation"
+ }
+ ],
+ "moduleId": 0,
+ "nonCodeMeta": {
+ "nonCodeNodes": {
+ "3": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ],
+ "4": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ],
+ "5": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ],
+ "6": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ],
+ "7": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ],
+ "8": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ]
+ },
+ "startNodes": [
+ {
+ "commentStart": 0,
+ "end": 0,
+ "moduleId": 0,
+ "start": 0,
+ "type": "NonCodeNode",
+ "value": {
+ "type": "newLine"
+ }
+ }
+ ]
+ },
+ "start": 0
+ }
+}
diff --git a/rust/kcl-lib/tests/sweep_tag_end/execution_error.snap b/rust/kcl-lib/tests/sweep_tag_end/execution_error.snap
new file mode 100644
index 00000000000..de170faf4dc
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/execution_error.snap
@@ -0,0 +1,14 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Error from executing sweep_tag_end.kcl
+---
+KCL Engine error
+
+ × engine: Internal engine error on request
+ ╭─[33:6]
+ 32 │ |> tubeProfile()
+ 33 │ |> extrude(length = length)
+ · ────────────┬───────────
+ · ╰── tests/sweep_tag_end/input.kcl
+ 34 │
+ ╰────
diff --git a/rust/kcl-lib/tests/sweep_tag_end/input.kcl b/rust/kcl-lib/tests/sweep_tag_end/input.kcl
new file mode 100644
index 00000000000..98d9e5fd65e
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/input.kcl
@@ -0,0 +1,34 @@
+@settings(defaultLengthUnit = mm)
+
+fudge = 1.5
+thickness = 2
+length = 20
+angle = 75deg
+
+fn tubeProfile(@sketch) {
+ return rectangle(
+ sketch,
+ width = 10,
+ height = 10,
+ center = [0, 0],
+ )
+}
+
+lowerSection = startSketchOn(XY)
+ |> tubeProfile()
+ |> extrude(length = length)
+
+trajectory = startSketchOn(XZ)
+ |> startProfile(at = [0, length])
+ |> yLine(length = thickness)
+ |> tangentialArc(angle = angle, radius = (7 + 2 * thickness) / 2 * fudge, tag = $arc)
+ |> angledLine(angle = tangentToEnd(arc), length = thickness)
+
+bentSection = startSketchOn(lowerSection, face = END)
+ |> tubeProfile()
+ |> sweep(path = trajectory, tagEnd = $bentEnd)
+
+upperSection = startSketchOn(bentSection, face = bentEnd)
+ |> tubeProfile()
+ |> extrude(length = length)
+
diff --git a/rust/kcl-lib/tests/sweep_tag_end/ops.snap b/rust/kcl-lib/tests/sweep_tag_end/ops.snap
new file mode 100644
index 00000000000..eb31541dabb
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/ops.snap
@@ -0,0 +1,643 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Operations executed sweep_tag_end.kcl
+---
+{
+ "rust/kcl-lib/tests/sweep_tag_end/input.kcl": [
+ {
+ "type": "VariableDeclaration",
+ "name": "fudge",
+ "value": {
+ "type": "Number",
+ "value": 1.5,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "visibility": "default",
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 0
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "thickness",
+ "value": {
+ "type": "Number",
+ "value": 2.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "visibility": "default",
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 1
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "length",
+ "value": {
+ "type": "Number",
+ "value": 20.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "visibility": "default",
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 2
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "angle",
+ "value": {
+ "type": "Number",
+ "value": 75.0,
+ "ty": {
+ "type": "Known",
+ "type": "Angle",
+ "type": "Degrees"
+ }
+ },
+ "visibility": "default",
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 3
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "StdLibCall",
+ "name": "startSketchOn",
+ "unlabeledArg": {
+ "value": {
+ "type": "Plane",
+ "artifact_id": "[uuid]"
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {},
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 5
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 0
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupBegin",
+ "group": {
+ "type": "FunctionCall",
+ "name": "tubeProfile",
+ "functionSourceRange": [],
+ "unlabeledArg": null,
+ "labeledArgs": {}
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 5
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 1
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupEnd"
+ },
+ {
+ "type": "StdLibCall",
+ "name": "extrude",
+ "unlabeledArg": {
+ "value": {
+ "type": "Sketch",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {
+ "length": {
+ "value": {
+ "type": "Number",
+ "value": 20.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "sourceRange": []
+ }
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 5
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 2
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "StdLibCall",
+ "name": "startSketchOn",
+ "unlabeledArg": {
+ "value": {
+ "type": "Plane",
+ "artifact_id": "[uuid]"
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {},
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 6
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 0
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "StdLibCall",
+ "name": "startSketchOn",
+ "unlabeledArg": {
+ "value": {
+ "type": "Solid",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {
+ "face": {
+ "value": {
+ "type": "String",
+ "value": "end"
+ },
+ "sourceRange": []
+ }
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 7
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 0
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupBegin",
+ "group": {
+ "type": "FunctionCall",
+ "name": "tubeProfile",
+ "functionSourceRange": [],
+ "unlabeledArg": null,
+ "labeledArgs": {}
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 7
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 1
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupEnd"
+ },
+ {
+ "type": "StdLibCall",
+ "name": "sweep",
+ "unlabeledArg": {
+ "value": {
+ "type": "Sketch",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {
+ "path": {
+ "value": {
+ "type": "Sketch",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "tagEnd": {
+ "value": {
+ "type": "TagDeclarator",
+ "name": "bentEnd"
+ },
+ "sourceRange": []
+ }
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 7
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 2
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "StdLibCall",
+ "name": "startSketchOn",
+ "unlabeledArg": {
+ "value": {
+ "type": "Solid",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {
+ "face": {
+ "value": {
+ "type": "TagIdentifier",
+ "value": "bentEnd",
+ "artifact_id": "[uuid]"
+ },
+ "sourceRange": []
+ }
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 8
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 0
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupBegin",
+ "group": {
+ "type": "FunctionCall",
+ "name": "tubeProfile",
+ "functionSourceRange": [],
+ "unlabeledArg": null,
+ "labeledArgs": {}
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 8
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 1
+ }
+ ]
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "GroupEnd"
+ },
+ {
+ "type": "StdLibCall",
+ "name": "extrude",
+ "unlabeledArg": {
+ "value": {
+ "type": "Sketch",
+ "value": {
+ "artifactId": "[uuid]"
+ }
+ },
+ "sourceRange": []
+ },
+ "labeledArgs": {
+ "length": {
+ "value": {
+ "type": "Number",
+ "value": 20.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "sourceRange": []
+ }
+ },
+ "nodePath": {
+ "steps": [
+ {
+ "type": "ProgramBodyItem",
+ "index": 8
+ },
+ {
+ "type": "VariableDeclarationDeclaration"
+ },
+ {
+ "type": "VariableDeclarationInit"
+ },
+ {
+ "type": "PipeBodyItem",
+ "index": 2
+ }
+ ]
+ },
+ "sourceRange": []
+ }
+ ],
+ "std::appearance": [],
+ "std::array": [],
+ "std::math": [
+ {
+ "type": "VariableDeclaration",
+ "name": "PI",
+ "value": {
+ "type": "Number",
+ "value": 3.141592653589793,
+ "ty": {
+ "type": "Unknown"
+ }
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "E",
+ "value": {
+ "type": "Number",
+ "value": 2.718281828459045,
+ "ty": {
+ "type": "Known",
+ "type": "Count"
+ }
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "TAU",
+ "value": {
+ "type": "Number",
+ "value": 6.283185307179586,
+ "ty": {
+ "type": "Known",
+ "type": "Count"
+ }
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ }
+ ],
+ "std::prelude": [
+ {
+ "type": "VariableDeclaration",
+ "name": "START",
+ "value": {
+ "type": "String",
+ "value": "start"
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "END",
+ "value": {
+ "type": "String",
+ "value": "end"
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "NEW",
+ "value": {
+ "type": "String",
+ "value": "new"
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ },
+ {
+ "type": "VariableDeclaration",
+ "name": "MERGE",
+ "value": {
+ "type": "String",
+ "value": "merge"
+ },
+ "visibility": "export",
+ "nodePath": {
+ "steps": []
+ },
+ "sourceRange": []
+ }
+ ],
+ "std::sketch": [],
+ "std::solid": [],
+ "std::sweep": [],
+ "std::transform": [],
+ "std::turns": [],
+ "std::types": [],
+ "std::units": [],
+ "std::vector": []
+}
diff --git a/rust/kcl-lib/tests/sweep_tag_end/program_memory.snap b/rust/kcl-lib/tests/sweep_tag_end/program_memory.snap
new file mode 100644
index 00000000000..90915f65e80
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/program_memory.snap
@@ -0,0 +1,1304 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Variables in memory after executing sweep_tag_end.kcl
+---
+{
+ "angle": {
+ "type": "Number",
+ "value": 75.0,
+ "ty": {
+ "type": "Known",
+ "type": "Angle",
+ "type": "Degrees"
+ }
+ },
+ "arc": {
+ "type": "TagIdentifier",
+ "type": "TagIdentifier",
+ "value": "arc"
+ },
+ "bentEnd": {
+ "type": "TagIdentifier",
+ "type": "TagIdentifier",
+ "value": "bentEnd"
+ },
+ "bentSection": {
+ "type": "Solid",
+ "value": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": {
+ "commentStart": 652,
+ "end": 660,
+ "moduleId": 0,
+ "start": 652,
+ "type": "TagDeclarator",
+ "value": "bentEnd"
+ },
+ "type": "extrudePlane"
+ }
+ ],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "type": "face",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": "end",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "solid": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ }
+ ],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "artifactId": "[uuid]",
+ "id": "[uuid]",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "type": "plane",
+ "value": "XY",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "zAxis": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0,
+ "units": {
+ "type": "Unknown"
+ }
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 20.0,
+ "startCapId": "[uuid]",
+ "endCapId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ },
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "tags": {
+ "bentEnd": {
+ "type": "TagIdentifier",
+ "value": "bentEnd"
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 0.0,
+ "startCapId": null,
+ "endCapId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ }
+ },
+ "fudge": {
+ "type": "Number",
+ "value": 1.5,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "length": {
+ "type": "Number",
+ "value": 20.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "lowerSection": {
+ "type": "Solid",
+ "value": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ }
+ ],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "artifactId": "[uuid]",
+ "id": "[uuid]",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "type": "plane",
+ "value": "XY",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "zAxis": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0,
+ "units": {
+ "type": "Unknown"
+ }
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 20.0,
+ "startCapId": "[uuid]",
+ "endCapId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ }
+ },
+ "thickness": {
+ "type": "Number",
+ "value": 2.0,
+ "ty": {
+ "type": "Default",
+ "len": {
+ "type": "Mm"
+ },
+ "angle": {
+ "type": "Degrees"
+ }
+ }
+ },
+ "trajectory": {
+ "type": "Sketch",
+ "value": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 0.0,
+ 20.0
+ ],
+ "tag": null,
+ "to": [
+ 0.0,
+ 22.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "ccw": true,
+ "center": [
+ -8.25,
+ 22.0
+ ],
+ "from": [
+ 0.0,
+ 22.0
+ ],
+ "tag": {
+ "commentStart": 470,
+ "end": 474,
+ "moduleId": 0,
+ "start": 470,
+ "type": "TagDeclarator",
+ "value": "arc"
+ },
+ "to": [
+ -6.114742877904204,
+ 29.968888066884816
+ ],
+ "type": "TangentialArc",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -6.114742877904204,
+ 29.968888066884816
+ ],
+ "tag": null,
+ "to": [
+ -8.046594530482341,
+ 30.486526157089855
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "artifactId": "[uuid]",
+ "id": "[uuid]",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "type": "plane",
+ "value": "XZ",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "zAxis": {
+ "x": 0.0,
+ "y": -1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ }
+ },
+ "start": {
+ "from": [
+ 0.0,
+ 20.0
+ ],
+ "to": [
+ 0.0,
+ 20.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "tags": {
+ "arc": {
+ "type": "TagIdentifier",
+ "value": "arc"
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ },
+ "tubeProfile": {
+ "type": "Function",
+ "value": null
+ },
+ "upperSection": {
+ "type": "Solid",
+ "value": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "type": "face",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": "bentEnd",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "solid": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": {
+ "commentStart": 652,
+ "end": 660,
+ "moduleId": 0,
+ "start": 652,
+ "type": "TagDeclarator",
+ "value": "bentEnd"
+ },
+ "type": "extrudePlane"
+ }
+ ],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "type": "face",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": "end",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "solid": {
+ "type": "Solid",
+ "id": "[uuid]",
+ "artifactId": "[uuid]",
+ "value": [
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ },
+ {
+ "faceId": "[uuid]",
+ "id": "[uuid]",
+ "sourceRange": [],
+ "tag": null,
+ "type": "extrudePlane"
+ }
+ ],
+ "sketch": {
+ "type": "Sketch",
+ "id": "[uuid]",
+ "paths": [
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ -5.0
+ ],
+ "tag": null,
+ "to": [
+ 5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ 5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ 5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ {
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ },
+ "from": [
+ -5.0,
+ 5.0
+ ],
+ "tag": null,
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "type": "ToPoint",
+ "units": {
+ "type": "Mm"
+ }
+ }
+ ],
+ "on": {
+ "artifactId": "[uuid]",
+ "id": "[uuid]",
+ "origin": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "type": "plane",
+ "value": "XY",
+ "xAxis": {
+ "x": 1.0,
+ "y": 0.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "yAxis": {
+ "x": 0.0,
+ "y": 1.0,
+ "z": 0.0,
+ "units": {
+ "type": "Unknown"
+ }
+ },
+ "zAxis": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 1.0,
+ "units": {
+ "type": "Unknown"
+ }
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 20.0,
+ "startCapId": "[uuid]",
+ "endCapId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ },
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "tags": {
+ "bentEnd": {
+ "type": "TagIdentifier",
+ "value": "bentEnd"
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 0.0,
+ "startCapId": null,
+ "endCapId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ },
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "start": {
+ "from": [
+ -5.0,
+ -5.0
+ ],
+ "to": [
+ -5.0,
+ -5.0
+ ],
+ "units": {
+ "type": "Mm"
+ },
+ "tag": null,
+ "__geoMeta": {
+ "id": "[uuid]",
+ "sourceRange": []
+ }
+ },
+ "artifactId": "[uuid]",
+ "originalId": "[uuid]",
+ "units": {
+ "type": "Mm"
+ }
+ },
+ "height": 20.0,
+ "startCapId": null,
+ "endCapId": null,
+ "units": {
+ "type": "Mm"
+ },
+ "sectional": false
+ }
+ }
+}
diff --git a/rust/kcl-lib/tests/sweep_tag_end/rendered_model.png b/rust/kcl-lib/tests/sweep_tag_end/rendered_model.png
new file mode 100644
index 00000000000..fef01effa8a
Binary files /dev/null and b/rust/kcl-lib/tests/sweep_tag_end/rendered_model.png differ
diff --git a/rust/kcl-lib/tests/sweep_tag_end/unparsed.snap b/rust/kcl-lib/tests/sweep_tag_end/unparsed.snap
new file mode 100644
index 00000000000..f66696fbfc6
--- /dev/null
+++ b/rust/kcl-lib/tests/sweep_tag_end/unparsed.snap
@@ -0,0 +1,37 @@
+---
+source: kcl-lib/src/simulation_tests.rs
+description: Result of unparsing sweep_tag_end.kcl
+---
+@settings(defaultLengthUnit = mm)
+
+fudge = 1.5
+thickness = 2
+length = 20
+angle = 75deg
+
+fn tubeProfile(@sketch) {
+ return rectangle(
+ sketch,
+ width = 10,
+ height = 10,
+ center = [0, 0],
+ )
+}
+
+lowerSection = startSketchOn(XY)
+ |> tubeProfile()
+ |> extrude(length = length)
+
+trajectory = startSketchOn(XZ)
+ |> startProfile(at = [0, length])
+ |> yLine(length = thickness)
+ |> tangentialArc(angle = angle, radius = (7 + 2 * thickness) / 2 * fudge, tag = $arc)
+ |> angledLine(angle = tangentToEnd(arc), length = thickness)
+
+bentSection = startSketchOn(lowerSection, face = END)
+ |> tubeProfile()
+ |> sweep(path = trajectory, tagEnd = $bentEnd)
+
+upperSection = startSketchOn(bentSection, face = bentEnd)
+ |> tubeProfile()
+ |> extrude(length = length)