fmt: restructure comment line break logic inside arrays (#8963)
							parent
							
								
									77b3440e44
								
							
						
					
					
						commit
						e4beea4268
					
				| 
						 | 
				
			
			@ -134,7 +134,7 @@ pub fn (mut f Fmt) wrap_long_line(penalty_idx int, add_indent bool) bool {
 | 
			
		|||
	if f.buffering {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if f.line_len <= fmt.max_len[penalty_idx] {
 | 
			
		||||
	if penalty_idx > 0 && f.line_len <= fmt.max_len[penalty_idx] {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	if f.out.buf[f.out.buf.len - 1] == ` ` {
 | 
			
		||||
| 
						 | 
				
			
			@ -1965,35 +1965,38 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) {
 | 
			
		|||
	mut inc_indent := false
 | 
			
		||||
	mut last_line_nr := node.pos.line_nr // to have the same newlines between array elements
 | 
			
		||||
	f.array_init_depth++
 | 
			
		||||
	for i, c in node.pre_cmnts {
 | 
			
		||||
		if c.pos.line_nr > last_line_nr {
 | 
			
		||||
			f.writeln('')
 | 
			
		||||
		} else if i > 0 {
 | 
			
		||||
			f.write(' ')
 | 
			
		||||
		}
 | 
			
		||||
		f.comment(c, level: .indent, iembed: true)
 | 
			
		||||
		last_line_nr = c.pos.last_line
 | 
			
		||||
	}
 | 
			
		||||
	if node.pre_cmnts.len > 0 {
 | 
			
		||||
		same_line := node.pre_cmnts[0].pos.line_nr == node.pos.line_nr
 | 
			
		||||
		if same_line && node.exprs.len > 0 {
 | 
			
		||||
			f.write(' ')
 | 
			
		||||
		} else if !same_line && node.exprs.len == 0 {
 | 
			
		||||
		if node.pre_cmnts[0].pos.line_nr > last_line_nr {
 | 
			
		||||
			f.writeln('')
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for i, c in node.pre_cmnts {
 | 
			
		||||
		f.comment(c, level: .indent, iembed: true)
 | 
			
		||||
		if i < node.pre_cmnts.len - 1 {
 | 
			
		||||
			if c.pos.last_line < node.pre_cmnts[i + 1].pos.line_nr {
 | 
			
		||||
				f.writeln('')
 | 
			
		||||
			} else {
 | 
			
		||||
				f.write(' ')
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			if c.pos.last_line < node.pos.last_line && node.exprs.len == 0 {
 | 
			
		||||
				f.writeln('')
 | 
			
		||||
			} else if node.exprs.len > 0 {
 | 
			
		||||
				f.write(' ')
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		last_line_nr = c.pos.last_line
 | 
			
		||||
	}
 | 
			
		||||
	mut set_comma := false
 | 
			
		||||
	for i, expr in node.exprs {
 | 
			
		||||
		line_nr := expr.position().line_nr
 | 
			
		||||
		pos := expr.position()
 | 
			
		||||
		if i == 0 {
 | 
			
		||||
			if f.array_init_depth > f.array_init_break.len {
 | 
			
		||||
				f.array_init_break << (last_line_nr < line_nr)
 | 
			
		||||
				f.array_init_break << pos.line_nr > last_line_nr
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		is_same_line_comment := i > 0
 | 
			
		||||
			&& (expr is ast.Comment && line_nr == node.exprs[i - 1].position().line_nr)
 | 
			
		||||
		line_break := f.array_init_break[f.array_init_depth - 1]
 | 
			
		||||
		mut penalty := if line_break && !is_same_line_comment { 0 } else { 4 }
 | 
			
		||||
		mut penalty := if line_break { 0 } else { 4 }
 | 
			
		||||
		if penalty > 0 {
 | 
			
		||||
			if i == 0 || should_decrease_arr_penalty(node.exprs[i - 1]) {
 | 
			
		||||
				penalty--
 | 
			
		||||
| 
						 | 
				
			
			@ -2028,17 +2031,15 @@ pub fn (mut f Fmt) array_init(node ast.ArrayInit) {
 | 
			
		|||
		}
 | 
			
		||||
		if i == node.exprs.len - 1 {
 | 
			
		||||
			if is_new_line {
 | 
			
		||||
				if !set_comma && expr !is ast.Comment {
 | 
			
		||||
				if !set_comma {
 | 
			
		||||
					f.write(',')
 | 
			
		||||
				}
 | 
			
		||||
				f.writeln('')
 | 
			
		||||
			} else if is_same_line_comment {
 | 
			
		||||
				f.writeln('')
 | 
			
		||||
			}
 | 
			
		||||
		} else if !set_comma && expr !is ast.Comment {
 | 
			
		||||
		} else if !set_comma {
 | 
			
		||||
			f.write(',')
 | 
			
		||||
		}
 | 
			
		||||
		last_line_nr = line_nr
 | 
			
		||||
		last_line_nr = pos.last_line
 | 
			
		||||
		set_comma = false
 | 
			
		||||
	}
 | 
			
		||||
	f.array_init_depth--
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue