fmt-rfcs
                                
                                
                                
                                    fmt-rfcs copied to clipboard
                            
                            
                            
                        Multi-line expressions on both sides of an assignment shouldn't wrap to the same indent level
I discovered this issue in some code I'm working on, and constructed this sample to match the issue I observed:
impl SomeType {
    fn method(&mut self) {
        self.array[array_index as usize]
            .as_mut()
            .expect("thing must exist")
            .extra_info = Some(ExtraInfo {
            parent,
            count: count as u16,
            children: children.into_boxed_slice(),
        });
    }
}
The fields of ExtraInfo should not be wrapping to the same indent level as the method chain. I can imagine a few ways to format this better, and don't feel strongly about which one, just that this definitely isn't the right formatting.
This also happens with a simpler version:
impl SomeType {
    fn method(&mut self) {
        self.array[array_index as usize]
            .as_mut()
            .expect("thing must exist")
            .extra_info =
            long_long_long_long_long_long_long_long_long_long_long_long_long_long_long;
    }
}
                                    
                                    
                                    
                                
Turns out this happens with other binary operators like + too, not just =.
@compiler-errors came up with a concise rule for how to fix these cases:
The parent identation that we use to make any relative indent/deindent for binary operators should use the indentation level of the last line of the LHS, not the first.
We discussed this in the T-style meeting today, and the consensus was that we should adopt the rule that Josh just mentioned:
The parent indentation that we use to make any relative indent/deindent for binary operators should use the indentation level of the last line of the LHS, not the first.
(Credit to @compiler-errors for this rule.)
@rustbot claim