parser,fmt: handle array pre-comments separately from exprs (#8884)
							parent
							
								
									18e88d2fc8
								
							
						
					
					
						commit
						f18adf7759
					
				|  | @ -942,6 +942,7 @@ pub: | |||
| 	elem_type_pos token.Position // `Type` in []Type{} position
 | ||||
| 	exprs         []Expr      // `[expr, expr]` or `[expr]Type{}` for fixed array
 | ||||
| 	ecmnts        [][]Comment // optional iembed comments after each expr
 | ||||
| 	pre_cmnts     []Comment | ||||
| 	is_fixed      bool | ||||
| 	has_val       bool // fixed size literal `[expr, expr]!`
 | ||||
| 	mod           string | ||||
|  |  | |||
|  | @ -1961,6 +1961,18 @@ pub fn (mut f Fmt) array_init(it ast.ArrayInit) { | |||
| 	mut inc_indent := false | ||||
| 	mut last_line_nr := it.pos.line_nr // to have the same newlines between array elements
 | ||||
| 	f.array_init_depth++ | ||||
| 	for i, c in it.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 it.exprs.len == 0 && it.pre_cmnts.len > 0 && it.pre_cmnts[0].pos.line_nr != it.pos.line_nr { | ||||
| 		f.writeln('') | ||||
| 	} | ||||
| 	for i, expr in it.exprs { | ||||
| 		line_nr := expr.position().line_nr | ||||
| 		if i == 0 { | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ fn only_comments_array() { | |||
| 		/* 4, */ | ||||
| 	] | ||||
| 	arr2 := [ | ||||
| 		/* 1, */ /* 2, *//* 3, */ | ||||
| 		/* 1, */ /* 2, */ /* 3, */ | ||||
| 		/* 4, */ | ||||
| 	] | ||||
| } | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { | |||
| 	mut elem_type_pos := first_pos | ||||
| 	mut exprs := []ast.Expr{} | ||||
| 	mut ecmnts := [][]ast.Comment{} | ||||
| 	mut pre_cmnts := []ast.Comment{} | ||||
| 	mut is_fixed := false | ||||
| 	mut has_val := false | ||||
| 	mut has_type := false | ||||
|  | @ -39,6 +40,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { | |||
| 		last_pos = p.tok.position() | ||||
| 	} else { | ||||
| 		// [1,2,3] or [const]byte
 | ||||
| 		pre_cmnts = p.eat_comments({}) | ||||
| 		for i := 0; p.tok.kind !in [.rsbr, .eof]; i++ { | ||||
| 			exprs << p.expr(0) | ||||
| 			ecmnts << p.eat_comments({}) | ||||
|  | @ -141,6 +143,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { | |||
| 		typ: array_type | ||||
| 		exprs: exprs | ||||
| 		ecmnts: ecmnts | ||||
| 		pre_cmnts: pre_cmnts | ||||
| 		pos: pos | ||||
| 		elem_type_pos: elem_type_pos | ||||
| 		has_len: has_len | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue