diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index c62d96dc3..edd512445 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -41,8 +41,6 @@ export class KclManager { nonCodeMeta: { nonCodeNodes: {}, startNodes: [], - start: 0, - end: 0, }, } private _execState: ExecState = emptyExecState() @@ -209,8 +207,6 @@ export class KclManager { nonCodeMeta: { nonCodeNodes: {}, startNodes: [], - start: 0, - end: 0, }, } } diff --git a/src/lang/modifyAst.test.ts b/src/lang/modifyAst.test.ts index b31ae9f7c..32e9b403d 100644 --- a/src/lang/modifyAst.test.ts +++ b/src/lang/modifyAst.test.ts @@ -124,7 +124,7 @@ describe('Testing addSketchTo', () => { body: [], start: 0, end: 0, - nonCodeMeta: { nonCodeNodes: {}, startNodes: [], start: 0, end: 0 }, + nonCodeMeta: { nonCodeNodes: {}, startNodes: [] }, }, 'yz' ) diff --git a/src/wasm-lib/kcl/src/ast/types.rs b/src/wasm-lib/kcl/src/ast/types.rs index 517e52ed9..70b34bc89 100644 --- a/src/wasm-lib/kcl/src/ast/types.rs +++ b/src/wasm-lib/kcl/src/ast/types.rs @@ -127,7 +127,7 @@ pub type NodeRef<'a, T> = &'a UnboxedNode; pub struct Program { pub body: Vec, #[serde(default, skip_serializing_if = "NonCodeMeta::is_empty")] - pub non_code_meta: UnboxedNode, + pub non_code_meta: NonCodeMeta, #[serde(default, skip_serializing_if = "Option::is_none")] #[ts(optional)] @@ -1847,7 +1847,7 @@ impl From> for Expr { pub struct ArrayExpression { pub elements: Vec, #[serde(default, skip_serializing_if = "NonCodeMeta::is_empty")] - pub non_code_meta: UnboxedNode, + pub non_code_meta: NonCodeMeta, #[serde(default, skip_serializing_if = "Option::is_none")] #[ts(optional)] @@ -1984,7 +1984,7 @@ impl ArrayRangeExpression { pub struct ObjectExpression { pub properties: NodeList, #[serde(default, skip_serializing_if = "NonCodeMeta::is_empty")] - pub non_code_meta: UnboxedNode, + pub non_code_meta: NonCodeMeta, #[serde(default, skip_serializing_if = "Option::is_none")] #[ts(optional)] @@ -2492,7 +2492,7 @@ pub struct PipeExpression { // The rest will be CallExpression, and the AST type should reflect this. pub body: Vec, #[serde(default, skip_serializing_if = "NonCodeMeta::is_empty")] - pub non_code_meta: UnboxedNode, + pub non_code_meta: NonCodeMeta, #[serde(default, skip_serializing_if = "Option::is_none")] #[ts(optional)] diff --git a/src/wasm-lib/kcl/src/parser/parser_impl.rs b/src/wasm-lib/kcl/src/parser/parser_impl.rs index 4adedfe67..7e9483199 100644 --- a/src/wasm-lib/kcl/src/parser/parser_impl.rs +++ b/src/wasm-lib/kcl/src/parser/parser_impl.rs @@ -45,7 +45,7 @@ fn program(i: TokenSlice) -> PResult> { // Add the shebang to the non-code meta. if let Some(shebang) = shebang { - out.non_code_meta.inner.start_nodes.insert(0, shebang); + out.non_code_meta.start_nodes.insert(0, shebang); } // Match original parser behaviour, for now. // Once this is merged and stable, consider changing this as I think it's more accurate @@ -136,7 +136,7 @@ fn non_code_node_no_leading_whitespace(i: TokenSlice) -> PResult PResult> { - let mut non_code_meta = UnboxedNode::::default(); + let mut non_code_meta = NonCodeMeta::default(); let (head, noncode): (_, Vec<_>) = terminated( ( expression_but_not_pipe, @@ -544,11 +544,11 @@ pub(crate) fn array_elem_by_elem(i: TokenSlice) -> PResult PResult> { ignore_trailing_comma(i); ignore_whitespace(i); let end = close_brace(i)?.end; - let non_code_meta = UnboxedNode::no_src(NonCodeMeta { + let non_code_meta = NonCodeMeta { non_code_nodes, ..Default::default() - }); + }; Ok(UnboxedNode::new( ObjectExpression { properties, @@ -1103,7 +1103,7 @@ pub fn function_body(i: TokenSlice) -> PResult> { } let mut body = Vec::new(); - let mut non_code_meta = UnboxedNode::::default(); + let mut non_code_meta = NonCodeMeta::default(); let mut end = 0; let mut start = leading_whitespace_start; for thing_in_body in things_within_body { @@ -1125,7 +1125,7 @@ pub fn function_body(i: TokenSlice) -> PResult> { } end = nc.end; if body.is_empty() { - non_code_meta.inner.start_nodes.push(nc); + non_code_meta.start_nodes.push(nc); } else { non_code_meta.insert(body.len() - 1, nc); } @@ -2070,7 +2070,7 @@ mod tests { let mut slice = tokens.as_slice(); let expr = function_expression.parse_next(&mut slice).unwrap(); assert_eq!(expr.params, vec![]); - let comment_start = expr.body.non_code_meta.inner.start_nodes.first().unwrap(); + let comment_start = expr.body.non_code_meta.start_nodes.first().unwrap(); let comment0 = &expr.body.non_code_meta.non_code_nodes.get(&0).unwrap()[0]; let comment1 = &expr.body.non_code_meta.non_code_nodes.get(&1).unwrap()[0]; assert_eq!(comment_start.value(), "comment 0"); @@ -2099,7 +2099,7 @@ comment */ const mySk1 = startSketchAt([0, 0])"#; let tokens = crate::token::lexer(test_program).unwrap(); let program = program.parse(&tokens).unwrap(); - let mut starting_comments = program.inner.non_code_meta.inner.start_nodes; + let mut starting_comments = program.inner.non_code_meta.start_nodes; assert_eq!(starting_comments.len(), 2); let start0 = starting_comments.remove(0); let start1 = starting_comments.remove(0); @@ -2179,7 +2179,7 @@ const mySk1 = startSketchAt([0, 0])"#; 25, 33, ))], - non_code_meta: UnboxedNode::no_src(NonCodeMeta { + non_code_meta: NonCodeMeta { non_code_nodes: Default::default(), start_nodes: vec![UnboxedNode::new( NonCodeNode { @@ -2190,7 +2190,7 @@ const mySk1 = startSketchAt([0, 0])"#; 25, )], digest: None, - }), + }, digest: None, }, 7, @@ -2256,7 +2256,7 @@ const mySk1 = startSketchAt([0, 0])"#; 0, 20, )], - non_code_meta.inner.start_nodes, + non_code_meta.start_nodes, ); assert_eq!( @@ -2891,7 +2891,7 @@ const mySk1 = startSketchAt([0, 0])"#; 0, 4, ))], - non_code_meta: UnboxedNode::::default(), + non_code_meta: NonCodeMeta::default(), digest: None, }, 0, diff --git a/src/wasm-lib/kcl/src/unparser.rs b/src/wasm-lib/kcl/src/unparser.rs index ef4cb44a9..e3e1c8cd9 100644 --- a/src/wasm-lib/kcl/src/unparser.rs +++ b/src/wasm-lib/kcl/src/unparser.rs @@ -38,11 +38,10 @@ impl Program { .fold(String::new(), |mut output, (index, recast_str)| { let start_string = if index == 0 { // We need to indent. - if self.non_code_meta.inner.start_nodes.is_empty() { + if self.non_code_meta.start_nodes.is_empty() { indentation.to_string() } else { self.non_code_meta - .inner .start_nodes .iter() .map(|start| start.format(&indentation))