fix recast (#2194)
* fix recast Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
@ -266,9 +266,9 @@ const mySk1 = startSketchAt([0, 0])
|
||||
|
||||
|
||||
|> rx(45, %)
|
||||
/*
|
||||
one more for good measure
|
||||
*/
|
||||
/*
|
||||
one more for good measure
|
||||
*/
|
||||
`
|
||||
const { ast } = code2ast(code)
|
||||
const recasted = recast(ast)
|
||||
@ -285,7 +285,7 @@ const mySk1 = startSketchAt([0, 0])
|
||||
// and another with just white space between others below
|
||||
|> ry(45, %)
|
||||
|> rx(45, %)
|
||||
/* one more for good measure */
|
||||
/* one more for good measure */
|
||||
`)
|
||||
})
|
||||
})
|
||||
|
@ -102,7 +102,7 @@ describe('testing changeSketchArguments', () => {
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> ${line}
|
||||
|> lineTo([0.46, -5.82], %)
|
||||
// |> rx(45, %)
|
||||
// |> rx(45, %)
|
||||
`
|
||||
const code = genCode(lineToChange)
|
||||
const expectedCode = genCode(lineAfterChange)
|
||||
|
@ -1864,7 +1864,13 @@ impl ObjectExpression {
|
||||
"{{ {} }}",
|
||||
self.properties
|
||||
.iter()
|
||||
.map(|prop| { format!("{}: {}", prop.key.name, prop.value.recast(options, 0, false)) })
|
||||
.map(|prop| {
|
||||
format!(
|
||||
"{}: {}",
|
||||
prop.key.name,
|
||||
prop.value.recast(options, indentation_level + 1, is_in_pipe)
|
||||
)
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
);
|
||||
@ -1880,7 +1886,13 @@ impl ObjectExpression {
|
||||
inner_indentation,
|
||||
self.properties
|
||||
.iter()
|
||||
.map(|prop| { format!("{}: {}", prop.key.name, prop.value.recast(options, 0, false)) })
|
||||
.map(|prop| {
|
||||
format!(
|
||||
"{}: {}",
|
||||
prop.key.name,
|
||||
prop.value.recast(options, indentation_level + 1, is_in_pipe)
|
||||
)
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(format!(",\n{}", inner_indentation).as_str()),
|
||||
if is_in_pipe {
|
||||
@ -2657,7 +2669,12 @@ impl PipeExpression {
|
||||
let non_code_meta = self.non_code_meta.clone();
|
||||
if let Some(non_code_meta_value) = non_code_meta.non_code_nodes.get(&index) {
|
||||
for val in non_code_meta_value {
|
||||
let formatted = val.format(&indentation).trim_end_matches('\n').to_string();
|
||||
let formatted = if val.end == self.end {
|
||||
let indentation = options.get_indentation(indentation_level);
|
||||
val.format(&indentation).trim_end_matches('\n').to_string()
|
||||
} else {
|
||||
val.format(&indentation).trim_end_matches('\n').to_string()
|
||||
};
|
||||
if let NonCodeValue::BlockComment { .. } = val.value {
|
||||
s += "\n";
|
||||
s += &formatted;
|
||||
@ -3256,6 +3273,244 @@ fn ghi = (x) => {
|
||||
assert_eq!(recasted, r#""#);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_recast_large_file() {
|
||||
let some_program_string = r#"// define constants
|
||||
const radius = 6.0
|
||||
const width = 144.0
|
||||
const length = 83.0
|
||||
const depth = 45.0
|
||||
const thk = 5
|
||||
const hole_diam = 5
|
||||
// define a rectangular shape func
|
||||
fn rectShape = (pos, w, l) => {
|
||||
const rr = startSketchOn('xy')
|
||||
|> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %)
|
||||
|> lineTo([pos[0] + w / 2, pos[1] - (l / 2)], %, "edge1")
|
||||
|> lineTo([pos[0] + w / 2, pos[1] + l / 2], %, "edge2")
|
||||
|> lineTo([pos[0] - (w / 2), pos[1] + l / 2], %, "edge3")
|
||||
|> close(%, "edge4")
|
||||
return rr
|
||||
}
|
||||
// build the body of the focusrite scarlett solo gen 4
|
||||
// only used for visualization
|
||||
const scarlett_body = rectShape([0, 0], width, length)
|
||||
|> extrude(depth, %)
|
||||
|> fillet({
|
||||
radius: radius,
|
||||
tags: [
|
||||
getEdge("edge2", %),
|
||||
getEdge("edge4", %),
|
||||
getOppositeEdge("edge2", %),
|
||||
getOppositeEdge("edge4", %)
|
||||
]
|
||||
}, %)
|
||||
// build the bracket sketch around the body
|
||||
fn bracketSketch = (w, d, t) => {
|
||||
const s = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: length / 2 + thk, z: 0 },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 0, z: 1 },
|
||||
z_axis: { x: 0, y: 1, z: 0 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([-w / 2 - t, d + t], %)
|
||||
|> lineTo([-w / 2 - t, -t], %, "edge1")
|
||||
|> lineTo([w / 2 + t, -t], %, "edge2")
|
||||
|> lineTo([w / 2 + t, d + t], %, "edge3")
|
||||
|> lineTo([w / 2, d + t], %, "edge4")
|
||||
|> lineTo([w / 2, 0], %, "edge5")
|
||||
|> lineTo([-w / 2, 0], %, "edge6")
|
||||
|> lineTo([-w / 2, d + t], %, "edge7")
|
||||
|> close(%, "edge8")
|
||||
return s
|
||||
}
|
||||
// build the body of the bracket
|
||||
const bracket_body = bracketSketch(width, depth, thk)
|
||||
|> extrude(length + 10, %)
|
||||
|> fillet({
|
||||
radius: radius,
|
||||
tags: [
|
||||
getNextAdjacentEdge("edge7", %),
|
||||
getNextAdjacentEdge("edge2", %),
|
||||
getNextAdjacentEdge("edge3", %),
|
||||
getNextAdjacentEdge("edge6", %)
|
||||
]
|
||||
}, %)
|
||||
// build the tabs of the mounting bracket (right side)
|
||||
const tabs_r = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: 0, z: depth + thk },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 1, z: 0 },
|
||||
z_axis: { x: 0, y: 0, z: 1 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([width / 2 + thk, length / 2 + thk], %)
|
||||
|> line([10, -5], %)
|
||||
|> line([0, -10], %)
|
||||
|> line([-10, -5], %)
|
||||
|> close(%)
|
||||
|> hole(circle([
|
||||
width / 2 + thk + hole_diam,
|
||||
length / 2 - hole_diam
|
||||
], hole_diam / 2, %), %)
|
||||
|> extrude(-thk, %)
|
||||
|> patternLinear3d({
|
||||
axis: [0, -1, 0],
|
||||
repetitions: 1,
|
||||
distance: length - 10
|
||||
}, %)
|
||||
// build the tabs of the mounting bracket (left side)
|
||||
const tabs_l = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: 0, z: depth + thk },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 1, z: 0 },
|
||||
z_axis: { x: 0, y: 0, z: 1 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([-width / 2 - thk, length / 2 + thk], %)
|
||||
|> line([-10, -5], %)
|
||||
|> line([0, -10], %)
|
||||
|> line([10, -5], %)
|
||||
|> close(%)
|
||||
|> hole(circle([
|
||||
-width / 2 - thk - hole_diam,
|
||||
length / 2 - hole_diam
|
||||
], hole_diam / 2, %), %)
|
||||
|> extrude(-thk, %)
|
||||
|> patternLinear3d({
|
||||
axis: [0, -1, 0],
|
||||
repetitions: 1,
|
||||
distance: length - 10
|
||||
}, %)
|
||||
"#;
|
||||
let tokens = crate::token::lexer(some_program_string).unwrap();
|
||||
let parser = crate::parser::Parser::new(tokens);
|
||||
let program = parser.ast().unwrap();
|
||||
println!("{:#?}", program);
|
||||
|
||||
let recasted = program.recast(&Default::default(), 0);
|
||||
// Its VERY important this comes back with zero new lines.
|
||||
assert_eq!(
|
||||
recasted,
|
||||
r#"// define constants
|
||||
const radius = 6.0
|
||||
const width = 144.0
|
||||
const length = 83.0
|
||||
const depth = 45.0
|
||||
const thk = 5
|
||||
const hole_diam = 5
|
||||
// define a rectangular shape func
|
||||
fn rectShape = (pos, w, l) => {
|
||||
const rr = startSketchOn('xy')
|
||||
|> startProfileAt([pos[0] - (w / 2), pos[1] - (l / 2)], %)
|
||||
|> lineTo([pos[0] + w / 2, pos[1] - (l / 2)], %, "edge1")
|
||||
|> lineTo([pos[0] + w / 2, pos[1] + l / 2], %, "edge2")
|
||||
|> lineTo([pos[0] - (w / 2), pos[1] + l / 2], %, "edge3")
|
||||
|> close(%, "edge4")
|
||||
return rr
|
||||
}
|
||||
// build the body of the focusrite scarlett solo gen 4
|
||||
// only used for visualization
|
||||
const scarlett_body = rectShape([0, 0], width, length)
|
||||
|> extrude(depth, %)
|
||||
|> fillet({
|
||||
radius: radius,
|
||||
tags: [
|
||||
getEdge("edge2", %),
|
||||
getEdge("edge4", %),
|
||||
getOppositeEdge("edge2", %),
|
||||
getOppositeEdge("edge4", %)
|
||||
]
|
||||
}, %)
|
||||
// build the bracket sketch around the body
|
||||
fn bracketSketch = (w, d, t) => {
|
||||
const s = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: length / 2 + thk, z: 0 },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 0, z: 1 },
|
||||
z_axis: { x: 0, y: 1, z: 0 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([-w / 2 - t, d + t], %)
|
||||
|> lineTo([-w / 2 - t, -t], %, "edge1")
|
||||
|> lineTo([w / 2 + t, -t], %, "edge2")
|
||||
|> lineTo([w / 2 + t, d + t], %, "edge3")
|
||||
|> lineTo([w / 2, d + t], %, "edge4")
|
||||
|> lineTo([w / 2, 0], %, "edge5")
|
||||
|> lineTo([-w / 2, 0], %, "edge6")
|
||||
|> lineTo([-w / 2, d + t], %, "edge7")
|
||||
|> close(%, "edge8")
|
||||
return s
|
||||
}
|
||||
// build the body of the bracket
|
||||
const bracket_body = bracketSketch(width, depth, thk)
|
||||
|> extrude(length + 10, %)
|
||||
|> fillet({
|
||||
radius: radius,
|
||||
tags: [
|
||||
getNextAdjacentEdge("edge7", %),
|
||||
getNextAdjacentEdge("edge2", %),
|
||||
getNextAdjacentEdge("edge3", %),
|
||||
getNextAdjacentEdge("edge6", %)
|
||||
]
|
||||
}, %)
|
||||
// build the tabs of the mounting bracket (right side)
|
||||
const tabs_r = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: 0, z: depth + thk },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 1, z: 0 },
|
||||
z_axis: { x: 0, y: 0, z: 1 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([width / 2 + thk, length / 2 + thk], %)
|
||||
|> line([10, -5], %)
|
||||
|> line([0, -10], %)
|
||||
|> line([-10, -5], %)
|
||||
|> close(%)
|
||||
|> hole(circle([
|
||||
width / 2 + thk + hole_diam,
|
||||
length / 2 - hole_diam
|
||||
], hole_diam / 2, %), %)
|
||||
|> extrude(-thk, %)
|
||||
|> patternLinear3d({
|
||||
axis: [0, -1, 0],
|
||||
repetitions: 1,
|
||||
distance: length - 10
|
||||
}, %)
|
||||
// build the tabs of the mounting bracket (left side)
|
||||
const tabs_l = startSketchOn({
|
||||
plane: {
|
||||
origin: { x: 0, y: 0, z: depth + thk },
|
||||
x_axis: { x: 1, y: 0, z: 0 },
|
||||
y_axis: { x: 0, y: 1, z: 0 },
|
||||
z_axis: { x: 0, y: 0, z: 1 }
|
||||
}
|
||||
})
|
||||
|> startProfileAt([-width / 2 - thk, length / 2 + thk], %)
|
||||
|> line([-10, -5], %)
|
||||
|> line([0, -10], %)
|
||||
|> line([10, -5], %)
|
||||
|> close(%)
|
||||
|> hole(circle([
|
||||
-width / 2 - thk - hole_diam,
|
||||
length / 2 - hole_diam
|
||||
], hole_diam / 2, %), %)
|
||||
|> extrude(-thk, %)
|
||||
|> patternLinear3d({
|
||||
axis: [0, -1, 0],
|
||||
repetitions: 1,
|
||||
distance: length - 10
|
||||
}, %)
|
||||
"#
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_recast_nested_var_declaration_in_fn_body() {
|
||||
let some_program_string = r#"fn cube = (pos, scale) => {
|
||||
@ -3543,7 +3798,7 @@ const mySk1 = startSketchOn('XY')
|
||||
// and another with just white space between others below
|
||||
|> ry(45, %)
|
||||
|> rx(45, %)
|
||||
// one more for good measure
|
||||
// one more for good measure
|
||||
"#
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user