fmt: reset const field align after multi line exprs (#9916)
parent
c82c8059cf
commit
dee733aae4
|
@ -37,9 +37,9 @@ const (
|
|||
'vlib/v/tests/generics_test.v', /* multi_generic_args<Foo<int>, Foo<int> >(...) becomes .... Foo<int>>(...) which does not parse */
|
||||
'vlib/v/tests/string_interpolation_test.v' /* TODO byteptr: &byte.str() behaves differently than byteptr.str() */,
|
||||
'vlib/v/gen/js/tests/js.v', /* local `hello` fn, gets replaced with module `hello` aliased as `hl` */
|
||||
'vlib/v/gen/c/cheaders.v' /* the preprocessor directives are formated to the V standard, even though they are in a string literal */,
|
||||
'examples/c_interop_wkhtmltopdf.v', /* &charptr --> &&char */
|
||||
'examples/path_tracing.v', /* block --> line comments corrupts code */
|
||||
'vlib/v/gen/c/cheaders.v' /* infix wrapping error */,
|
||||
]
|
||||
vfmt_verify_list = [
|
||||
'cmd/',
|
||||
|
|
|
@ -657,6 +657,9 @@ fn expr_is_single_line(expr ast.Expr) bool {
|
|||
}
|
||||
}
|
||||
}
|
||||
ast.StringLiteral {
|
||||
return expr.pos.line_nr == expr.pos.last_line
|
||||
}
|
||||
else {}
|
||||
}
|
||||
return true
|
||||
|
@ -888,6 +891,12 @@ pub fn (mut f Fmt) comp_for(node ast.CompFor) {
|
|||
f.writeln('}')
|
||||
}
|
||||
|
||||
struct ConstAlignInfo {
|
||||
mut:
|
||||
max int
|
||||
last_idx int
|
||||
}
|
||||
|
||||
pub fn (mut f Fmt) const_decl(node ast.ConstDecl) {
|
||||
if node.is_pub {
|
||||
f.write('pub ')
|
||||
|
@ -901,22 +910,36 @@ pub fn (mut f Fmt) const_decl(node ast.ConstDecl) {
|
|||
f.inside_const = false
|
||||
}
|
||||
f.write('const ')
|
||||
mut max := 0
|
||||
mut align_infos := []ConstAlignInfo{}
|
||||
if node.is_block {
|
||||
f.writeln('(')
|
||||
for field in node.fields {
|
||||
if field.name.len > max {
|
||||
max = field.name.len
|
||||
mut info := ConstAlignInfo{}
|
||||
for i, field in node.fields {
|
||||
if field.name.len > info.max {
|
||||
info.max = field.name.len
|
||||
}
|
||||
if !expr_is_single_line(field.expr) {
|
||||
info.last_idx = i
|
||||
align_infos << info
|
||||
info = ConstAlignInfo{}
|
||||
}
|
||||
}
|
||||
info.last_idx = node.fields.len
|
||||
align_infos << info
|
||||
f.indent++
|
||||
} else {
|
||||
align_infos << ConstAlignInfo{0, 1}
|
||||
}
|
||||
mut prev_field := if node.fields.len > 0 {
|
||||
ast.Node(node.fields[0])
|
||||
} else {
|
||||
ast.Node(ast.NodeError{})
|
||||
}
|
||||
for field in node.fields {
|
||||
mut align_idx := 0
|
||||
for i, field in node.fields {
|
||||
if i > align_infos[align_idx].last_idx {
|
||||
align_idx++
|
||||
}
|
||||
if field.comments.len > 0 {
|
||||
if f.should_insert_newline_before_node(ast.Expr(field.comments[0]), prev_field) {
|
||||
f.writeln('')
|
||||
|
@ -929,7 +952,7 @@ pub fn (mut f Fmt) const_decl(node ast.ConstDecl) {
|
|||
}
|
||||
name := field.name.after('.')
|
||||
f.write('$name ')
|
||||
f.write(strings.repeat(` `, max - field.name.len))
|
||||
f.write(strings.repeat(` `, align_infos[align_idx].max - field.name.len))
|
||||
f.write('= ')
|
||||
f.expr(field.expr)
|
||||
f.writeln('')
|
||||
|
|
|
@ -1 +1,27 @@
|
|||
const font = $embed_file('../assets/fonts/RobotoMono-Regular.ttf')
|
||||
|
||||
const (
|
||||
test_alignment = 123
|
||||
foo = Foo{
|
||||
f: 'foo'
|
||||
}
|
||||
spam = 456
|
||||
egg = 'lorem ipsum'
|
||||
spameggs = true
|
||||
)
|
||||
|
||||
const (
|
||||
bar = 'A string
|
||||
spanning multiple
|
||||
lines'
|
||||
baz = 'short'
|
||||
some_long_name = MyStruct{
|
||||
x: 42
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
a = 123
|
||||
abc = 123
|
||||
b = 123
|
||||
)
|
||||
|
|
|
@ -498,8 +498,8 @@ static inline void make_secret(uint64_t seed, uint64_t *secret){
|
|||
#define _PUSH_MANY(arr, val, tmp, tmp_typ) {tmp_typ tmp = (val); array_push_many(arr, tmp.data, tmp.len);}
|
||||
#define _IN_MAP(val, m) map_exists(m, val)
|
||||
'
|
||||
c_headers =
|
||||
c_helper_macros + c_unsigned_comparison_functions + c_common_macros + r'
|
||||
c_headers = c_helper_macros + c_unsigned_comparison_functions + c_common_macros +
|
||||
r'
|
||||
// c_headers
|
||||
typedef int (*qsort_callback_func)(const void*, const void*);
|
||||
#include <stdio.h> // TODO remove all these includes, define all function signatures and types manually
|
||||
|
@ -728,8 +728,7 @@ typedef bool (*MapEqFn)(voidptr, voidptr);
|
|||
typedef void (*MapCloneFn)(voidptr, voidptr);
|
||||
typedef void (*MapFreeFn)(voidptr);
|
||||
'
|
||||
bare_c_headers = c_helper_macros + c_unsigned_comparison_functions +
|
||||
c_common_macros +
|
||||
bare_c_headers = c_helper_macros + c_unsigned_comparison_functions + c_common_macros +
|
||||
'
|
||||
|
||||
#define _VFREESTANDING
|
||||
|
|
Loading…
Reference in New Issue