Fix to not add extra spaces when formatting call (#6652)

This commit is contained in:
Jonathan Tran
2025-05-02 09:16:07 -04:00
committed by GitHub
parent c2dd4d1d2e
commit 1c697d30ee
6 changed files with 68 additions and 16 deletions

View File

@ -55,7 +55,7 @@ fn sum(arr):
// We use `assert` to check that our `sum` function gives the // We use `assert` to check that our `sum` function gives the
// expected result. It's good to check your work! // expected result. It's good to check your work!
assert( assert(
sum([1, 2, 3]), sum([1, 2, 3]),
isEqualTo = 6, isEqualTo = 6,
tolerance = 0.1, tolerance = 0.1,
error = "1 + 2 + 3 summed is 6", error = "1 + 2 + 3 summed is 6",

View File

@ -232205,7 +232205,7 @@
"unpublished": false, "unpublished": false,
"deprecated": false, "deprecated": false,
"examples": [ "examples": [
"// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(@arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(@arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
"// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(\n arr,\n initial = 0,\n f = fn(i, result_so_far) {\n return i + result_so_far\n },\n)\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)", "// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(\n arr,\n initial = 0,\n f = fn(i, result_so_far) {\n return i + result_so_far\n },\n)\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
"// Declare a function that sketches a decagon.\nfn decagon(@radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" "// Declare a function that sketches a decagon.\nfn decagon(@radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()"
] ]

View File

@ -126,7 +126,7 @@ fn armRestProfile(@plane, offset) {
export fn armRest(@plane, offset) { export fn armRest(@plane, offset) {
path = armRestPath( offsetPlane(plane, offset = offset)) path = armRestPath( offsetPlane(plane, offset = offset))
profile = armRestProfile( offsetPlane(-XZ, offset = 20), offset = -offset) profile = armRestProfile(offsetPlane(-XZ, offset = 20), offset = -offset)
sweep(profile, path = path) sweep(profile, path = path)
return 0 return 0
} }

View File

@ -377,7 +377,7 @@ impl CallExpression {
impl CallExpressionKw { impl CallExpressionKw {
fn recast_args(&self, options: &FormatOptions, indentation_level: usize, ctxt: ExprContext) -> Vec<String> { fn recast_args(&self, options: &FormatOptions, indentation_level: usize, ctxt: ExprContext) -> Vec<String> {
let mut arg_list = if let Some(first_arg) = &self.unlabeled { let mut arg_list = if let Some(first_arg) = &self.unlabeled {
vec![first_arg.recast(options, indentation_level, ctxt)] vec![first_arg.recast(options, indentation_level, ctxt).trim().to_owned()]
} else { } else {
Vec::with_capacity(self.arguments.len()) Vec::with_capacity(self.arguments.len())
}; };
@ -2584,6 +2584,58 @@ sketch002 = startSketchOn({
assert_eq!(actual, input); assert_eq!(actual, input);
} }
#[test]
fn unparse_call_inside_function_single_line() {
let input = r#"fn foo() {
toDegrees(atan(0.5), foo = 1)
return 0
}
"#;
let ast = crate::parsing::top_level_parse(input).unwrap();
let actual = ast.recast(&FormatOptions::new(), 0);
assert_eq!(actual, input);
}
#[test]
fn unparse_call_inside_function_args_multiple_lines() {
let input = r#"fn foo() {
toDegrees(
atan(0.5),
foo = 1,
bar = 2,
baz = 3,
qux = 4,
)
return 0
}
"#;
let ast = crate::parsing::top_level_parse(input).unwrap();
let actual = ast.recast(&FormatOptions::new(), 0);
assert_eq!(actual, input);
}
#[test]
fn unparse_call_inside_function_single_arg_multiple_lines() {
let input = r#"fn foo() {
toDegrees(
[
profile0,
profile1,
profile2,
profile3,
profile4,
profile5
],
key = 1,
)
return 0
}
"#;
let ast = crate::parsing::top_level_parse(input).unwrap();
let actual = ast.recast(&FormatOptions::new(), 0);
assert_eq!(actual, input);
}
#[test] #[test]
fn recast_objects_with_comments() { fn recast_objects_with_comments() {
use winnow::Parser; use winnow::Parser;

View File

@ -605,19 +605,19 @@ flowchart LR
84 --- 147 84 --- 147
84 --- 233 84 --- 233
87 --- 169 87 --- 169
87 x--> 184 87 x--> 183
87 --- 212 87 --- 212
87 --- 257 87 --- 257
89 --- 168 89 --- 168
89 x--> 184 89 x--> 183
89 --- 214 89 --- 214
89 --- 258 89 --- 258
90 --- 167 90 --- 167
90 x--> 184 90 x--> 183
90 --- 211 90 --- 211
90 --- 256 90 --- 256
92 --- 166 92 --- 166
92 x--> 184 92 x--> 183
92 --- 213 92 --- 213
92 --- 259 92 --- 259
119 --- 162 119 --- 162
@ -865,10 +865,10 @@ flowchart LR
221 <--x 181 221 <--x 181
222 <--x 181 222 <--x 181
193 <--x 182 193 <--x 182
211 <--x 183 211 <--x 184
212 <--x 183 212 <--x 184
213 <--x 183 213 <--x 184
214 <--x 183 214 <--x 184
203 <--x 186 203 <--x 186
204 <--x 186 204 <--x 186
205 <--x 186 205 <--x 186

View File

@ -241,8 +241,8 @@ flowchart LR
7["Plane<br>[334, 354, 8]"] 7["Plane<br>[334, 354, 8]"]
8["Plane<br>[3807, 3842, 8]"] 8["Plane<br>[3807, 3842, 8]"]
9["Plane<br>[3807, 3842, 8]"] 9["Plane<br>[3807, 3842, 8]"]
10["Plane<br>[3873, 3902, 8]"] 10["Plane<br>[3871, 3900, 8]"]
11["Plane<br>[3873, 3902, 8]"] 11["Plane<br>[3871, 3900, 8]"]
12["StartSketchOnPlane<br>[2700, 2720, 8]"] 12["StartSketchOnPlane<br>[2700, 2720, 8]"]
13["StartSketchOnPlane<br>[1737, 1757, 8]"] 13["StartSketchOnPlane<br>[1737, 1757, 8]"]
14["StartSketchOnPlane<br>[3258, 3278, 8]"] 14["StartSketchOnPlane<br>[3258, 3278, 8]"]
@ -268,8 +268,8 @@ flowchart LR
234["Sweep Extrusion<br>[2618, 2642, 8]"] 234["Sweep Extrusion<br>[2618, 2642, 8]"]
235["Sweep Extrusion<br>[3180, 3204, 8]"] 235["Sweep Extrusion<br>[3180, 3204, 8]"]
236["Sweep Extrusion<br>[3180, 3204, 8]"] 236["Sweep Extrusion<br>[3180, 3204, 8]"]
237["Sweep Sweep<br>[3924, 3951, 8]"] 237["Sweep Sweep<br>[3922, 3949, 8]"]
238["Sweep Sweep<br>[3924, 3951, 8]"] 238["Sweep Sweep<br>[3922, 3949, 8]"]
239[Wall] 239[Wall]
240[Wall] 240[Wall]
241[Wall] 241[Wall]