Compare commits
	
		
			1 Commits
		
	
	
		
			nightly-v2
			...
			path-to-no
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7a7a83c835 | 
							
								
								
									
										1
									
								
								src/wasm-lib/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								src/wasm-lib/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -1864,6 +1864,7 @@ dependencies = [ | ||||
|  "dashmap", | ||||
|  "databake", | ||||
|  "derive-docs 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "either", | ||||
|  "expectorate", | ||||
|  "futures", | ||||
|  "insta", | ||||
|  | ||||
| @ -32,6 +32,7 @@ thiserror = "1.0.50" | ||||
| ts-rs = { version = "7", features = ["uuid-impl"] } | ||||
| uuid = { version = "1.6.1", features = ["v4", "js", "serde"] } | ||||
| winnow = "0.5.18" | ||||
| either = "1.6.1" | ||||
|  | ||||
| [target.'cfg(target_arch = "wasm32")'.dependencies] | ||||
| js-sys = { version = "0.3.65" } | ||||
|  | ||||
| @ -19,6 +19,7 @@ use crate::{ | ||||
|     parser::PIPE_OPERATOR, | ||||
|     std::{kcl_stdlib::KclStdLibFn, FunctionKind}, | ||||
| }; | ||||
| use crate::executor::PathToNode; | ||||
|  | ||||
| mod literal_value; | ||||
| mod none; | ||||
| @ -1433,6 +1434,7 @@ impl From<Literal> for MemoryItem { | ||||
|             value: JValue::from(literal.value.clone()), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: literal.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         }) | ||||
|     } | ||||
| @ -1444,6 +1446,7 @@ impl From<&Box<Literal>> for MemoryItem { | ||||
|             value: JValue::from(literal.value.clone()), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: literal.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         }) | ||||
|     } | ||||
| @ -1641,7 +1644,7 @@ impl ArrayExpression { | ||||
|                 Value::UnaryExpression(unary_expression) => unary_expression.get_result(memory, pipe_info, ctx).await?, | ||||
|                 Value::ObjectExpression(object_expression) => object_expression.execute(memory, pipe_info, ctx).await?, | ||||
|                 Value::ArrayExpression(array_expression) => array_expression.execute(memory, pipe_info, ctx).await?, | ||||
|                 Value::PipeExpression(pipe_expression) => pipe_expression.get_result(memory, pipe_info, ctx).await?, | ||||
|                 Value::PipeExpression(pipe_expression) => pipe_expression.get_result(memory, pipe_info, ctx, vec![]).await?, | ||||
|                 Value::PipeSubstitution(pipe_substitution) => { | ||||
|                     return Err(KclError::Semantic(KclErrorDetails { | ||||
|                         message: format!("PipeSubstitution not implemented here: {:?}", pipe_substitution), | ||||
| @ -1665,6 +1668,7 @@ impl ArrayExpression { | ||||
|             value: results.into(), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: self.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         })) | ||||
|     } | ||||
| @ -1794,7 +1798,7 @@ impl ObjectExpression { | ||||
|                 Value::UnaryExpression(unary_expression) => unary_expression.get_result(memory, pipe_info, ctx).await?, | ||||
|                 Value::ObjectExpression(object_expression) => object_expression.execute(memory, pipe_info, ctx).await?, | ||||
|                 Value::ArrayExpression(array_expression) => array_expression.execute(memory, pipe_info, ctx).await?, | ||||
|                 Value::PipeExpression(pipe_expression) => pipe_expression.get_result(memory, pipe_info, ctx).await?, | ||||
|                 Value::PipeExpression(pipe_expression) => pipe_expression.get_result(memory, pipe_info, ctx, vec![]).await?, | ||||
|                 Value::PipeSubstitution(pipe_substitution) => { | ||||
|                     return Err(KclError::Semantic(KclErrorDetails { | ||||
|                         message: format!("PipeSubstitution not implemented here: {:?}", pipe_substitution), | ||||
| @ -1822,6 +1826,7 @@ impl ObjectExpression { | ||||
|             value: object.into(), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: self.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         })) | ||||
|     } | ||||
| @ -2031,6 +2036,7 @@ impl MemberExpression { | ||||
|                     value: value.clone(), | ||||
|                     meta: vec![Metadata { | ||||
|                         source_range: self.into(), | ||||
|                         path_to_node: vec![], | ||||
|                     }], | ||||
|                 })) | ||||
|             } else { | ||||
| @ -2087,6 +2093,7 @@ impl MemberExpression { | ||||
|                     value: value.clone(), | ||||
|                     meta: vec![Metadata { | ||||
|                         source_range: self.into(), | ||||
|                         path_to_node: vec![], | ||||
|                     }], | ||||
|                 })) | ||||
|             } else { | ||||
| @ -2251,6 +2258,7 @@ impl BinaryExpression { | ||||
|                     value, | ||||
|                     meta: vec![Metadata { | ||||
|                         source_range: self.into(), | ||||
|                         path_to_node: vec![], | ||||
|                     }], | ||||
|                 })); | ||||
|             } | ||||
| @ -2272,6 +2280,7 @@ impl BinaryExpression { | ||||
|             value, | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: self.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         })) | ||||
|     } | ||||
| @ -2435,6 +2444,7 @@ impl UnaryExpression { | ||||
|             value: (-(num)).into(), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: self.into(), | ||||
|                 path_to_node: vec![], | ||||
|             }], | ||||
|         })) | ||||
|     } | ||||
| @ -2564,11 +2574,12 @@ impl PipeExpression { | ||||
|         memory: &mut ProgramMemory, | ||||
|         pipe_info: &mut PipeInfo, | ||||
|         ctx: &ExecutorContext, | ||||
|         path_to_node: PathToNode, | ||||
|     ) -> Result<MemoryItem, KclError> { | ||||
|         // Reset the previous results. | ||||
|         pipe_info.previous_results = vec![]; | ||||
|         pipe_info.index = 0; | ||||
|         execute_pipe_body(memory, &self.body, pipe_info, self.into(), ctx).await | ||||
|         execute_pipe_body(memory, &self.body, pipe_info, self.into(), ctx, path_to_node).await | ||||
|     } | ||||
|  | ||||
|     /// Rename all identifiers that have the old name to the new given name. | ||||
| @ -2586,6 +2597,8 @@ async fn execute_pipe_body( | ||||
|     pipe_info: &mut PipeInfo, | ||||
|     source_range: SourceRange, | ||||
|     ctx: &ExecutorContext, | ||||
|     path_to_node: PathToNode, | ||||
|      | ||||
| ) -> Result<MemoryItem, KclError> { | ||||
|     if pipe_info.index == body.len() { | ||||
|         pipe_info.is_in_pipe = false; | ||||
|  | ||||
| @ -11,6 +11,7 @@ use schemars::JsonSchema; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_json::Value as JValue; | ||||
| use tower_lsp::lsp_types::{Position as LspPosition, Range as LspRange}; | ||||
| // use either::Either; | ||||
|  | ||||
| use crate::{ | ||||
|     ast::types::{BodyItem, FunctionExpression, KclNone, Value}, | ||||
| @ -632,6 +633,18 @@ impl From<Point3d> for kittycad::types::Point3D { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// number or string | ||||
| #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] | ||||
| #[ts(export)] | ||||
| pub enum NumberOrString { | ||||
|     Num(i32), // assuming 'number' is equivalent to a 32-bit integer | ||||
|     Str(String), | ||||
| } | ||||
|  | ||||
| /// PathToNode | ||||
| pub type PathToNode = Vec<(NumberOrString, String)>; | ||||
|  | ||||
|  | ||||
| /// Metadata. | ||||
| #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] | ||||
| #[ts(export)] | ||||
| @ -639,11 +652,16 @@ impl From<Point3d> for kittycad::types::Point3D { | ||||
| pub struct Metadata { | ||||
|     /// The source range. | ||||
|     pub source_range: SourceRange, | ||||
|     /// The path to node for this memory Item | ||||
|     pub path_to_node: PathToNode, | ||||
| } | ||||
|  | ||||
| impl From<SourceRange> for Metadata { | ||||
|     fn from(source_range: SourceRange) -> Self { | ||||
|         Self { source_range } | ||||
|         Self { | ||||
|             source_range, | ||||
|             path_to_node: Vec::new() | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -829,12 +847,17 @@ pub async fn execute( | ||||
| ) -> Result<ProgramMemory, KclError> { | ||||
|     let mut pipe_info = PipeInfo::default(); | ||||
|  | ||||
|     // let path_to_Node: PathToNode = vec![("body".to_string(), "".to_string())]; | ||||
|     let path_to_node: PathToNode = vec![(NumberOrString::Str("body".to_string()), "".to_string())]; | ||||
|  | ||||
|     // Iterate over the body of the program. | ||||
|     for statement in &program.body { | ||||
|     for (index, statement) in program.body.iter().enumerate() { | ||||
|         let mut with_body_path_to_node = path_to_node.clone(); | ||||
|         with_body_path_to_node.push((NumberOrString::Num(index as i32), "index".to_string())); | ||||
|         match statement { | ||||
|             BodyItem::ExpressionStatement(expression_statement) => { | ||||
|                 if let Value::PipeExpression(pipe_expr) = &expression_statement.expression { | ||||
|                     pipe_expr.get_result(memory, &mut pipe_info, ctx).await?; | ||||
|                     pipe_expr.get_result(memory, &mut pipe_info, ctx, with_body_path_to_node).await?; | ||||
|                 } else if let Value::CallExpression(call_expr) = &expression_statement.expression { | ||||
|                     let fn_name = call_expr.callee.name.to_string(); | ||||
|                     let mut args: Vec<MemoryItem> = Vec::new(); | ||||
| @ -905,10 +928,15 @@ pub async fn execute( | ||||
|                 } | ||||
|             } | ||||
|             BodyItem::VariableDeclaration(variable_declaration) => { | ||||
|                 for declaration in &variable_declaration.declarations { | ||||
|                  | ||||
|                 for (index, declaration) in variable_declaration.declarations.iter().enumerate() { | ||||
|                     let var_name = declaration.id.name.to_string(); | ||||
|                     let source_range: SourceRange = declaration.init.clone().into(); | ||||
|                     let metadata = Metadata { source_range }; | ||||
|                     let mut with_dec_path_to_node = with_body_path_to_node.clone(); | ||||
|                     with_dec_path_to_node.push((NumberOrString::Str("declarations".to_string()), "VariableDeclaration".to_string())); | ||||
|                     with_dec_path_to_node.push((NumberOrString::Num(index as i32), "index".to_string())); | ||||
|                     with_dec_path_to_node.push((NumberOrString::Str("init".to_string()), "".to_string())); | ||||
|                     let metadata = Metadata { source_range, path_to_node: with_dec_path_to_node.clone() }; | ||||
|  | ||||
|                     match &declaration.init { | ||||
|                         Value::None(none) => { | ||||
| @ -963,7 +991,7 @@ pub async fn execute( | ||||
|                             memory.add(&var_name, result, source_range)?; | ||||
|                         } | ||||
|                         Value::PipeExpression(pipe_expression) => { | ||||
|                             let result = pipe_expression.get_result(memory, &mut pipe_info, ctx).await?; | ||||
|                             let result = pipe_expression.get_result(memory, &mut pipe_info, ctx, with_dec_path_to_node).await?; | ||||
|                             memory.add(&var_name, result, source_range)?; | ||||
|                         } | ||||
|                         Value::PipeSubstitution(pipe_substitution) => { | ||||
| @ -1027,7 +1055,7 @@ pub async fn execute( | ||||
|                     memory.return_ = Some(ProgramReturn::Value(result)); | ||||
|                 } | ||||
|                 Value::PipeExpression(pipe_expr) => { | ||||
|                     let result = pipe_expr.get_result(memory, &mut pipe_info, ctx).await?; | ||||
|                     let result = pipe_expr.get_result(memory, &mut pipe_info, ctx, with_body_path_to_node).await?; | ||||
|                     memory.return_ = Some(ProgramReturn::Value(result)); | ||||
|                 } | ||||
|                 Value::PipeSubstitution(_) => {} | ||||
|  | ||||
| @ -190,6 +190,7 @@ impl Args { | ||||
|             value: j, | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: self.source_range, | ||||
|                 path_to_node: Vec::new() | ||||
|             }], | ||||
|         })) | ||||
|     } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	