Fix unknown property error message on sketches and solids (#7632)
* Fix unknown property error message on sketches and solids * Add suggestion for common case * Move test code in file to avoid conflict
This commit is contained in:
		@ -1046,6 +1046,16 @@ impl Node<MemberExpression> {
 | 
			
		||||
            (KclValue::Solid { value }, Property::String(prop), false) if prop == "sketch" => Ok(KclValue::Sketch {
 | 
			
		||||
                value: Box::new(value.sketch),
 | 
			
		||||
            }),
 | 
			
		||||
            (geometry @ KclValue::Solid { .. }, Property::String(prop), false) if prop == "tags" => {
 | 
			
		||||
                // This is a common mistake.
 | 
			
		||||
                Err(KclError::new_semantic(KclErrorDetails::new(
 | 
			
		||||
                    format!(
 | 
			
		||||
                        "Property `{prop}` not found on {}. You can get a solid's tags through its sketch, as in, `exampleSolid.sketch.tags`.",
 | 
			
		||||
                        geometry.human_friendly_type()
 | 
			
		||||
                    ),
 | 
			
		||||
                    vec![self.clone().into()],
 | 
			
		||||
                )))
 | 
			
		||||
            }
 | 
			
		||||
            (KclValue::Sketch { value: sk }, Property::String(prop), false) if prop == "tags" => Ok(KclValue::Object {
 | 
			
		||||
                meta: vec![Metadata {
 | 
			
		||||
                    source_range: SourceRange::from(self.clone()),
 | 
			
		||||
@ -1056,6 +1066,12 @@ impl Node<MemberExpression> {
 | 
			
		||||
                    .map(|(k, tag)| (k.to_owned(), KclValue::TagIdentifier(Box::new(tag.to_owned()))))
 | 
			
		||||
                    .collect(),
 | 
			
		||||
            }),
 | 
			
		||||
            (geometry @ (KclValue::Sketch { .. } | KclValue::Solid { .. }), Property::String(property), false) => {
 | 
			
		||||
                Err(KclError::new_semantic(KclErrorDetails::new(
 | 
			
		||||
                    format!("Property `{property}` not found on {}", geometry.human_friendly_type()),
 | 
			
		||||
                    vec![self.clone().into()],
 | 
			
		||||
                )))
 | 
			
		||||
            }
 | 
			
		||||
            (being_indexed, _, _) => Err(KclError::new_semantic(KclErrorDetails::new(
 | 
			
		||||
                format!(
 | 
			
		||||
                    "Only arrays can be indexed, but you're trying to index {}",
 | 
			
		||||
 | 
			
		||||
@ -887,6 +887,27 @@ mod invalid_index_fractional {
 | 
			
		||||
        super::execute(TEST_NAME, false).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod property_access_not_found_on_solid {
 | 
			
		||||
    const TEST_NAME: &str = "property_access_not_found_on_solid";
 | 
			
		||||
 | 
			
		||||
    /// 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
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod invalid_member_object {
 | 
			
		||||
    const TEST_NAME: &str = "invalid_member_object";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,206 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact commands property_access_not_found_on_solid.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "rust/kcl-lib/tests/property_access_not_found_on_solid/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": 0.0,
 | 
			
		||||
          "y": 0.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": 10.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "relative": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cmdId": "[uuid]",
 | 
			
		||||
      "range": [],
 | 
			
		||||
      "command": {
 | 
			
		||||
        "type": "extend_path",
 | 
			
		||||
        "path": "[uuid]",
 | 
			
		||||
        "segment": {
 | 
			
		||||
          "type": "line",
 | 
			
		||||
          "end": {
 | 
			
		||||
            "x": -20.0,
 | 
			
		||||
            "y": 0.0,
 | 
			
		||||
            "z": 0.0
 | 
			
		||||
          },
 | 
			
		||||
          "relative": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cmdId": "[uuid]",
 | 
			
		||||
      "range": [],
 | 
			
		||||
      "command": {
 | 
			
		||||
        "type": "extend_path",
 | 
			
		||||
        "path": "[uuid]",
 | 
			
		||||
        "segment": {
 | 
			
		||||
          "type": "line",
 | 
			
		||||
          "end": {
 | 
			
		||||
            "x": 10.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": 5.0,
 | 
			
		||||
        "faces": null,
 | 
			
		||||
        "opposite": "None"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "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": []
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact graph flowchart property_access_not_found_on_solid.kcl
 | 
			
		||||
extension: md
 | 
			
		||||
snapshot_kind: binary
 | 
			
		||||
---
 | 
			
		||||
@ -0,0 +1,78 @@
 | 
			
		||||
```mermaid
 | 
			
		||||
flowchart LR
 | 
			
		||||
  subgraph path2 [Path]
 | 
			
		||||
    2["Path<br>[52, 77, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 1 }]
 | 
			
		||||
    3["Segment<br>[85, 119, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 2 }]
 | 
			
		||||
    4["Segment<br>[127, 147, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 3 }]
 | 
			
		||||
    5["Segment<br>[155, 176, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 4 }]
 | 
			
		||||
    6["Segment<br>[184, 191, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 5 }]
 | 
			
		||||
    7[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  1["Plane<br>[27, 44, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 0 }]
 | 
			
		||||
  8["Sweep Extrusion<br>[199, 235, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg, PipeBodyItem { index: 6 }]
 | 
			
		||||
  9[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  10[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  11[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  12["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  13["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  14["SweepEdge Opposite"]
 | 
			
		||||
  15["SweepEdge Adjacent"]
 | 
			
		||||
  16["SweepEdge Opposite"]
 | 
			
		||||
  17["SweepEdge Adjacent"]
 | 
			
		||||
  18["SweepEdge Opposite"]
 | 
			
		||||
  19["SweepEdge Adjacent"]
 | 
			
		||||
  1 --- 2
 | 
			
		||||
  2 --- 3
 | 
			
		||||
  2 --- 4
 | 
			
		||||
  2 --- 5
 | 
			
		||||
  2 --- 6
 | 
			
		||||
  2 --- 7
 | 
			
		||||
  2 ---- 8
 | 
			
		||||
  3 --- 9
 | 
			
		||||
  3 x--> 12
 | 
			
		||||
  3 --- 14
 | 
			
		||||
  3 --- 15
 | 
			
		||||
  4 --- 10
 | 
			
		||||
  4 x--> 12
 | 
			
		||||
  4 --- 16
 | 
			
		||||
  4 --- 17
 | 
			
		||||
  5 --- 11
 | 
			
		||||
  5 x--> 12
 | 
			
		||||
  5 --- 18
 | 
			
		||||
  5 --- 19
 | 
			
		||||
  8 --- 9
 | 
			
		||||
  8 --- 10
 | 
			
		||||
  8 --- 11
 | 
			
		||||
  8 --- 12
 | 
			
		||||
  8 --- 13
 | 
			
		||||
  8 --- 14
 | 
			
		||||
  8 --- 15
 | 
			
		||||
  8 --- 16
 | 
			
		||||
  8 --- 17
 | 
			
		||||
  8 --- 18
 | 
			
		||||
  8 --- 19
 | 
			
		||||
  9 --- 14
 | 
			
		||||
  9 --- 15
 | 
			
		||||
  19 <--x 9
 | 
			
		||||
  15 <--x 10
 | 
			
		||||
  10 --- 16
 | 
			
		||||
  10 --- 17
 | 
			
		||||
  17 <--x 11
 | 
			
		||||
  11 --- 18
 | 
			
		||||
  11 --- 19
 | 
			
		||||
  14 <--x 13
 | 
			
		||||
  16 <--x 13
 | 
			
		||||
  18 <--x 13
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										780
									
								
								rust/kcl-lib/tests/property_access_not_found_on_solid/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										780
									
								
								rust/kcl-lib/tests/property_access_not_found_on_solid/ast.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,780 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Result of parsing property_access_not_found_on_solid.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "Ok": {
 | 
			
		||||
    "body": [
 | 
			
		||||
      {
 | 
			
		||||
        "commentStart": 0,
 | 
			
		||||
        "declaration": {
 | 
			
		||||
          "commentStart": 0,
 | 
			
		||||
          "end": 0,
 | 
			
		||||
          "id": {
 | 
			
		||||
            "commentStart": 0,
 | 
			
		||||
            "end": 0,
 | 
			
		||||
            "moduleId": 0,
 | 
			
		||||
            "name": "myFunction",
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "Identifier"
 | 
			
		||||
          },
 | 
			
		||||
          "init": {
 | 
			
		||||
            "body": {
 | 
			
		||||
              "body": [
 | 
			
		||||
                {
 | 
			
		||||
                  "argument": {
 | 
			
		||||
                    "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": [
 | 
			
		||||
                          {
 | 
			
		||||
                            "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"
 | 
			
		||||
                                  }
 | 
			
		||||
                                },
 | 
			
		||||
                                {
 | 
			
		||||
                                  "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": "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": "end",
 | 
			
		||||
                              "start": 0,
 | 
			
		||||
                              "type": "Identifier"
 | 
			
		||||
                            },
 | 
			
		||||
                            "arg": {
 | 
			
		||||
                              "commentStart": 0,
 | 
			
		||||
                              "elements": [
 | 
			
		||||
                                {
 | 
			
		||||
                                  "commentStart": 0,
 | 
			
		||||
                                  "end": 0,
 | 
			
		||||
                                  "moduleId": 0,
 | 
			
		||||
                                  "raw": "10",
 | 
			
		||||
                                  "start": 0,
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "value": {
 | 
			
		||||
                                    "value": 10.0,
 | 
			
		||||
                                    "suffix": "None"
 | 
			
		||||
                                  }
 | 
			
		||||
                                },
 | 
			
		||||
                                {
 | 
			
		||||
                                  "commentStart": 0,
 | 
			
		||||
                                  "end": 0,
 | 
			
		||||
                                  "moduleId": 0,
 | 
			
		||||
                                  "raw": "10",
 | 
			
		||||
                                  "start": 0,
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "value": {
 | 
			
		||||
                                    "value": 10.0,
 | 
			
		||||
                                    "suffix": "None"
 | 
			
		||||
                                  }
 | 
			
		||||
                                }
 | 
			
		||||
                              ],
 | 
			
		||||
                              "end": 0,
 | 
			
		||||
                              "moduleId": 0,
 | 
			
		||||
                              "start": 0,
 | 
			
		||||
                              "type": "ArrayExpression",
 | 
			
		||||
                              "type": "ArrayExpression"
 | 
			
		||||
                            }
 | 
			
		||||
                          },
 | 
			
		||||
                          {
 | 
			
		||||
                            "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": "seg01"
 | 
			
		||||
                            }
 | 
			
		||||
                          }
 | 
			
		||||
                        ],
 | 
			
		||||
                        "callee": {
 | 
			
		||||
                          "abs_path": false,
 | 
			
		||||
                          "commentStart": 0,
 | 
			
		||||
                          "end": 0,
 | 
			
		||||
                          "moduleId": 0,
 | 
			
		||||
                          "name": {
 | 
			
		||||
                            "commentStart": 0,
 | 
			
		||||
                            "end": 0,
 | 
			
		||||
                            "moduleId": 0,
 | 
			
		||||
                            "name": "line",
 | 
			
		||||
                            "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": "end",
 | 
			
		||||
                              "start": 0,
 | 
			
		||||
                              "type": "Identifier"
 | 
			
		||||
                            },
 | 
			
		||||
                            "arg": {
 | 
			
		||||
                              "commentStart": 0,
 | 
			
		||||
                              "elements": [
 | 
			
		||||
                                {
 | 
			
		||||
                                  "argument": {
 | 
			
		||||
                                    "commentStart": 0,
 | 
			
		||||
                                    "end": 0,
 | 
			
		||||
                                    "moduleId": 0,
 | 
			
		||||
                                    "raw": "20",
 | 
			
		||||
                                    "start": 0,
 | 
			
		||||
                                    "type": "Literal",
 | 
			
		||||
                                    "type": "Literal",
 | 
			
		||||
                                    "value": {
 | 
			
		||||
                                      "value": 20.0,
 | 
			
		||||
                                      "suffix": "None"
 | 
			
		||||
                                    }
 | 
			
		||||
                                  },
 | 
			
		||||
                                  "commentStart": 0,
 | 
			
		||||
                                  "end": 0,
 | 
			
		||||
                                  "moduleId": 0,
 | 
			
		||||
                                  "operator": "-",
 | 
			
		||||
                                  "start": 0,
 | 
			
		||||
                                  "type": "UnaryExpression",
 | 
			
		||||
                                  "type": "UnaryExpression"
 | 
			
		||||
                                },
 | 
			
		||||
                                {
 | 
			
		||||
                                  "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": "line",
 | 
			
		||||
                            "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": "end",
 | 
			
		||||
                              "start": 0,
 | 
			
		||||
                              "type": "Identifier"
 | 
			
		||||
                            },
 | 
			
		||||
                            "arg": {
 | 
			
		||||
                              "commentStart": 0,
 | 
			
		||||
                              "elements": [
 | 
			
		||||
                                {
 | 
			
		||||
                                  "commentStart": 0,
 | 
			
		||||
                                  "end": 0,
 | 
			
		||||
                                  "moduleId": 0,
 | 
			
		||||
                                  "raw": "10",
 | 
			
		||||
                                  "start": 0,
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "type": "Literal",
 | 
			
		||||
                                  "value": {
 | 
			
		||||
                                    "value": 10.0,
 | 
			
		||||
                                    "suffix": "None"
 | 
			
		||||
                                  }
 | 
			
		||||
                                },
 | 
			
		||||
                                {
 | 
			
		||||
                                  "argument": {
 | 
			
		||||
                                    "commentStart": 0,
 | 
			
		||||
                                    "end": 0,
 | 
			
		||||
                                    "moduleId": 0,
 | 
			
		||||
                                    "raw": "10",
 | 
			
		||||
                                    "start": 0,
 | 
			
		||||
                                    "type": "Literal",
 | 
			
		||||
                                    "type": "Literal",
 | 
			
		||||
                                    "value": {
 | 
			
		||||
                                      "value": 10.0,
 | 
			
		||||
                                      "suffix": "None"
 | 
			
		||||
                                    }
 | 
			
		||||
                                  },
 | 
			
		||||
                                  "commentStart": 0,
 | 
			
		||||
                                  "end": 0,
 | 
			
		||||
                                  "moduleId": 0,
 | 
			
		||||
                                  "operator": "-",
 | 
			
		||||
                                  "start": 0,
 | 
			
		||||
                                  "type": "UnaryExpression",
 | 
			
		||||
                                  "type": "UnaryExpression"
 | 
			
		||||
                                }
 | 
			
		||||
                              ],
 | 
			
		||||
                              "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": "line",
 | 
			
		||||
                            "start": 0,
 | 
			
		||||
                            "type": "Identifier"
 | 
			
		||||
                          },
 | 
			
		||||
                          "path": [],
 | 
			
		||||
                          "start": 0,
 | 
			
		||||
                          "type": "Name"
 | 
			
		||||
                        },
 | 
			
		||||
                        "commentStart": 0,
 | 
			
		||||
                        "end": 0,
 | 
			
		||||
                        "moduleId": 0,
 | 
			
		||||
                        "start": 0,
 | 
			
		||||
                        "type": "CallExpressionKw",
 | 
			
		||||
                        "type": "CallExpressionKw",
 | 
			
		||||
                        "unlabeled": null
 | 
			
		||||
                      },
 | 
			
		||||
                      {
 | 
			
		||||
                        "arguments": [],
 | 
			
		||||
                        "callee": {
 | 
			
		||||
                          "abs_path": false,
 | 
			
		||||
                          "commentStart": 0,
 | 
			
		||||
                          "end": 0,
 | 
			
		||||
                          "moduleId": 0,
 | 
			
		||||
                          "name": {
 | 
			
		||||
                            "commentStart": 0,
 | 
			
		||||
                            "end": 0,
 | 
			
		||||
                            "moduleId": 0,
 | 
			
		||||
                            "name": "close",
 | 
			
		||||
                            "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": {
 | 
			
		||||
                              "commentStart": 0,
 | 
			
		||||
                              "end": 0,
 | 
			
		||||
                              "moduleId": 0,
 | 
			
		||||
                              "raw": "5",
 | 
			
		||||
                              "start": 0,
 | 
			
		||||
                              "type": "Literal",
 | 
			
		||||
                              "type": "Literal",
 | 
			
		||||
                              "value": {
 | 
			
		||||
                                "value": 5.0,
 | 
			
		||||
                                "suffix": "None"
 | 
			
		||||
                              }
 | 
			
		||||
                            }
 | 
			
		||||
                          },
 | 
			
		||||
                          {
 | 
			
		||||
                            "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": "end01"
 | 
			
		||||
                            }
 | 
			
		||||
                          }
 | 
			
		||||
                        ],
 | 
			
		||||
                        "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"
 | 
			
		||||
                  },
 | 
			
		||||
                  "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": [],
 | 
			
		||||
            "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": "myShape",
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "Identifier"
 | 
			
		||||
          },
 | 
			
		||||
          "init": {
 | 
			
		||||
            "arguments": [],
 | 
			
		||||
            "callee": {
 | 
			
		||||
              "abs_path": false,
 | 
			
		||||
              "commentStart": 0,
 | 
			
		||||
              "end": 0,
 | 
			
		||||
              "moduleId": 0,
 | 
			
		||||
              "name": {
 | 
			
		||||
                "commentStart": 0,
 | 
			
		||||
                "end": 0,
 | 
			
		||||
                "moduleId": 0,
 | 
			
		||||
                "name": "myFunction",
 | 
			
		||||
                "start": 0,
 | 
			
		||||
                "type": "Identifier"
 | 
			
		||||
              },
 | 
			
		||||
              "path": [],
 | 
			
		||||
              "start": 0,
 | 
			
		||||
              "type": "Name"
 | 
			
		||||
            },
 | 
			
		||||
            "commentStart": 0,
 | 
			
		||||
            "end": 0,
 | 
			
		||||
            "moduleId": 0,
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "CallExpressionKw",
 | 
			
		||||
            "type": "CallExpressionKw",
 | 
			
		||||
            "unlabeled": null
 | 
			
		||||
          },
 | 
			
		||||
          "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": "sketch001",
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "Identifier"
 | 
			
		||||
          },
 | 
			
		||||
          "init": {
 | 
			
		||||
            "arguments": [
 | 
			
		||||
              {
 | 
			
		||||
                "type": "LabeledArg",
 | 
			
		||||
                "label": {
 | 
			
		||||
                  "commentStart": 0,
 | 
			
		||||
                  "end": 0,
 | 
			
		||||
                  "moduleId": 0,
 | 
			
		||||
                  "name": "face",
 | 
			
		||||
                  "start": 0,
 | 
			
		||||
                  "type": "Identifier"
 | 
			
		||||
                },
 | 
			
		||||
                "arg": {
 | 
			
		||||
                  "commentStart": 0,
 | 
			
		||||
                  "computed": false,
 | 
			
		||||
                  "end": 0,
 | 
			
		||||
                  "moduleId": 0,
 | 
			
		||||
                  "object": {
 | 
			
		||||
                    "commentStart": 0,
 | 
			
		||||
                    "computed": false,
 | 
			
		||||
                    "end": 0,
 | 
			
		||||
                    "moduleId": 0,
 | 
			
		||||
                    "object": {
 | 
			
		||||
                      "abs_path": false,
 | 
			
		||||
                      "commentStart": 0,
 | 
			
		||||
                      "end": 0,
 | 
			
		||||
                      "moduleId": 0,
 | 
			
		||||
                      "name": {
 | 
			
		||||
                        "commentStart": 0,
 | 
			
		||||
                        "end": 0,
 | 
			
		||||
                        "moduleId": 0,
 | 
			
		||||
                        "name": "myShape",
 | 
			
		||||
                        "start": 0,
 | 
			
		||||
                        "type": "Identifier"
 | 
			
		||||
                      },
 | 
			
		||||
                      "path": [],
 | 
			
		||||
                      "start": 0,
 | 
			
		||||
                      "type": "Name",
 | 
			
		||||
                      "type": "Name"
 | 
			
		||||
                    },
 | 
			
		||||
                    "property": {
 | 
			
		||||
                      "commentStart": 0,
 | 
			
		||||
                      "end": 0,
 | 
			
		||||
                      "moduleId": 0,
 | 
			
		||||
                      "name": "tags",
 | 
			
		||||
                      "start": 0,
 | 
			
		||||
                      "type": "Identifier",
 | 
			
		||||
                      "type": "Identifier"
 | 
			
		||||
                    },
 | 
			
		||||
                    "start": 0,
 | 
			
		||||
                    "type": "MemberExpression",
 | 
			
		||||
                    "type": "MemberExpression"
 | 
			
		||||
                  },
 | 
			
		||||
                  "property": {
 | 
			
		||||
                    "commentStart": 0,
 | 
			
		||||
                    "end": 0,
 | 
			
		||||
                    "moduleId": 0,
 | 
			
		||||
                    "name": "seg01",
 | 
			
		||||
                    "start": 0,
 | 
			
		||||
                    "type": "Identifier",
 | 
			
		||||
                    "type": "Identifier"
 | 
			
		||||
                  },
 | 
			
		||||
                  "start": 0,
 | 
			
		||||
                  "type": "MemberExpression",
 | 
			
		||||
                  "type": "MemberExpression"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "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": "myShape",
 | 
			
		||||
                "start": 0,
 | 
			
		||||
                "type": "Identifier"
 | 
			
		||||
              },
 | 
			
		||||
              "path": [],
 | 
			
		||||
              "start": 0,
 | 
			
		||||
              "type": "Name",
 | 
			
		||||
              "type": "Name"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "moduleId": 0,
 | 
			
		||||
          "start": 0,
 | 
			
		||||
          "type": "VariableDeclarator"
 | 
			
		||||
        },
 | 
			
		||||
        "end": 0,
 | 
			
		||||
        "kind": "const",
 | 
			
		||||
        "moduleId": 0,
 | 
			
		||||
        "start": 0,
 | 
			
		||||
        "type": "VariableDeclaration",
 | 
			
		||||
        "type": "VariableDeclaration"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "commentStart": 0,
 | 
			
		||||
    "end": 0,
 | 
			
		||||
    "moduleId": 0,
 | 
			
		||||
    "nonCodeMeta": {
 | 
			
		||||
      "nonCodeNodes": {
 | 
			
		||||
        "0": [
 | 
			
		||||
          {
 | 
			
		||||
            "commentStart": 0,
 | 
			
		||||
            "end": 0,
 | 
			
		||||
            "moduleId": 0,
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "NonCodeNode",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "type": "newLine"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "1": [
 | 
			
		||||
          {
 | 
			
		||||
            "commentStart": 0,
 | 
			
		||||
            "end": 0,
 | 
			
		||||
            "moduleId": 0,
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "NonCodeNode",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "type": "newLine"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "2": [
 | 
			
		||||
          {
 | 
			
		||||
            "commentStart": 0,
 | 
			
		||||
            "end": 0,
 | 
			
		||||
            "moduleId": 0,
 | 
			
		||||
            "start": 0,
 | 
			
		||||
            "type": "NonCodeNode",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "type": "newLine"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "startNodes": []
 | 
			
		||||
    },
 | 
			
		||||
    "start": 0
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,15 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Error from executing property_access_not_found_on_solid.kcl
 | 
			
		||||
---
 | 
			
		||||
KCL Semantic error
 | 
			
		||||
 | 
			
		||||
  × semantic: Property `tags` not found on a solid. You can get a solid's tags
 | 
			
		||||
  │ through its sketch, as in, `exampleSolid.sketch.tags`.
 | 
			
		||||
    ╭─[13:43]
 | 
			
		||||
 12 │ 
 | 
			
		||||
 13 │ sketch001 = startSketchOn(myShape, face = myShape.tags.seg01)
 | 
			
		||||
    ·                                           ──────┬─────
 | 
			
		||||
    ·                                                 ╰── tests/property_access_not_found_on_solid/input.kcl
 | 
			
		||||
 14 │ 
 | 
			
		||||
    ╰────
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
fn myFunction() {
 | 
			
		||||
  return startSketchOn(XY)
 | 
			
		||||
    |> startProfile(at = [0, 0])
 | 
			
		||||
    |> line(end = [10, 10], tag = $seg01)
 | 
			
		||||
    |> line(end = [-20, 0])
 | 
			
		||||
    |> line(end = [10, -10])
 | 
			
		||||
    |> close()
 | 
			
		||||
    |> extrude(length = 5, tagEnd = $end01)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
myShape = myFunction()
 | 
			
		||||
 | 
			
		||||
sketch001 = startSketchOn(myShape, face = myShape.tags.seg01)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										233
									
								
								rust/kcl-lib/tests/property_access_not_found_on_solid/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								rust/kcl-lib/tests/property_access_not_found_on_solid/ops.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,233 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Operations executed property_access_not_found_on_solid.kcl
 | 
			
		||||
---
 | 
			
		||||
{
 | 
			
		||||
  "rust/kcl-lib/tests/property_access_not_found_on_solid/input.kcl": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "GroupBegin",
 | 
			
		||||
      "group": {
 | 
			
		||||
        "type": "FunctionCall",
 | 
			
		||||
        "name": "myFunction",
 | 
			
		||||
        "functionSourceRange": [],
 | 
			
		||||
        "unlabeledArg": null,
 | 
			
		||||
        "labeledArgs": {}
 | 
			
		||||
      },
 | 
			
		||||
      "nodePath": {
 | 
			
		||||
        "steps": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "ProgramBodyItem",
 | 
			
		||||
            "index": 1
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationDeclaration"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationInit"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "StdLibCall",
 | 
			
		||||
      "name": "startSketchOn",
 | 
			
		||||
      "unlabeledArg": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Plane",
 | 
			
		||||
          "artifact_id": "[uuid]"
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "labeledArgs": {},
 | 
			
		||||
      "nodePath": {
 | 
			
		||||
        "steps": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "ProgramBodyItem",
 | 
			
		||||
            "index": 0
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationDeclaration"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationInit"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "FunctionExpressionBody"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "FunctionExpressionBodyItem",
 | 
			
		||||
            "index": 0
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "ReturnStatementArg"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "PipeBodyItem",
 | 
			
		||||
            "index": 0
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "StdLibCall",
 | 
			
		||||
      "name": "extrude",
 | 
			
		||||
      "unlabeledArg": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Sketch",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "artifactId": "[uuid]"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "labeledArgs": {
 | 
			
		||||
        "length": {
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "Number",
 | 
			
		||||
            "value": 5.0,
 | 
			
		||||
            "ty": {
 | 
			
		||||
              "type": "Default",
 | 
			
		||||
              "len": {
 | 
			
		||||
                "type": "Mm"
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "type": "Degrees"
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "sourceRange": []
 | 
			
		||||
        },
 | 
			
		||||
        "tagEnd": {
 | 
			
		||||
          "value": {
 | 
			
		||||
            "type": "TagDeclarator",
 | 
			
		||||
            "name": "end01"
 | 
			
		||||
          },
 | 
			
		||||
          "sourceRange": []
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "nodePath": {
 | 
			
		||||
        "steps": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "ProgramBodyItem",
 | 
			
		||||
            "index": 0
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationDeclaration"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "VariableDeclarationInit"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "FunctionExpressionBody"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "FunctionExpressionBodyItem",
 | 
			
		||||
            "index": 0
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "ReturnStatementArg"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "PipeBodyItem",
 | 
			
		||||
            "index": 6
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "GroupEnd"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "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": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "std::sketch": [],
 | 
			
		||||
  "std::solid": [],
 | 
			
		||||
  "std::sweep": [],
 | 
			
		||||
  "std::transform": [],
 | 
			
		||||
  "std::turns": [],
 | 
			
		||||
  "std::types": [],
 | 
			
		||||
  "std::units": []
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,17 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Result of unparsing property_access_not_found_on_solid.kcl
 | 
			
		||||
---
 | 
			
		||||
fn myFunction() {
 | 
			
		||||
  return startSketchOn(XY)
 | 
			
		||||
    |> startProfile(at = [0, 0])
 | 
			
		||||
    |> line(end = [10, 10], tag = $seg01)
 | 
			
		||||
    |> line(end = [-20, 0])
 | 
			
		||||
    |> line(end = [10, -10])
 | 
			
		||||
    |> close()
 | 
			
		||||
    |> extrude(length = 5, tagEnd = $end01)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
myShape = myFunction()
 | 
			
		||||
 | 
			
		||||
sketch001 = startSketchOn(myShape, face = myShape.tags.seg01)
 | 
			
		||||
		Reference in New Issue
	
	Block a user