Before formatting:
vm.get_method_or_type_error(
obj.clone(),
"__getitem__",
|| format!("'{}' object is not iterable", obj.class().name)
)?;
After formatting:
vm.get_method_or_type_error(obj.clone(), "__getitem__", || {
format!("'{}' object is not iterable", obj.class().name)
})?;
Maybe lazy string (empty closure params and format! call inside) and other single expression closures should not be split by a new line, and instead being considered as an atomic element?
If I add more arguments, so that a list would be formatted as arg-per-line anyway, it behaves exactly like that and is more readable in my opinion
vm.get_method_or_type_error(
obj.clone(),
obj.clone(),
obj.clone(),
"__getitem__",
|| format!("hello, world1111111111111112222222222, 2222222221111111111111222"),
)?;
I think always adopting a vertical layout for a function's arguments is better, regardless of the closure having a parameter or not.
As an example, see the code below where the closure takes a parameter:
fn foo() {
- vm.get_method_or_type_error(
- obj.clone(),
- |arg: &str| format!("{}: '{}' object is not iterable", arg, obj.class().name)
- )?;
+ vm.get_method_or_type_error(obj.clone(), |arg: &str| {
+ format!("{}: '{}' object is not iterable", arg, obj.class().name)
+ })?;
}
If a function's arguments meets the following criteria, then a vertical layout would be selected:
What do you think @topecongiro ?
@scampi I would rather not add additional complex heuristics to function formatting, as it's already enough complex and hacky.
I think that we can fix this by disabling adding a block to the body of the closure when the closure is the last argument of the function call.
Most helpful comment
@scampi I would rather not add additional complex heuristics to function formatting, as it's already enough complex and hacky.
I think that we can fix this by disabling adding a block to the body of the closure when the closure is the last argument of the function call.