Compare commits
	
		
			6 Commits
		
	
	
		
			achalmers/
			...
			jtran/fix-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 538f3a322f | |||
| ab4ebbe78a | |||
| fba62dab98 | |||
| a85a534d6b | |||
| 6ddbb7a31d | |||
| 051bb0589e | 
							
								
								
									
										55
									
								
								docs/kcl-std/functions/std-sketch-rectangle.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								docs/kcl-std/functions/std-sketch-rectangle.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -72,6 +72,7 @@ layout: manual | |||||||
|   * [`profileStart`](/docs/kcl-std/functions/std-sketch-profileStart) |   * [`profileStart`](/docs/kcl-std/functions/std-sketch-profileStart) | ||||||
|   * [`profileStartX`](/docs/kcl-std/functions/std-sketch-profileStartX) |   * [`profileStartX`](/docs/kcl-std/functions/std-sketch-profileStartX) | ||||||
|   * [`profileStartY`](/docs/kcl-std/functions/std-sketch-profileStartY) |   * [`profileStartY`](/docs/kcl-std/functions/std-sketch-profileStartY) | ||||||
|  |   * [`rectangle`](/docs/kcl-std/functions/std-sketch-rectangle) | ||||||
|   * [`revolve`](/docs/kcl-std/functions/std-sketch-revolve) |   * [`revolve`](/docs/kcl-std/functions/std-sketch-revolve) | ||||||
|   * [`segAng`](/docs/kcl-std/functions/std-sketch-segAng) |   * [`segAng`](/docs/kcl-std/functions/std-sketch-segAng) | ||||||
|   * [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd) |   * [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd) | ||||||
|  | |||||||
| @ -37,6 +37,7 @@ This module contains functions for creating and manipulating sketches, and makin | |||||||
| * [`profileStart`](/docs/kcl-std/functions/std-sketch-profileStart) | * [`profileStart`](/docs/kcl-std/functions/std-sketch-profileStart) | ||||||
| * [`profileStartX`](/docs/kcl-std/functions/std-sketch-profileStartX) | * [`profileStartX`](/docs/kcl-std/functions/std-sketch-profileStartX) | ||||||
| * [`profileStartY`](/docs/kcl-std/functions/std-sketch-profileStartY) | * [`profileStartY`](/docs/kcl-std/functions/std-sketch-profileStartY) | ||||||
|  | * [`rectangle`](/docs/kcl-std/functions/std-sketch-rectangle) | ||||||
| * [`revolve`](/docs/kcl-std/functions/std-sketch-revolve) | * [`revolve`](/docs/kcl-std/functions/std-sketch-revolve) | ||||||
| * [`segAng`](/docs/kcl-std/functions/std-sketch-segAng) | * [`segAng`](/docs/kcl-std/functions/std-sketch-segAng) | ||||||
| * [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd) | * [`segEnd`](/docs/kcl-std/functions/std-sketch-segEnd) | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								rust/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								rust/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -1814,7 +1814,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-bumper" | name = "kcl-bumper" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "clap", |  "clap", | ||||||
| @ -1825,7 +1825,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-derive-docs" | name = "kcl-derive-docs" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
|  "quote", |  "quote", | ||||||
| @ -1834,7 +1834,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-directory-test-macro" | name = "kcl-directory-test-macro" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "convert_case", |  "convert_case", | ||||||
|  "proc-macro2", |  "proc-macro2", | ||||||
| @ -1844,7 +1844,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-language-server" | name = "kcl-language-server" | ||||||
| version = "0.2.83" | version = "0.2.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "clap", |  "clap", | ||||||
| @ -1865,7 +1865,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-language-server-release" | name = "kcl-language-server-release" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "clap", |  "clap", | ||||||
| @ -1885,7 +1885,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-lib" | name = "kcl-lib" | ||||||
| version = "0.2.83" | version = "0.2.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "approx 0.5.1", |  "approx 0.5.1", | ||||||
| @ -1962,7 +1962,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-python-bindings" | name = "kcl-python-bindings" | ||||||
| version = "0.3.83" | version = "0.3.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "kcl-lib", |  "kcl-lib", | ||||||
| @ -1977,7 +1977,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-test-server" | name = "kcl-test-server" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "hyper 0.14.32", |  "hyper 0.14.32", | ||||||
| @ -1990,7 +1990,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-to-core" | name = "kcl-to-core" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "async-trait", |  "async-trait", | ||||||
| @ -2004,7 +2004,7 @@ dependencies = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "kcl-wasm-lib" | name = "kcl-wasm-lib" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "anyhow", |  "anyhow", | ||||||
|  "bson", |  "bson", | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
|  |  | ||||||
| [package] | [package] | ||||||
| name = "kcl-bumper" | name = "kcl-bumper" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| repository = "https://github.com/KittyCAD/modeling-api" | repository = "https://github.com/KittyCAD/modeling-api" | ||||||
| rust-version = "1.76" | rust-version = "1.76" | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-derive-docs" | name = "kcl-derive-docs" | ||||||
| description = "A tool for generating documentation from Rust derive macros" | description = "A tool for generating documentation from Rust derive macros" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license = "MIT" | license = "MIT" | ||||||
| repository = "https://github.com/KittyCAD/modeling-app" | repository = "https://github.com/KittyCAD/modeling-app" | ||||||
|  | |||||||
| @ -100,6 +100,8 @@ pub const TEST_NAMES: &[&str] = &[ | |||||||
|     "std-sketch-planeOf-0", |     "std-sketch-planeOf-0", | ||||||
|     "std-sketch-circle-0", |     "std-sketch-circle-0", | ||||||
|     "std-sketch-circle-1", |     "std-sketch-circle-1", | ||||||
|  |     "std-sketch-rectangle-0", | ||||||
|  |     "std-sketch-rectangle-1", | ||||||
|     "std-sketch-patternTransform2d-0", |     "std-sketch-patternTransform2d-0", | ||||||
|     "std-sketch-revolve-0", |     "std-sketch-revolve-0", | ||||||
|     "std-sketch-revolve-1", |     "std-sketch-revolve-1", | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-directory-test-macro" | name = "kcl-directory-test-macro" | ||||||
| description = "A tool for generating tests from a directory of kcl files" | description = "A tool for generating tests from a directory of kcl files" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license = "MIT" | license = "MIT" | ||||||
| repository = "https://github.com/KittyCAD/modeling-app" | repository = "https://github.com/KittyCAD/modeling-app" | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-language-server-release" | name = "kcl-language-server-release" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| authors = ["KittyCAD Inc <kcl@kittycad.io>"] | authors = ["KittyCAD Inc <kcl@kittycad.io>"] | ||||||
| publish = false | publish = false | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| name = "kcl-language-server" | name = "kcl-language-server" | ||||||
| description = "A language server for KCL." | description = "A language server for KCL." | ||||||
| authors = ["KittyCAD Inc <kcl@kittycad.io>"] | authors = ["KittyCAD Inc <kcl@kittycad.io>"] | ||||||
| version = "0.2.83" | version = "0.2.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license = "MIT" | license = "MIT" | ||||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-lib" | name = "kcl-lib" | ||||||
| description = "KittyCAD Language implementation and tools" | description = "KittyCAD Language implementation and tools" | ||||||
| version = "0.2.83" | version = "0.2.84" | ||||||
| edition = "2024" | edition = "2024" | ||||||
| license = "MIT" | license = "MIT" | ||||||
| repository = "https://github.com/KittyCAD/modeling-app" | repository = "https://github.com/KittyCAD/modeling-app" | ||||||
|  | |||||||
| @ -864,6 +864,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.execute(exec_state, ctx).await, |             BinaryPart::CallExpressionKw(call_expression) => call_expression.execute(exec_state, ctx).await, | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.get_result(exec_state, ctx).await, |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.get_result(exec_state, ctx).await, | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.get_result(exec_state, ctx).await, |             BinaryPart::MemberExpression(member_expression) => member_expression.get_result(exec_state, ctx).await, | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.execute(exec_state, ctx).await, | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.execute(exec_state, ctx).await, | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.execute(exec_state, ctx).await, | ||||||
|             BinaryPart::IfExpression(e) => e.get_result(exec_state, ctx).await, |             BinaryPart::IfExpression(e) => e.get_result(exec_state, ctx).await, | ||||||
|             BinaryPart::AscribedExpression(e) => e.get_result(exec_state, ctx).await, |             BinaryPart::AscribedExpression(e) => e.get_result(exec_state, ctx).await, | ||||||
|         } |         } | ||||||
| @ -1046,6 +1049,16 @@ impl Node<MemberExpression> { | |||||||
|             (KclValue::Solid { value }, Property::String(prop), false) if prop == "sketch" => Ok(KclValue::Sketch { |             (KclValue::Solid { value }, Property::String(prop), false) if prop == "sketch" => Ok(KclValue::Sketch { | ||||||
|                 value: Box::new(value.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 { |             (KclValue::Sketch { value: sk }, Property::String(prop), false) if prop == "tags" => Ok(KclValue::Object { | ||||||
|                 meta: vec![Metadata { |                 meta: vec![Metadata { | ||||||
|                     source_range: SourceRange::from(self.clone()), |                     source_range: SourceRange::from(self.clone()), | ||||||
| @ -1056,6 +1069,12 @@ impl Node<MemberExpression> { | |||||||
|                     .map(|(k, tag)| (k.to_owned(), KclValue::TagIdentifier(Box::new(tag.to_owned())))) |                     .map(|(k, tag)| (k.to_owned(), KclValue::TagIdentifier(Box::new(tag.to_owned())))) | ||||||
|                     .collect(), |                     .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( |             (being_indexed, _, _) => Err(KclError::new_semantic(KclErrorDetails::new( | ||||||
|                 format!( |                 format!( | ||||||
|                     "Only arrays can be indexed, but you're trying to index {}", |                     "Only arrays can be indexed, but you're trying to index {}", | ||||||
|  | |||||||
| @ -1031,7 +1031,7 @@ pub struct GeoMeta { | |||||||
| #[ts(export)] | #[ts(export)] | ||||||
| #[serde(tag = "type")] | #[serde(tag = "type")] | ||||||
| pub enum Path { | pub enum Path { | ||||||
|     /// A path that goes to a point. |     /// A straight line which ends at the given point. | ||||||
|     ToPoint { |     ToPoint { | ||||||
|         #[serde(flatten)] |         #[serde(flatten)] | ||||||
|         base: BasePath, |         base: BasePath, | ||||||
|  | |||||||
| @ -149,6 +149,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::UnaryExpression(unary_expression) => { |             BinaryPart::UnaryExpression(unary_expression) => { | ||||||
|                 unary_expression.get_hover_value_for_position(pos, code, opts) |                 unary_expression.get_hover_value_for_position(pos, code, opts) | ||||||
|             } |             } | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.get_hover_value_for_position(pos, code, opts), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.get_hover_value_for_position(pos, code, opts), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.get_hover_value_for_position(pos, code, opts), | ||||||
|             BinaryPart::IfExpression(e) => e.get_hover_value_for_position(pos, code, opts), |             BinaryPart::IfExpression(e) => e.get_hover_value_for_position(pos, code, opts), | ||||||
|             BinaryPart::AscribedExpression(e) => e.expr.get_hover_value_for_position(pos, code, opts), |             BinaryPart::AscribedExpression(e) => e.expr.get_hover_value_for_position(pos, code, opts), | ||||||
|             BinaryPart::MemberExpression(member_expression) => { |             BinaryPart::MemberExpression(member_expression) => { | ||||||
|  | |||||||
| @ -161,6 +161,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(ce) => ce.compute_digest(), |             BinaryPart::CallExpressionKw(ce) => ce.compute_digest(), | ||||||
|             BinaryPart::UnaryExpression(ue) => ue.compute_digest(), |             BinaryPart::UnaryExpression(ue) => ue.compute_digest(), | ||||||
|             BinaryPart::MemberExpression(me) => me.compute_digest(), |             BinaryPart::MemberExpression(me) => me.compute_digest(), | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.compute_digest(), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.compute_digest(), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.compute_digest(), | ||||||
|             BinaryPart::IfExpression(e) => e.compute_digest(), |             BinaryPart::IfExpression(e) => e.compute_digest(), | ||||||
|             BinaryPart::AscribedExpression(e) => e.compute_digest(), |             BinaryPart::AscribedExpression(e) => e.compute_digest(), | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -51,6 +51,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.module_id, |             BinaryPart::CallExpressionKw(call_expression) => call_expression.module_id, | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.module_id, |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.module_id, | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.module_id, |             BinaryPart::MemberExpression(member_expression) => member_expression.module_id, | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.module_id, | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.module_id, | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.module_id, | ||||||
|             BinaryPart::IfExpression(e) => e.module_id, |             BinaryPart::IfExpression(e) => e.module_id, | ||||||
|             BinaryPart::AscribedExpression(e) => e.module_id, |             BinaryPart::AscribedExpression(e) => e.module_id, | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -1214,6 +1214,9 @@ impl From<&BinaryPart> for Expr { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => Expr::CallExpressionKw(call_expression.clone()), |             BinaryPart::CallExpressionKw(call_expression) => Expr::CallExpressionKw(call_expression.clone()), | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => Expr::UnaryExpression(unary_expression.clone()), |             BinaryPart::UnaryExpression(unary_expression) => Expr::UnaryExpression(unary_expression.clone()), | ||||||
|             BinaryPart::MemberExpression(member_expression) => Expr::MemberExpression(member_expression.clone()), |             BinaryPart::MemberExpression(member_expression) => Expr::MemberExpression(member_expression.clone()), | ||||||
|  |             BinaryPart::ArrayExpression(e) => Expr::ArrayExpression(e.clone()), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => Expr::ArrayRangeExpression(e.clone()), | ||||||
|  |             BinaryPart::ObjectExpression(e) => Expr::ObjectExpression(e.clone()), | ||||||
|             BinaryPart::IfExpression(e) => Expr::IfExpression(e.clone()), |             BinaryPart::IfExpression(e) => Expr::IfExpression(e.clone()), | ||||||
|             BinaryPart::AscribedExpression(e) => Expr::AscribedExpression(e.clone()), |             BinaryPart::AscribedExpression(e) => Expr::AscribedExpression(e.clone()), | ||||||
|         } |         } | ||||||
| @ -1281,6 +1284,9 @@ pub enum BinaryPart { | |||||||
|     CallExpressionKw(BoxNode<CallExpressionKw>), |     CallExpressionKw(BoxNode<CallExpressionKw>), | ||||||
|     UnaryExpression(BoxNode<UnaryExpression>), |     UnaryExpression(BoxNode<UnaryExpression>), | ||||||
|     MemberExpression(BoxNode<MemberExpression>), |     MemberExpression(BoxNode<MemberExpression>), | ||||||
|  |     ArrayExpression(BoxNode<ArrayExpression>), | ||||||
|  |     ArrayRangeExpression(BoxNode<ArrayRangeExpression>), | ||||||
|  |     ObjectExpression(BoxNode<ObjectExpression>), | ||||||
|     IfExpression(BoxNode<IfExpression>), |     IfExpression(BoxNode<IfExpression>), | ||||||
|     AscribedExpression(BoxNode<AscribedExpression>), |     AscribedExpression(BoxNode<AscribedExpression>), | ||||||
| } | } | ||||||
| @ -1307,6 +1313,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.get_constraint_level(), |             BinaryPart::CallExpressionKw(call_expression) => call_expression.get_constraint_level(), | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.get_constraint_level(), |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.get_constraint_level(), | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.get_constraint_level(), |             BinaryPart::MemberExpression(member_expression) => member_expression.get_constraint_level(), | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.get_constraint_level(), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.get_constraint_level(), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.get_constraint_level(), | ||||||
|             BinaryPart::IfExpression(e) => e.get_constraint_level(), |             BinaryPart::IfExpression(e) => e.get_constraint_level(), | ||||||
|             BinaryPart::AscribedExpression(e) => e.expr.get_constraint_level(), |             BinaryPart::AscribedExpression(e) => e.expr.get_constraint_level(), | ||||||
|         } |         } | ||||||
| @ -1320,6 +1329,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.replace_value(source_range, new_value), |             BinaryPart::CallExpressionKw(call_expression) => call_expression.replace_value(source_range, new_value), | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.replace_value(source_range, new_value), |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.replace_value(source_range, new_value), | ||||||
|             BinaryPart::MemberExpression(_) => {} |             BinaryPart::MemberExpression(_) => {} | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.replace_value(source_range, new_value), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.replace_value(source_range, new_value), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.replace_value(source_range, new_value), | ||||||
|             BinaryPart::IfExpression(e) => e.replace_value(source_range, new_value), |             BinaryPart::IfExpression(e) => e.replace_value(source_range, new_value), | ||||||
|             BinaryPart::AscribedExpression(e) => e.expr.replace_value(source_range, new_value), |             BinaryPart::AscribedExpression(e) => e.expr.replace_value(source_range, new_value), | ||||||
|         } |         } | ||||||
| @ -1333,6 +1345,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.start, |             BinaryPart::CallExpressionKw(call_expression) => call_expression.start, | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.start, |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.start, | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.start, |             BinaryPart::MemberExpression(member_expression) => member_expression.start, | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.start, | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.start, | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.start, | ||||||
|             BinaryPart::IfExpression(e) => e.start, |             BinaryPart::IfExpression(e) => e.start, | ||||||
|             BinaryPart::AscribedExpression(e) => e.start, |             BinaryPart::AscribedExpression(e) => e.start, | ||||||
|         } |         } | ||||||
| @ -1346,6 +1361,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.end, |             BinaryPart::CallExpressionKw(call_expression) => call_expression.end, | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.end, |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.end, | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.end, |             BinaryPart::MemberExpression(member_expression) => member_expression.end, | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.end, | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.end, | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.end, | ||||||
|             BinaryPart::IfExpression(e) => e.end, |             BinaryPart::IfExpression(e) => e.end, | ||||||
|             BinaryPart::AscribedExpression(e) => e.end, |             BinaryPart::AscribedExpression(e) => e.end, | ||||||
|         } |         } | ||||||
| @ -1360,6 +1378,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::CallExpressionKw(call_expression) => call_expression.rename_identifiers(old_name, new_name), |             BinaryPart::CallExpressionKw(call_expression) => call_expression.rename_identifiers(old_name, new_name), | ||||||
|             BinaryPart::UnaryExpression(unary_expression) => unary_expression.rename_identifiers(old_name, new_name), |             BinaryPart::UnaryExpression(unary_expression) => unary_expression.rename_identifiers(old_name, new_name), | ||||||
|             BinaryPart::MemberExpression(member_expression) => member_expression.rename_identifiers(old_name, new_name), |             BinaryPart::MemberExpression(member_expression) => member_expression.rename_identifiers(old_name, new_name), | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.rename_identifiers(old_name, new_name), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.rename_identifiers(old_name, new_name), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.rename_identifiers(old_name, new_name), | ||||||
|             BinaryPart::IfExpression(if_expression) => if_expression.rename_identifiers(old_name, new_name), |             BinaryPart::IfExpression(if_expression) => if_expression.rename_identifiers(old_name, new_name), | ||||||
|             BinaryPart::AscribedExpression(e) => e.expr.rename_identifiers(old_name, new_name), |             BinaryPart::AscribedExpression(e) => e.expr.rename_identifiers(old_name, new_name), | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -624,9 +624,6 @@ fn operand(i: &mut TokenSlice) -> ModalResult<BinaryPart> { | |||||||
|                 Expr::FunctionExpression(_) |                 Expr::FunctionExpression(_) | ||||||
|                 | Expr::PipeExpression(_) |                 | Expr::PipeExpression(_) | ||||||
|                 | Expr::PipeSubstitution(_) |                 | Expr::PipeSubstitution(_) | ||||||
|                 | Expr::ArrayExpression(_) |  | ||||||
|                 | Expr::ArrayRangeExpression(_) |  | ||||||
|                 | Expr::ObjectExpression(_) |  | ||||||
|                 | Expr::LabelledExpression(..) => return Err(CompilationError::fatal(source_range, TODO_783)), |                 | Expr::LabelledExpression(..) => return Err(CompilationError::fatal(source_range, TODO_783)), | ||||||
|                 Expr::None(_) => { |                 Expr::None(_) => { | ||||||
|                     return Err(CompilationError::fatal( |                     return Err(CompilationError::fatal( | ||||||
| @ -652,6 +649,9 @@ fn operand(i: &mut TokenSlice) -> ModalResult<BinaryPart> { | |||||||
|                 Expr::BinaryExpression(x) => BinaryPart::BinaryExpression(x), |                 Expr::BinaryExpression(x) => BinaryPart::BinaryExpression(x), | ||||||
|                 Expr::CallExpressionKw(x) => BinaryPart::CallExpressionKw(x), |                 Expr::CallExpressionKw(x) => BinaryPart::CallExpressionKw(x), | ||||||
|                 Expr::MemberExpression(x) => BinaryPart::MemberExpression(x), |                 Expr::MemberExpression(x) => BinaryPart::MemberExpression(x), | ||||||
|  |                 Expr::ArrayExpression(x) => BinaryPart::ArrayExpression(x), | ||||||
|  |                 Expr::ArrayRangeExpression(x) => BinaryPart::ArrayRangeExpression(x), | ||||||
|  |                 Expr::ObjectExpression(x) => BinaryPart::ObjectExpression(x), | ||||||
|                 Expr::IfExpression(x) => BinaryPart::IfExpression(x), |                 Expr::IfExpression(x) => BinaryPart::IfExpression(x), | ||||||
|                 Expr::AscribedExpression(x) => BinaryPart::AscribedExpression(x), |                 Expr::AscribedExpression(x) => BinaryPart::AscribedExpression(x), | ||||||
|             }; |             }; | ||||||
| @ -2115,6 +2115,8 @@ fn possible_operands(i: &mut TokenSlice) -> ModalResult<Expr> { | |||||||
|         literal.map(Expr::Literal), |         literal.map(Expr::Literal), | ||||||
|         fn_call_kw.map(Box::new).map(Expr::CallExpressionKw), |         fn_call_kw.map(Box::new).map(Expr::CallExpressionKw), | ||||||
|         name.map(Box::new).map(Expr::Name), |         name.map(Box::new).map(Expr::Name), | ||||||
|  |         array, | ||||||
|  |         object.map(Box::new).map(Expr::ObjectExpression), | ||||||
|         binary_expr_in_parens.map(Box::new).map(Expr::BinaryExpression), |         binary_expr_in_parens.map(Box::new).map(Expr::BinaryExpression), | ||||||
|         unnecessarily_bracketed, |         unnecessarily_bracketed, | ||||||
|     )) |     )) | ||||||
| @ -3398,6 +3400,27 @@ mod tests { | |||||||
|         operand.parse(tokens).unwrap(); |         operand.parse(tokens).unwrap(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn parse_binary_operator_on_array() { | ||||||
|  |         let tokens = crate::parsing::token::lex("[0] + 1", ModuleId::default()).unwrap(); | ||||||
|  |         let tokens = tokens.as_slice(); | ||||||
|  |         binary_expression.parse(tokens).unwrap(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn parse_binary_operator_on_object() { | ||||||
|  |         let tokens = crate::parsing::token::lex("{ a = 1 } + 2", ModuleId::default()).unwrap(); | ||||||
|  |         let tokens = tokens.as_slice(); | ||||||
|  |         binary_expression.parse(tokens).unwrap(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn parse_call_array_operator() { | ||||||
|  |         let tokens = crate::parsing::token::lex("f([0] + 1)", ModuleId::default()).unwrap(); | ||||||
|  |         let tokens = tokens.as_slice(); | ||||||
|  |         fn_call_kw.parse(tokens).unwrap(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn weird_program_just_a_pipe() { |     fn weird_program_just_a_pipe() { | ||||||
|         let tokens = crate::parsing::token::lex("|", ModuleId::default()).unwrap(); |         let tokens = crate::parsing::token::lex("|", ModuleId::default()).unwrap(); | ||||||
|  | |||||||
| @ -779,6 +779,27 @@ mod add_lots { | |||||||
|         super::execute(TEST_NAME, false).await |         super::execute(TEST_NAME, false).await | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | mod add_arrays { | ||||||
|  |     const TEST_NAME: &str = "add_arrays"; | ||||||
|  |  | ||||||
|  |     /// 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, false).await | ||||||
|  |     } | ||||||
|  | } | ||||||
| mod argument_error { | mod argument_error { | ||||||
|     //! The argument error points to the problematic argument in the call site, |     //! The argument error points to the problematic argument in the call site, | ||||||
|     //! not the function definition that the variable points to. |     //! not the function definition that the variable points to. | ||||||
| @ -887,6 +908,27 @@ mod invalid_index_fractional { | |||||||
|         super::execute(TEST_NAME, false).await |         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 { | mod invalid_member_object { | ||||||
|     const TEST_NAME: &str = "invalid_member_object"; |     const TEST_NAME: &str = "invalid_member_object"; | ||||||
|  |  | ||||||
| @ -3632,6 +3674,48 @@ mod non_english_identifiers { | |||||||
|         super::execute(TEST_NAME, true).await |         super::execute(TEST_NAME, true).await | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | mod rect { | ||||||
|  |     const TEST_NAME: &str = "rect"; | ||||||
|  |  | ||||||
|  |     /// 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 rect_helper { | ||||||
|  |     const TEST_NAME: &str = "rect_helper"; | ||||||
|  |  | ||||||
|  |     /// 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 plane_of { | mod plane_of { | ||||||
|     const TEST_NAME: &str = "plane_of"; |     const TEST_NAME: &str = "plane_of"; | ||||||
|  |  | ||||||
|  | |||||||
| @ -256,6 +256,10 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp | |||||||
|             |e, a| Box::pin(crate::std::shapes::circle(e, a)), |             |e, a| Box::pin(crate::std::shapes::circle(e, a)), | ||||||
|             StdFnProps::default("std::sketch::circle"), |             StdFnProps::default("std::sketch::circle"), | ||||||
|         ), |         ), | ||||||
|  |         ("sketch", "rectangle") => ( | ||||||
|  |             |e, a| Box::pin(crate::std::shapes::rectangle(e, a)), | ||||||
|  |             StdFnProps::default("std::sketch::rectangle"), | ||||||
|  |         ), | ||||||
|         ("sketch", "planeOf") => ( |         ("sketch", "planeOf") => ( | ||||||
|             |e, a| Box::pin(crate::std::planes::plane_of(e, a)), |             |e, a| Box::pin(crate::std::planes::plane_of(e, a)), | ||||||
|             StdFnProps::default("std::sketch::planeOf"), |             StdFnProps::default("std::sketch::planeOf"), | ||||||
|  | |||||||
| @ -38,6 +38,119 @@ pub enum SketchOrSurface { | |||||||
|     Sketch(Box<Sketch>), |     Sketch(Box<Sketch>), | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /// Sketch a rectangle. | ||||||
|  | pub async fn rectangle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { | ||||||
|  |     let sketch_or_surface = | ||||||
|  |         args.get_unlabeled_kw_arg("sketchOrSurface", &RuntimeType::sketch_or_surface(), exec_state)?; | ||||||
|  |     let center = args.get_kw_arg_opt("center", &RuntimeType::point2d(), exec_state)?; | ||||||
|  |     let corner = args.get_kw_arg_opt("corner", &RuntimeType::point2d(), exec_state)?; | ||||||
|  |     let width: TyF64 = args.get_kw_arg("width", &RuntimeType::length(), exec_state)?; | ||||||
|  |     let height: TyF64 = args.get_kw_arg("height", &RuntimeType::length(), exec_state)?; | ||||||
|  |  | ||||||
|  |     inner_rectangle(sketch_or_surface, center, corner, width, height, exec_state, args) | ||||||
|  |         .await | ||||||
|  |         .map(Box::new) | ||||||
|  |         .map(|value| KclValue::Sketch { value }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async fn inner_rectangle( | ||||||
|  |     sketch_or_surface: SketchOrSurface, | ||||||
|  |     center: Option<[TyF64; 2]>, | ||||||
|  |     corner: Option<[TyF64; 2]>, | ||||||
|  |     width: TyF64, | ||||||
|  |     height: TyF64, | ||||||
|  |     exec_state: &mut ExecState, | ||||||
|  |     args: Args, | ||||||
|  | ) -> Result<Sketch, KclError> { | ||||||
|  |     let sketch_surface = match sketch_or_surface { | ||||||
|  |         SketchOrSurface::SketchSurface(surface) => surface, | ||||||
|  |         SketchOrSurface::Sketch(s) => s.on, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // Find the corner in the negative quadrant | ||||||
|  |     let (ty, corner) = match (center, corner) { | ||||||
|  |         (Some(center), None) => ( | ||||||
|  |             center[0].ty, | ||||||
|  |             [center[0].n - width.n / 2.0, center[1].n - height.n / 2.0], | ||||||
|  |         ), | ||||||
|  |         (None, Some(corner)) => (corner[0].ty, [corner[0].n, corner[1].n]), | ||||||
|  |         (None, None) => { | ||||||
|  |             return Err(KclError::new_semantic(KclErrorDetails::new( | ||||||
|  |                 "You must supply either `corner` or `center` arguments, but not both".to_string(), | ||||||
|  |                 vec![args.source_range], | ||||||
|  |             ))); | ||||||
|  |         } | ||||||
|  |         (Some(_), Some(_)) => { | ||||||
|  |             return Err(KclError::new_semantic(KclErrorDetails::new( | ||||||
|  |                 "You must supply either `corner` or `center` arguments, but not both".to_string(), | ||||||
|  |                 vec![args.source_range], | ||||||
|  |             ))); | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     let units = ty.expect_length(); | ||||||
|  |     let corner_t = [TyF64::new(corner[0], ty), TyF64::new(corner[1], ty)]; | ||||||
|  |  | ||||||
|  |     // Start the sketch then draw the 4 lines. | ||||||
|  |     let sketch = | ||||||
|  |         crate::std::sketch::inner_start_profile(sketch_surface, corner_t, None, exec_state, args.clone()).await?; | ||||||
|  |     let sketch_id = sketch.id; | ||||||
|  |     let deltas = [[width.n, 0.0], [0.0, height.n], [-width.n, 0.0], [0.0, -height.n]]; | ||||||
|  |     let ids = [ | ||||||
|  |         exec_state.next_uuid(), | ||||||
|  |         exec_state.next_uuid(), | ||||||
|  |         exec_state.next_uuid(), | ||||||
|  |         exec_state.next_uuid(), | ||||||
|  |     ]; | ||||||
|  |     for (id, delta) in ids.iter().copied().zip(deltas) { | ||||||
|  |         exec_state | ||||||
|  |             .batch_modeling_cmd( | ||||||
|  |                 ModelingCmdMeta::from_args_id(&args, id), | ||||||
|  |                 ModelingCmd::from(mcmd::ExtendPath { | ||||||
|  |                     path: sketch.id.into(), | ||||||
|  |                     segment: PathSegment::Line { | ||||||
|  |                         end: KPoint2d::from(untyped_point_to_mm(delta, units)) | ||||||
|  |                             .with_z(0.0) | ||||||
|  |                             .map(LengthUnit), | ||||||
|  |                         relative: true, | ||||||
|  |                     }, | ||||||
|  |                 }), | ||||||
|  |             ) | ||||||
|  |             .await?; | ||||||
|  |     } | ||||||
|  |     exec_state | ||||||
|  |         .batch_modeling_cmd( | ||||||
|  |             ModelingCmdMeta::from_args_id(&args, sketch_id), | ||||||
|  |             ModelingCmd::from(mcmd::ClosePath { path_id: sketch.id }), | ||||||
|  |         ) | ||||||
|  |         .await?; | ||||||
|  |  | ||||||
|  |     // Update the sketch in KCL memory. | ||||||
|  |     let mut new_sketch = sketch.clone(); | ||||||
|  |     fn add(a: [f64; 2], b: [f64; 2]) -> [f64; 2] { | ||||||
|  |         [a[0] + b[0], a[1] + b[1]] | ||||||
|  |     } | ||||||
|  |     let a = (corner, add(corner, deltas[0])); | ||||||
|  |     let b = (a.1, add(a.1, deltas[1])); | ||||||
|  |     let c = (b.1, add(b.1, deltas[2])); | ||||||
|  |     let d = (c.1, add(c.1, deltas[3])); | ||||||
|  |     for (id, (from, to)) in ids.into_iter().zip([a, b, c, d]) { | ||||||
|  |         let current_path = Path::ToPoint { | ||||||
|  |             base: BasePath { | ||||||
|  |                 from, | ||||||
|  |                 to, | ||||||
|  |                 tag: None, | ||||||
|  |                 units, | ||||||
|  |                 geo_meta: GeoMeta { | ||||||
|  |                     id, | ||||||
|  |                     metadata: args.source_range.into(), | ||||||
|  |                 }, | ||||||
|  |             }, | ||||||
|  |         }; | ||||||
|  |         new_sketch.paths.push(current_path); | ||||||
|  |     } | ||||||
|  |     Ok(new_sketch) | ||||||
|  | } | ||||||
|  |  | ||||||
| /// Sketch a circle. | /// Sketch a circle. | ||||||
| pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { | pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { | ||||||
|     let sketch_or_surface = |     let sketch_or_surface = | ||||||
|  | |||||||
| @ -363,6 +363,9 @@ impl BinaryPart { | |||||||
|             BinaryPart::MemberExpression(member_expression) => { |             BinaryPart::MemberExpression(member_expression) => { | ||||||
|                 member_expression.recast(options, indentation_level, ctxt) |                 member_expression.recast(options, indentation_level, ctxt) | ||||||
|             } |             } | ||||||
|  |             BinaryPart::ArrayExpression(e) => e.recast(options, indentation_level, ctxt), | ||||||
|  |             BinaryPart::ArrayRangeExpression(e) => e.recast(options, indentation_level, ctxt), | ||||||
|  |             BinaryPart::ObjectExpression(e) => e.recast(options, indentation_level, ctxt), | ||||||
|             BinaryPart::IfExpression(e) => e.recast(options, indentation_level, ExprContext::Other), |             BinaryPart::IfExpression(e) => e.recast(options, indentation_level, ExprContext::Other), | ||||||
|             BinaryPart::AscribedExpression(e) => e.recast(options, indentation_level, ExprContext::Other), |             BinaryPart::AscribedExpression(e) => e.recast(options, indentation_level, ExprContext::Other), | ||||||
|         } |         } | ||||||
| @ -745,6 +748,9 @@ impl UnaryExpression { | |||||||
|             BinaryPart::Literal(_) |             BinaryPart::Literal(_) | ||||||
|             | BinaryPart::Name(_) |             | BinaryPart::Name(_) | ||||||
|             | BinaryPart::MemberExpression(_) |             | BinaryPart::MemberExpression(_) | ||||||
|  |             | BinaryPart::ArrayExpression(_) | ||||||
|  |             | BinaryPart::ArrayRangeExpression(_) | ||||||
|  |             | BinaryPart::ObjectExpression(_) | ||||||
|             | BinaryPart::IfExpression(_) |             | BinaryPart::IfExpression(_) | ||||||
|             | BinaryPart::AscribedExpression(_) |             | BinaryPart::AscribedExpression(_) | ||||||
|             | BinaryPart::CallExpressionKw(_) => { |             | BinaryPart::CallExpressionKw(_) => { | ||||||
|  | |||||||
| @ -220,6 +220,9 @@ impl<'tree> From<&'tree types::BinaryPart> for Node<'tree> { | |||||||
|             types::BinaryPart::CallExpressionKw(ce) => ce.as_ref().into(), |             types::BinaryPart::CallExpressionKw(ce) => ce.as_ref().into(), | ||||||
|             types::BinaryPart::UnaryExpression(ue) => ue.as_ref().into(), |             types::BinaryPart::UnaryExpression(ue) => ue.as_ref().into(), | ||||||
|             types::BinaryPart::MemberExpression(me) => me.as_ref().into(), |             types::BinaryPart::MemberExpression(me) => me.as_ref().into(), | ||||||
|  |             types::BinaryPart::ArrayExpression(e) => e.as_ref().into(), | ||||||
|  |             types::BinaryPart::ArrayRangeExpression(e) => e.as_ref().into(), | ||||||
|  |             types::BinaryPart::ObjectExpression(e) => e.as_ref().into(), | ||||||
|             types::BinaryPart::IfExpression(e) => e.as_ref().into(), |             types::BinaryPart::IfExpression(e) => e.as_ref().into(), | ||||||
|             types::BinaryPart::AscribedExpression(e) => e.as_ref().into(), |             types::BinaryPart::AscribedExpression(e) => e.as_ref().into(), | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -234,6 +234,39 @@ export fn startProfile( | |||||||
|   tag?: TagDecl, |   tag?: TagDecl, | ||||||
| ): Sketch {} | ): Sketch {} | ||||||
|  |  | ||||||
|  | /// Sketch a rectangle. | ||||||
|  | /// | ||||||
|  | /// ``` | ||||||
|  | /// exampleSketch = startSketchOn(-XZ) | ||||||
|  | ///   |> rectangle(center = [0, 0], width = 10, height = 5) | ||||||
|  | //    |> extrude(length = 2) | ||||||
|  | /// ``` | ||||||
|  | /// | ||||||
|  | /// ``` | ||||||
|  | /// exampleSketch = startSketchOn(-XZ) | ||||||
|  | ///   |> rectangle(corner = [0, 0], width = 10, height = 5) | ||||||
|  | //    |> extrude(length = 2) | ||||||
|  | /// ``` | ||||||
|  | @(impl = std_rust) | ||||||
|  | export fn rectangle( | ||||||
|  |   /// Sketch to extend, or plane or surface to sketch on. | ||||||
|  |   @sketchOrSurface: Sketch | Plane | Face, | ||||||
|  |   /// Rectangle's width along X axis. | ||||||
|  |   width: number(Length), | ||||||
|  |   /// Rectangle's height along Y axis. | ||||||
|  |   height: number(Length), | ||||||
|  |   /// The center of the rectangle. | ||||||
|  |   /// Incompatible with `corner`. | ||||||
|  |   @(snippetArray = ["0", "0"]) | ||||||
|  |   center?: Point2d, | ||||||
|  |   /// The corner of the rectangle. | ||||||
|  |   /// Incompatible with `center`. | ||||||
|  |   /// This will be the corner which is most negative on | ||||||
|  |   /// both X and Y axes. | ||||||
|  |   @(snippetArray = ["0", "0"]) | ||||||
|  |   corner?: Point2d, | ||||||
|  | ): Sketch {} | ||||||
|  |  | ||||||
| /// Construct a 2-dimensional circle, of the specified radius, centered at | /// Construct a 2-dimensional circle, of the specified radius, centered at | ||||||
| /// the provided (x, y) origin point. | /// the provided (x, y) origin point. | ||||||
| /// | /// | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								rust/kcl-lib/tests/add_arrays/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								rust/kcl-lib/tests/add_arrays/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Artifact commands add_arrays.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/add_arrays/input.kcl": [], | ||||||
|  |   "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 add_arrays.kcl | ||||||
|  | extension: md | ||||||
|  | snapshot_kind: binary | ||||||
|  | --- | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | ```mermaid | ||||||
|  | flowchart LR | ||||||
|  | ``` | ||||||
							
								
								
									
										106
									
								
								rust/kcl-lib/tests/add_arrays/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								rust/kcl-lib/tests/add_arrays/ast.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of parsing add_arrays.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "Ok": { | ||||||
|  |     "body": [ | ||||||
|  |       { | ||||||
|  |         "commentStart": 0, | ||||||
|  |         "declaration": { | ||||||
|  |           "commentStart": 0, | ||||||
|  |           "end": 0, | ||||||
|  |           "id": { | ||||||
|  |             "commentStart": 0, | ||||||
|  |             "end": 0, | ||||||
|  |             "moduleId": 0, | ||||||
|  |             "name": "answer", | ||||||
|  |             "start": 0, | ||||||
|  |             "type": "Identifier" | ||||||
|  |           }, | ||||||
|  |           "init": { | ||||||
|  |             "commentStart": 0, | ||||||
|  |             "end": 0, | ||||||
|  |             "left": { | ||||||
|  |               "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": "1", | ||||||
|  |                   "start": 0, | ||||||
|  |                   "type": "Literal", | ||||||
|  |                   "type": "Literal", | ||||||
|  |                   "value": { | ||||||
|  |                     "value": 1.0, | ||||||
|  |                     "suffix": "None" | ||||||
|  |                   } | ||||||
|  |                 } | ||||||
|  |               ], | ||||||
|  |               "end": 0, | ||||||
|  |               "moduleId": 0, | ||||||
|  |               "start": 0, | ||||||
|  |               "type": "ArrayExpression", | ||||||
|  |               "type": "ArrayExpression" | ||||||
|  |             }, | ||||||
|  |             "moduleId": 0, | ||||||
|  |             "operator": "+", | ||||||
|  |             "right": { | ||||||
|  |               "commentStart": 0, | ||||||
|  |               "elements": [ | ||||||
|  |                 { | ||||||
|  |                   "commentStart": 0, | ||||||
|  |                   "end": 0, | ||||||
|  |                   "moduleId": 0, | ||||||
|  |                   "raw": "2", | ||||||
|  |                   "start": 0, | ||||||
|  |                   "type": "Literal", | ||||||
|  |                   "type": "Literal", | ||||||
|  |                   "value": { | ||||||
|  |                     "value": 2.0, | ||||||
|  |                     "suffix": "None" | ||||||
|  |                   } | ||||||
|  |                 } | ||||||
|  |               ], | ||||||
|  |               "end": 0, | ||||||
|  |               "moduleId": 0, | ||||||
|  |               "start": 0, | ||||||
|  |               "type": "ArrayExpression", | ||||||
|  |               "type": "ArrayExpression" | ||||||
|  |             }, | ||||||
|  |             "start": 0, | ||||||
|  |             "type": "BinaryExpression", | ||||||
|  |             "type": "BinaryExpression" | ||||||
|  |           }, | ||||||
|  |           "moduleId": 0, | ||||||
|  |           "start": 0, | ||||||
|  |           "type": "VariableDeclarator" | ||||||
|  |         }, | ||||||
|  |         "end": 0, | ||||||
|  |         "kind": "const", | ||||||
|  |         "moduleId": 0, | ||||||
|  |         "start": 0, | ||||||
|  |         "type": "VariableDeclaration", | ||||||
|  |         "type": "VariableDeclaration" | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "commentStart": 0, | ||||||
|  |     "end": 0, | ||||||
|  |     "moduleId": 0, | ||||||
|  |     "start": 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								rust/kcl-lib/tests/add_arrays/execution_error.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rust/kcl-lib/tests/add_arrays/execution_error.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Error from executing add_arrays.kcl | ||||||
|  | --- | ||||||
|  | KCL Semantic error | ||||||
|  |  | ||||||
|  |   × semantic: Expected a number, but found an array of `number`, `number` | ||||||
|  |    ╭──── | ||||||
|  |  1 │ answer = [0, 1] + [2] | ||||||
|  |    ·          ───┬── | ||||||
|  |    ·             ╰── tests/add_arrays/input.kcl | ||||||
|  |    ╰──── | ||||||
							
								
								
									
										1
									
								
								rust/kcl-lib/tests/add_arrays/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								rust/kcl-lib/tests/add_arrays/input.kcl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | answer = [0, 1] + [2] | ||||||
							
								
								
									
										96
									
								
								rust/kcl-lib/tests/add_arrays/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								rust/kcl-lib/tests/add_arrays/ops.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Operations executed add_arrays.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/add_arrays/input.kcl": [], | ||||||
|  |   "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": [] | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								rust/kcl-lib/tests/add_arrays/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								rust/kcl-lib/tests/add_arrays/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of unparsing add_arrays.kcl | ||||||
|  | --- | ||||||
|  | answer = [0, 1] + [2] | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 24 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 24 KiB | 
| @ -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) | ||||||
							
								
								
									
										163
									
								
								rust/kcl-lib/tests/rect/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								rust/kcl-lib/tests/rect/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,163 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Artifact commands rect.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/rect/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": -2.0, | ||||||
|  |           "y": -1.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": 3.0, | ||||||
|  |             "y": 0.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "extend_path", | ||||||
|  |         "path": "[uuid]", | ||||||
|  |         "segment": { | ||||||
|  |           "type": "line", | ||||||
|  |           "end": { | ||||||
|  |             "x": 0.00000000000000012246467991473532, | ||||||
|  |             "y": 2.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "extend_path", | ||||||
|  |         "path": "[uuid]", | ||||||
|  |         "segment": { | ||||||
|  |           "type": "line", | ||||||
|  |           "end": { | ||||||
|  |             "x": -3.0, | ||||||
|  |             "y": -0.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "extend_path", | ||||||
|  |         "path": "[uuid]", | ||||||
|  |         "segment": { | ||||||
|  |           "type": "line", | ||||||
|  |           "end": { | ||||||
|  |             "x": -2.0, | ||||||
|  |             "y": -1.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": false | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "close_path", | ||||||
|  |         "path_id": "[uuid]" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "std::appearance": [], | ||||||
|  |   "std::array": [], | ||||||
|  |   "std::math": [], | ||||||
|  |   "std::prelude": [], | ||||||
|  |   "std::sketch": [], | ||||||
|  |   "std::solid": [], | ||||||
|  |   "std::sweep": [], | ||||||
|  |   "std::transform": [], | ||||||
|  |   "std::turns": [], | ||||||
|  |   "std::types": [], | ||||||
|  |   "std::units": [] | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								rust/kcl-lib/tests/rect/artifact_graph_flowchart.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								rust/kcl-lib/tests/rect/artifact_graph_flowchart.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Artifact graph flowchart rect.kcl | ||||||
|  | extension: md | ||||||
|  | snapshot_kind: binary | ||||||
|  | --- | ||||||
							
								
								
									
										27
									
								
								rust/kcl-lib/tests/rect/artifact_graph_flowchart.snap.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								rust/kcl-lib/tests/rect/artifact_graph_flowchart.snap.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | ```mermaid | ||||||
|  | flowchart LR | ||||||
|  |   subgraph path2 [Path] | ||||||
|  |     2["Path<br>[27, 54, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     3["Segment<br>[60, 103, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] | ||||||
|  |     4["Segment<br>[109, 155, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] | ||||||
|  |     5["Segment<br>[161, 211, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] | ||||||
|  |     6["Segment<br>[217, 273, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] | ||||||
|  |     7["Segment<br>[279, 286, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] | ||||||
|  |     8[Solid2d] | ||||||
|  |   end | ||||||
|  |   1["Plane<br>[4, 21, 0]"] | ||||||
|  |     %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] | ||||||
|  |   1 --- 2 | ||||||
|  |   2 --- 3 | ||||||
|  |   2 --- 4 | ||||||
|  |   2 --- 5 | ||||||
|  |   2 --- 6 | ||||||
|  |   2 --- 7 | ||||||
|  |   2 --- 8 | ||||||
|  | ``` | ||||||
							
								
								
									
										701
									
								
								rust/kcl-lib/tests/rect/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										701
									
								
								rust/kcl-lib/tests/rect/ast.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,701 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of parsing rect.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "Ok": { | ||||||
|  |     "body": [ | ||||||
|  |       { | ||||||
|  |         "commentStart": 0, | ||||||
|  |         "declaration": { | ||||||
|  |           "commentStart": 0, | ||||||
|  |           "end": 0, | ||||||
|  |           "id": { | ||||||
|  |             "commentStart": 0, | ||||||
|  |             "end": 0, | ||||||
|  |             "moduleId": 0, | ||||||
|  |             "name": "x", | ||||||
|  |             "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": [ | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "at", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "elements": [ | ||||||
|  |                         { | ||||||
|  |                           "argument": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "raw": "2", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "value": { | ||||||
|  |                               "value": 2.0, | ||||||
|  |                               "suffix": "None" | ||||||
|  |                             } | ||||||
|  |                           }, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "operator": "-", | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "UnaryExpression", | ||||||
|  |                           "type": "UnaryExpression" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                           "argument": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "raw": "1", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "value": { | ||||||
|  |                               "value": 1.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": "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": "angle", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "raw": "0", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "value": { | ||||||
|  |                         "value": 0.0, | ||||||
|  |                         "suffix": "None" | ||||||
|  |                       } | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "length", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "raw": "3", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "value": { | ||||||
|  |                         "value": 3.0, | ||||||
|  |                         "suffix": "None" | ||||||
|  |                       } | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "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": "a" | ||||||
|  |                     } | ||||||
|  |                   } | ||||||
|  |                 ], | ||||||
|  |                 "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 | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "arguments": [ | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "angle", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "left": { | ||||||
|  |                         "arguments": [], | ||||||
|  |                         "callee": { | ||||||
|  |                           "abs_path": false, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "name": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "name": "segAng", | ||||||
|  |                             "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": "a", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Identifier" | ||||||
|  |                           }, | ||||||
|  |                           "path": [], | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "Name", | ||||||
|  |                           "type": "Name" | ||||||
|  |                         } | ||||||
|  |                       }, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "operator": "+", | ||||||
|  |                       "right": { | ||||||
|  |                         "commentStart": 0, | ||||||
|  |                         "end": 0, | ||||||
|  |                         "moduleId": 0, | ||||||
|  |                         "raw": "90", | ||||||
|  |                         "start": 0, | ||||||
|  |                         "type": "Literal", | ||||||
|  |                         "type": "Literal", | ||||||
|  |                         "value": { | ||||||
|  |                           "value": 90.0, | ||||||
|  |                           "suffix": "None" | ||||||
|  |                         } | ||||||
|  |                       }, | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "BinaryExpression", | ||||||
|  |                       "type": "BinaryExpression" | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "length", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "raw": "2", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "value": { | ||||||
|  |                         "value": 2.0, | ||||||
|  |                         "suffix": "None" | ||||||
|  |                       } | ||||||
|  |                     } | ||||||
|  |                   } | ||||||
|  |                 ], | ||||||
|  |                 "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 | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "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": "segAng", | ||||||
|  |                           "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": "a", | ||||||
|  |                           "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": { | ||||||
|  |                       "argument": { | ||||||
|  |                         "arguments": [], | ||||||
|  |                         "callee": { | ||||||
|  |                           "abs_path": false, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "name": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "name": "segLen", | ||||||
|  |                             "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": "a", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Identifier" | ||||||
|  |                           }, | ||||||
|  |                           "path": [], | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "Name", | ||||||
|  |                           "type": "Name" | ||||||
|  |                         } | ||||||
|  |                       }, | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "operator": "-", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "UnaryExpression", | ||||||
|  |                       "type": "UnaryExpression" | ||||||
|  |                     } | ||||||
|  |                   } | ||||||
|  |                 ], | ||||||
|  |                 "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 | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "arguments": [ | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "endAbsolute", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "elements": [ | ||||||
|  |                         { | ||||||
|  |                           "arguments": [], | ||||||
|  |                           "callee": { | ||||||
|  |                             "abs_path": false, | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "name": { | ||||||
|  |                               "commentStart": 0, | ||||||
|  |                               "end": 0, | ||||||
|  |                               "moduleId": 0, | ||||||
|  |                               "name": "profileStartX", | ||||||
|  |                               "start": 0, | ||||||
|  |                               "type": "Identifier" | ||||||
|  |                             }, | ||||||
|  |                             "path": [], | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Name" | ||||||
|  |                           }, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "CallExpressionKw", | ||||||
|  |                           "type": "CallExpressionKw", | ||||||
|  |                           "unlabeled": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "PipeSubstitution", | ||||||
|  |                             "type": "PipeSubstitution" | ||||||
|  |                           } | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                           "arguments": [], | ||||||
|  |                           "callee": { | ||||||
|  |                             "abs_path": false, | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "name": { | ||||||
|  |                               "commentStart": 0, | ||||||
|  |                               "end": 0, | ||||||
|  |                               "moduleId": 0, | ||||||
|  |                               "name": "profileStartY", | ||||||
|  |                               "start": 0, | ||||||
|  |                               "type": "Identifier" | ||||||
|  |                             }, | ||||||
|  |                             "path": [], | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Name" | ||||||
|  |                           }, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "CallExpressionKw", | ||||||
|  |                           "type": "CallExpressionKw", | ||||||
|  |                           "unlabeled": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "PipeSubstitution", | ||||||
|  |                             "type": "PipeSubstitution" | ||||||
|  |                           } | ||||||
|  |                         } | ||||||
|  |                       ], | ||||||
|  |                       "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 | ||||||
|  |               } | ||||||
|  |             ], | ||||||
|  |             "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, | ||||||
|  |     "moduleId": 0, | ||||||
|  |     "start": 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								rust/kcl-lib/tests/rect/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								rust/kcl-lib/tests/rect/input.kcl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | x = startSketchOn(XY) | ||||||
|  |   |> startProfile(at = [-2, -1]) | ||||||
|  |   |> angledLine(angle = 0, length = 3, tag = $a) | ||||||
|  |   |> angledLine(angle = segAng(a) + 90, length = 2) | ||||||
|  |   |> angledLine(angle = segAng(a), length = -segLen(a)) | ||||||
|  |   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||||
|  |   |> close() | ||||||
							
								
								
									
										128
									
								
								rust/kcl-lib/tests/rect/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								rust/kcl-lib/tests/rect/ops.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Operations executed rect.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/rect/input.kcl": [ | ||||||
|  |     { | ||||||
|  |       "type": "StdLibCall", | ||||||
|  |       "name": "startSketchOn", | ||||||
|  |       "unlabeledArg": { | ||||||
|  |         "value": { | ||||||
|  |           "type": "Plane", | ||||||
|  |           "artifact_id": "[uuid]" | ||||||
|  |         }, | ||||||
|  |         "sourceRange": [] | ||||||
|  |       }, | ||||||
|  |       "labeledArgs": {}, | ||||||
|  |       "nodePath": { | ||||||
|  |         "steps": [ | ||||||
|  |           { | ||||||
|  |             "type": "ProgramBodyItem", | ||||||
|  |             "index": 0 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "VariableDeclarationDeclaration" | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "VariableDeclarationInit" | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "PipeBodyItem", | ||||||
|  |             "index": 0 | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "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": [] | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "std::sketch": [], | ||||||
|  |   "std::solid": [], | ||||||
|  |   "std::sweep": [], | ||||||
|  |   "std::transform": [], | ||||||
|  |   "std::turns": [], | ||||||
|  |   "std::types": [], | ||||||
|  |   "std::units": [] | ||||||
|  | } | ||||||
							
								
								
									
										181
									
								
								rust/kcl-lib/tests/rect/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								rust/kcl-lib/tests/rect/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,181 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Variables in memory after executing rect.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "a": { | ||||||
|  |     "type": "TagIdentifier", | ||||||
|  |     "type": "TagIdentifier", | ||||||
|  |     "value": "a" | ||||||
|  |   }, | ||||||
|  |   "x": { | ||||||
|  |     "type": "Sketch", | ||||||
|  |     "value": { | ||||||
|  |       "type": "Sketch", | ||||||
|  |       "id": "[uuid]", | ||||||
|  |       "paths": [ | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": { | ||||||
|  |             "commentStart": 100, | ||||||
|  |             "end": 102, | ||||||
|  |             "moduleId": 0, | ||||||
|  |             "start": 100, | ||||||
|  |             "type": "TagDeclarator", | ||||||
|  |             "value": "a" | ||||||
|  |           }, | ||||||
|  |           "to": [ | ||||||
|  |             1.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             1.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             1.0000000000000002, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             1.0000000000000002, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             -1.9999999999999998, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             -1.9999999999999998, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.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" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "start": { | ||||||
|  |         "from": [ | ||||||
|  |           -2.0, | ||||||
|  |           -1.0 | ||||||
|  |         ], | ||||||
|  |         "to": [ | ||||||
|  |           -2.0, | ||||||
|  |           -1.0 | ||||||
|  |         ], | ||||||
|  |         "units": { | ||||||
|  |           "type": "Mm" | ||||||
|  |         }, | ||||||
|  |         "tag": null, | ||||||
|  |         "__geoMeta": { | ||||||
|  |           "id": "[uuid]", | ||||||
|  |           "sourceRange": [] | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tags": { | ||||||
|  |         "a": { | ||||||
|  |           "type": "TagIdentifier", | ||||||
|  |           "value": "a" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "artifactId": "[uuid]", | ||||||
|  |       "originalId": "[uuid]", | ||||||
|  |       "units": { | ||||||
|  |         "type": "Mm" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/rect/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/rect/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										11
									
								
								rust/kcl-lib/tests/rect/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rust/kcl-lib/tests/rect/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of unparsing rect.kcl | ||||||
|  | --- | ||||||
|  | x = startSketchOn(XY) | ||||||
|  |   |> startProfile(at = [-2, -1]) | ||||||
|  |   |> angledLine(angle = 0, length = 3, tag = $a) | ||||||
|  |   |> angledLine(angle = segAng(a) + 90, length = 2) | ||||||
|  |   |> angledLine(angle = segAng(a), length = -segLen(a)) | ||||||
|  |   |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) | ||||||
|  |   |> close() | ||||||
							
								
								
									
										163
									
								
								rust/kcl-lib/tests/rect_helper/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								rust/kcl-lib/tests/rect_helper/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,163 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Artifact commands rect_helper.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/rect_helper/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": -2.0, | ||||||
|  |           "y": -1.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": 3.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": 2.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "extend_path", | ||||||
|  |         "path": "[uuid]", | ||||||
|  |         "segment": { | ||||||
|  |           "type": "line", | ||||||
|  |           "end": { | ||||||
|  |             "x": -3.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": -2.0, | ||||||
|  |             "z": 0.0 | ||||||
|  |           }, | ||||||
|  |           "relative": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "cmdId": "[uuid]", | ||||||
|  |       "range": [], | ||||||
|  |       "command": { | ||||||
|  |         "type": "close_path", | ||||||
|  |         "path_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 rect_helper.kcl | ||||||
|  | extension: md | ||||||
|  | snapshot_kind: binary | ||||||
|  | --- | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | ```mermaid | ||||||
|  | flowchart LR | ||||||
|  |   subgraph path2 [Path] | ||||||
|  |     2["Path<br>[25, 76, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     3["Segment<br>[25, 76, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     4["Segment<br>[25, 76, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     5["Segment<br>[25, 76, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     6["Segment<br>[25, 76, 0]"] | ||||||
|  |       %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] | ||||||
|  |     7[Solid2d] | ||||||
|  |   end | ||||||
|  |   1["Plane<br>[4, 21, 0]"] | ||||||
|  |     %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] | ||||||
|  |   1 --- 2 | ||||||
|  |   2 --- 3 | ||||||
|  |   2 --- 4 | ||||||
|  |   2 --- 5 | ||||||
|  |   2 --- 6 | ||||||
|  |   2 --- 7 | ||||||
|  | ``` | ||||||
							
								
								
									
										233
									
								
								rust/kcl-lib/tests/rect_helper/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								rust/kcl-lib/tests/rect_helper/ast.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,233 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of parsing rect_helper.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "Ok": { | ||||||
|  |     "body": [ | ||||||
|  |       { | ||||||
|  |         "commentStart": 0, | ||||||
|  |         "declaration": { | ||||||
|  |           "commentStart": 0, | ||||||
|  |           "end": 0, | ||||||
|  |           "id": { | ||||||
|  |             "commentStart": 0, | ||||||
|  |             "end": 0, | ||||||
|  |             "moduleId": 0, | ||||||
|  |             "name": "x", | ||||||
|  |             "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": [ | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "width", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "raw": "3", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "value": { | ||||||
|  |                         "value": 3.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": "2", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "type": "Literal", | ||||||
|  |                       "value": { | ||||||
|  |                         "value": 2.0, | ||||||
|  |                         "suffix": "None" | ||||||
|  |                       } | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                   { | ||||||
|  |                     "type": "LabeledArg", | ||||||
|  |                     "label": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "end": 0, | ||||||
|  |                       "moduleId": 0, | ||||||
|  |                       "name": "corner", | ||||||
|  |                       "start": 0, | ||||||
|  |                       "type": "Identifier" | ||||||
|  |                     }, | ||||||
|  |                     "arg": { | ||||||
|  |                       "commentStart": 0, | ||||||
|  |                       "elements": [ | ||||||
|  |                         { | ||||||
|  |                           "argument": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "raw": "2", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "value": { | ||||||
|  |                               "value": 2.0, | ||||||
|  |                               "suffix": "None" | ||||||
|  |                             } | ||||||
|  |                           }, | ||||||
|  |                           "commentStart": 0, | ||||||
|  |                           "end": 0, | ||||||
|  |                           "moduleId": 0, | ||||||
|  |                           "operator": "-", | ||||||
|  |                           "start": 0, | ||||||
|  |                           "type": "UnaryExpression", | ||||||
|  |                           "type": "UnaryExpression" | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                           "argument": { | ||||||
|  |                             "commentStart": 0, | ||||||
|  |                             "end": 0, | ||||||
|  |                             "moduleId": 0, | ||||||
|  |                             "raw": "1", | ||||||
|  |                             "start": 0, | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "type": "Literal", | ||||||
|  |                             "value": { | ||||||
|  |                               "value": 1.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": "rectangle", | ||||||
|  |                     "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, | ||||||
|  |     "moduleId": 0, | ||||||
|  |     "start": 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								rust/kcl-lib/tests/rect_helper/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								rust/kcl-lib/tests/rect_helper/input.kcl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | x = startSketchOn(XY) | ||||||
|  | |> rectangle(width = 3, height = 2, corner = [-2, -1]) | ||||||
							
								
								
									
										128
									
								
								rust/kcl-lib/tests/rect_helper/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								rust/kcl-lib/tests/rect_helper/ops.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Operations executed rect_helper.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "rust/kcl-lib/tests/rect_helper/input.kcl": [ | ||||||
|  |     { | ||||||
|  |       "type": "StdLibCall", | ||||||
|  |       "name": "startSketchOn", | ||||||
|  |       "unlabeledArg": { | ||||||
|  |         "value": { | ||||||
|  |           "type": "Plane", | ||||||
|  |           "artifact_id": "[uuid]" | ||||||
|  |         }, | ||||||
|  |         "sourceRange": [] | ||||||
|  |       }, | ||||||
|  |       "labeledArgs": {}, | ||||||
|  |       "nodePath": { | ||||||
|  |         "steps": [ | ||||||
|  |           { | ||||||
|  |             "type": "ProgramBodyItem", | ||||||
|  |             "index": 0 | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "VariableDeclarationDeclaration" | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "VariableDeclarationInit" | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             "type": "PipeBodyItem", | ||||||
|  |             "index": 0 | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "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": [] | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "std::sketch": [], | ||||||
|  |   "std::solid": [], | ||||||
|  |   "std::sweep": [], | ||||||
|  |   "std::transform": [], | ||||||
|  |   "std::turns": [], | ||||||
|  |   "std::types": [], | ||||||
|  |   "std::units": [] | ||||||
|  | } | ||||||
							
								
								
									
										144
									
								
								rust/kcl-lib/tests/rect_helper/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								rust/kcl-lib/tests/rect_helper/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,144 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Variables in memory after executing rect_helper.kcl | ||||||
|  | --- | ||||||
|  | { | ||||||
|  |   "x": { | ||||||
|  |     "type": "Sketch", | ||||||
|  |     "value": { | ||||||
|  |       "type": "Sketch", | ||||||
|  |       "id": "[uuid]", | ||||||
|  |       "paths": [ | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             1.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             1.0, | ||||||
|  |             -1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             1.0, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             1.0, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             -2.0, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "type": "ToPoint", | ||||||
|  |           "units": { | ||||||
|  |             "type": "Mm" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "__geoMeta": { | ||||||
|  |             "id": "[uuid]", | ||||||
|  |             "sourceRange": [] | ||||||
|  |           }, | ||||||
|  |           "from": [ | ||||||
|  |             -2.0, | ||||||
|  |             1.0 | ||||||
|  |           ], | ||||||
|  |           "tag": null, | ||||||
|  |           "to": [ | ||||||
|  |             -2.0, | ||||||
|  |             -1.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" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "start": { | ||||||
|  |         "from": [ | ||||||
|  |           -2.0, | ||||||
|  |           -1.0 | ||||||
|  |         ], | ||||||
|  |         "to": [ | ||||||
|  |           -2.0, | ||||||
|  |           -1.0 | ||||||
|  |         ], | ||||||
|  |         "units": { | ||||||
|  |           "type": "Mm" | ||||||
|  |         }, | ||||||
|  |         "tag": null, | ||||||
|  |         "__geoMeta": { | ||||||
|  |           "id": "[uuid]", | ||||||
|  |           "sourceRange": [] | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "artifactId": "[uuid]", | ||||||
|  |       "originalId": "[uuid]", | ||||||
|  |       "units": { | ||||||
|  |         "type": "Mm" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/rect_helper/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/rect_helper/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										6
									
								
								rust/kcl-lib/tests/rect_helper/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								rust/kcl-lib/tests/rect_helper/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | --- | ||||||
|  | source: kcl-lib/src/simulation_tests.rs | ||||||
|  | description: Result of unparsing rect_helper.kcl | ||||||
|  | --- | ||||||
|  | x = startSketchOn(XY) | ||||||
|  |   |> rectangle(width = 3, height = 2, corner = [-2, -1]) | ||||||
| @ -1,6 +1,6 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-python-bindings" | name = "kcl-python-bindings" | ||||||
| version = "0.3.83" | version = "0.3.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| repository = "https://github.com/kittycad/modeling-app" | repository = "https://github.com/kittycad/modeling-app" | ||||||
| exclude = ["tests/*", "files/*", "venv/*"] | exclude = ["tests/*", "files/*", "venv/*"] | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-test-server" | name = "kcl-test-server" | ||||||
| description = "A test server for KCL" | description = "A test server for KCL" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license = "MIT" | license = "MIT" | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-to-core" | name = "kcl-to-core" | ||||||
| description = "Utility methods to convert kcl to engine core executable tests" | description = "Utility methods to convert kcl to engine core executable tests" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license = "MIT" | license = "MIT" | ||||||
| repository = "https://github.com/KittyCAD/modeling-app" | repository = "https://github.com/KittyCAD/modeling-app" | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| [package] | [package] | ||||||
| name = "kcl-wasm-lib" | name = "kcl-wasm-lib" | ||||||
| version = "0.1.83" | version = "0.1.84" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| repository = "https://github.com/KittyCAD/modeling-app" | repository = "https://github.com/KittyCAD/modeling-app" | ||||||
| rust-version = "1.83" | rust-version = "1.83" | ||||||
|  | |||||||
| @ -371,53 +371,53 @@ export function kclErrorsToDiagnostics( | |||||||
|   sourceCode: string |   sourceCode: string | ||||||
| ): CodeMirrorDiagnostic[] { | ): CodeMirrorDiagnostic[] { | ||||||
|   let nonFatal: CodeMirrorDiagnostic[] = [] |   let nonFatal: CodeMirrorDiagnostic[] = [] | ||||||
|   const errs = errors |   const errs = errors.flatMap((err) => { | ||||||
|     ?.filter((err) => isTopLevelModule(err.sourceRange)) |     const diagnostics: CodeMirrorDiagnostic[] = [] | ||||||
|     .flatMap((err) => { |     let message = err.msg | ||||||
|       const diagnostics: CodeMirrorDiagnostic[] = [] |     if (err.kclBacktrace.length > 0) { | ||||||
|       let message = err.msg |       // Show the backtrace in the error message. | ||||||
|       if (err.kclBacktrace.length > 0) { |       const backtraceLines: Array<string> = [] | ||||||
|         // Show the backtrace in the error message. |       for (let i = 0; i < err.kclBacktrace.length; i++) { | ||||||
|         const backtraceLines: Array<string> = [] |         const item = err.kclBacktrace[i] | ||||||
|         for (let i = 0; i < err.kclBacktrace.length; i++) { |         if ( | ||||||
|           const item = err.kclBacktrace[i] |           i > 0 && | ||||||
|           if ( |           isTopLevelModule(item.sourceRange) && | ||||||
|             i > 0 && |           !sourceRangeContains(item.sourceRange, err.sourceRange) | ||||||
|             isTopLevelModule(item.sourceRange) && |         ) { | ||||||
|             !sourceRangeContains(item.sourceRange, err.sourceRange) |           diagnostics.push({ | ||||||
|           ) { |             from: toUtf16(item.sourceRange[0], sourceCode), | ||||||
|             diagnostics.push({ |             to: toUtf16(item.sourceRange[1], sourceCode), | ||||||
|               from: toUtf16(item.sourceRange[0], sourceCode), |             message: 'Part of the error backtrace', | ||||||
|               to: toUtf16(item.sourceRange[1], sourceCode), |             severity: 'hint', | ||||||
|               message: 'Part of the error backtrace', |           }) | ||||||
|               severity: 'hint', |  | ||||||
|             }) |  | ||||||
|           } |  | ||||||
|           if (i === err.kclBacktrace.length - 1 && !item.fnName) { |  | ||||||
|             // The top-level doesn't have a name. |  | ||||||
|             break |  | ||||||
|           } |  | ||||||
|           const name = item.fnName ? `${item.fnName}()` : '(anonymous)' |  | ||||||
|           backtraceLines.push(name) |  | ||||||
|         } |         } | ||||||
|         // If the backtrace is only one line, it's not helpful to show. |         if (i === err.kclBacktrace.length - 1 && !item.fnName) { | ||||||
|         if (backtraceLines.length > 1) { |           // The top-level doesn't have a name. | ||||||
|           message += `\n\nBacktrace:\n${backtraceLines.join('\n')}` |           break | ||||||
|         } |         } | ||||||
|  |         const name = item.fnName ? `${item.fnName}()` : '(anonymous)' | ||||||
|  |         backtraceLines.push(name) | ||||||
|       } |       } | ||||||
|       if (err.nonFatal.length > 0) { |       // If the backtrace is only one line, it's not helpful to show. | ||||||
|         nonFatal = nonFatal.concat( |       if (backtraceLines.length > 1) { | ||||||
|           compilationErrorsToDiagnostics(err.nonFatal, sourceCode) |         message += `\n\nBacktrace:\n${backtraceLines.join('\n')}` | ||||||
|         ) |  | ||||||
|       } |       } | ||||||
|  |     } | ||||||
|  |     if (err.nonFatal.length > 0) { | ||||||
|  |       nonFatal = nonFatal.concat( | ||||||
|  |         compilationErrorsToDiagnostics(err.nonFatal, sourceCode) | ||||||
|  |       ) | ||||||
|  |     } | ||||||
|  |     if (isTopLevelModule(err.sourceRange)) { | ||||||
|       diagnostics.push({ |       diagnostics.push({ | ||||||
|         from: toUtf16(err.sourceRange[0], sourceCode), |         from: toUtf16(err.sourceRange[0], sourceCode), | ||||||
|         to: toUtf16(err.sourceRange[1], sourceCode), |         to: toUtf16(err.sourceRange[1], sourceCode), | ||||||
|         message, |         message, | ||||||
|         severity: 'error', |         severity: 'error', | ||||||
|       }) |       }) | ||||||
|       return diagnostics |     } | ||||||
|     }) |     return diagnostics | ||||||
|  |   }) | ||||||
|   return errs.concat(nonFatal) |   return errs.concat(nonFatal) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	