mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
fmt: keep manual newlines after fn parameters in fn declarations, do not auto wrap (#21795)
This commit is contained in:
parent
209063ffd0
commit
62e2b7fbdb
6 changed files with 33 additions and 13 deletions
|
@ -847,6 +847,12 @@ fn (t Tree) arg(node ast.Param) &Node {
|
||||||
obj.add_terse('name', t.string_node(node.name))
|
obj.add_terse('name', t.string_node(node.name))
|
||||||
obj.add_terse('typ', t.type_node(node.typ))
|
obj.add_terse('typ', t.type_node(node.typ))
|
||||||
obj.add_terse('is_mut', t.bool_node(node.is_mut))
|
obj.add_terse('is_mut', t.bool_node(node.is_mut))
|
||||||
|
obj.add_terse('is_shared', t.bool_node(node.is_shared))
|
||||||
|
obj.add_terse('is_atomic', t.bool_node(node.is_atomic))
|
||||||
|
obj.add_terse('is_auto_rec', t.bool_node(node.is_auto_rec))
|
||||||
|
obj.add_terse('on_newline', t.bool_node(node.on_newline))
|
||||||
|
obj.add('pos', t.pos(node.pos))
|
||||||
|
obj.add('type_pos', t.pos(node.type_pos))
|
||||||
return obj
|
return obj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -683,6 +683,7 @@ pub:
|
||||||
is_auto_rec bool
|
is_auto_rec bool
|
||||||
type_pos token.Pos
|
type_pos token.Pos
|
||||||
is_hidden bool // interface first arg
|
is_hidden bool // interface first arg
|
||||||
|
on_newline bool // whether the argument starts on a new line
|
||||||
pub mut:
|
pub mut:
|
||||||
typ Type
|
typ Type
|
||||||
comments []Comment
|
comments []Comment
|
||||||
|
|
|
@ -84,7 +84,7 @@ pub fn (t &Table) stringify_anon_decl(node &AnonFn, cur_mod string, m2a map[stri
|
||||||
}
|
}
|
||||||
f.write_string('] ')
|
f.write_string('] ')
|
||||||
}
|
}
|
||||||
t.stringify_fn_after_name(node.decl, mut f, cur_mod, m2a, false)
|
t.stringify_fn_after_name(node.decl, mut f, cur_mod, m2a)
|
||||||
return f.str()
|
return f.str()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,12 +132,11 @@ pub fn (t &Table) stringify_fn_decl(node &FnDecl, cur_mod string, m2a map[string
|
||||||
if name in ['+', '-', '*', '/', '%', '<', '>', '==', '!=', '>=', '<='] {
|
if name in ['+', '-', '*', '/', '%', '<', '>', '==', '!=', '>=', '<='] {
|
||||||
f.write_string(' ')
|
f.write_string(' ')
|
||||||
}
|
}
|
||||||
t.stringify_fn_after_name(node, mut f, cur_mod, m2a, needs_wrap)
|
t.stringify_fn_after_name(node, mut f, cur_mod, m2a)
|
||||||
return f.str()
|
return f.str()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (t &Table) stringify_fn_after_name(node &FnDecl, mut f strings.Builder, cur_mod string, m2a map[string]string,
|
fn (t &Table) stringify_fn_after_name(node &FnDecl, mut f strings.Builder, cur_mod string, m2a map[string]string) {
|
||||||
needs_wrap bool) {
|
|
||||||
mut add_para_types := true
|
mut add_para_types := true
|
||||||
mut is_wrap_needed := false
|
mut is_wrap_needed := false
|
||||||
if node.generic_names.len > 0 {
|
if node.generic_names.len > 0 {
|
||||||
|
@ -163,7 +162,9 @@ fn (t &Table) stringify_fn_after_name(node &FnDecl, mut f strings.Builder, cur_m
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f.write_string('(')
|
f.write_string('(')
|
||||||
mut last_len := 0
|
mut old_pline := node.pos.line_nr
|
||||||
|
mut pline := node.pos.line_nr
|
||||||
|
mut nparams_on_pline := 0
|
||||||
for i, param in node.params {
|
for i, param in node.params {
|
||||||
// skip receiver
|
// skip receiver
|
||||||
if node.is_method && i == 0 {
|
if node.is_method && i == 0 {
|
||||||
|
@ -190,6 +191,14 @@ fn (t &Table) stringify_fn_after_name(node &FnDecl, mut f strings.Builder, cur_m
|
||||||
if is_wrap_needed {
|
if is_wrap_needed {
|
||||||
f.write_string('\t')
|
f.write_string('\t')
|
||||||
}
|
}
|
||||||
|
if param.on_newline {
|
||||||
|
f.write_string('\n\t')
|
||||||
|
pline++
|
||||||
|
nparams_on_pline = 0
|
||||||
|
}
|
||||||
|
if pline == old_pline && nparams_on_pline > 0 {
|
||||||
|
f.write_string(' ')
|
||||||
|
}
|
||||||
if param.is_mut {
|
if param.is_mut {
|
||||||
f.write_string(param.typ.share().str() + ' ')
|
f.write_string(param.typ.share().str() + ' ')
|
||||||
}
|
}
|
||||||
|
@ -230,13 +239,10 @@ fn (t &Table) stringify_fn_after_name(node &FnDecl, mut f strings.Builder, cur_m
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !is_last_param {
|
if !is_last_param {
|
||||||
if needs_wrap && f.len - last_len > 100 {
|
f.write_string(',')
|
||||||
last_len = f.len
|
|
||||||
f.write_string(',\n\t')
|
|
||||||
} else {
|
|
||||||
f.write_string(', ')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
nparams_on_pline++
|
||||||
|
old_pline = pline
|
||||||
}
|
}
|
||||||
f.write_string(')')
|
f.write_string(')')
|
||||||
if node.return_type != void_type {
|
if node.return_type != void_type {
|
||||||
|
|
|
@ -5,7 +5,8 @@ import time { sleep }
|
||||||
|
|
||||||
const alt = '.,-~:;=!*#$@'
|
const alt = '.,-~:;=!*#$@'
|
||||||
|
|
||||||
fn rd(cs int, ls int, a f64, b f64) {
|
fn rd(cs int, ls int, a f64,
|
||||||
|
b f64) {
|
||||||
tt_spacing, p_spacing := 0.07, 0.02
|
tt_spacing, p_spacing := 0.07, 0.02
|
||||||
r1, r2, k2 := 1, 2, 5
|
r1, r2, k2 := 1, 2, 5
|
||||||
k1 := cs * k2 * 2 / (20 * (r1 + r2))
|
k1 := cs * k2 * 2 / (20 * (r1 + r2))
|
||||||
|
|
|
@ -58,7 +58,8 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_str_for_multi_return(mut g gen.Gen, info table.MultiReturn, styp string, str_fn_name string) {
|
fn gen_str_for_multi_return(mut g gen.Gen,
|
||||||
|
info table.MultiReturn, styp string, str_fn_name string) {
|
||||||
for i, _ in info.types {
|
for i, _ in info.types {
|
||||||
println('\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg${i}));')
|
println('\tstrings__Builder_write(&sb, _STR("\'%.*s\\000\'", 2, a.arg${i}));')
|
||||||
}
|
}
|
||||||
|
|
|
@ -894,6 +894,7 @@ fn (mut p Parser) fn_params() ([]ast.Param, bool, bool) {
|
||||||
|| (p.tok.kind == .key_mut && (p.peek_tok.kind in [.amp, .ellipsis, .key_fn, .lsbr]
|
|| (p.tok.kind == .key_mut && (p.peek_tok.kind in [.amp, .ellipsis, .key_fn, .lsbr]
|
||||||
|| p.peek_token(2).kind == .comma || p.peek_token(2).kind == .rpar
|
|| p.peek_token(2).kind == .comma || p.peek_token(2).kind == .rpar
|
||||||
|| (p.peek_tok.kind == .name && p.peek_token(2).kind == .dot)))
|
|| (p.peek_tok.kind == .name && p.peek_token(2).kind == .dot)))
|
||||||
|
mut prev_param_newline := p.tok.pos().line_nr
|
||||||
// TODO: copy paste, merge 2 branches
|
// TODO: copy paste, merge 2 branches
|
||||||
if types_only {
|
if types_only {
|
||||||
mut param_no := 1
|
mut param_no := 1
|
||||||
|
@ -983,7 +984,9 @@ fn (mut p Parser) fn_params() ([]ast.Param, bool, bool) {
|
||||||
typ: param_type
|
typ: param_type
|
||||||
type_pos: type_pos
|
type_pos: type_pos
|
||||||
comments: comments
|
comments: comments
|
||||||
|
on_newline: prev_param_newline != pos.line_nr
|
||||||
}
|
}
|
||||||
|
prev_param_newline = pos.line_nr
|
||||||
param_no++
|
param_no++
|
||||||
if param_no > 1024 {
|
if param_no > 1024 {
|
||||||
p.error_with_pos('too many parameters', pos)
|
p.error_with_pos('too many parameters', pos)
|
||||||
|
@ -1094,7 +1097,9 @@ fn (mut p Parser) fn_params() ([]ast.Param, bool, bool) {
|
||||||
typ: typ
|
typ: typ
|
||||||
type_pos: type_pos[i]
|
type_pos: type_pos[i]
|
||||||
comments: comments
|
comments: comments
|
||||||
|
on_newline: prev_param_newline != param_pos[i].line_nr
|
||||||
}
|
}
|
||||||
|
prev_param_newline = param_pos[i].line_nr
|
||||||
// if typ.typ.kind == .variadic && p.tok.kind == .comma {
|
// if typ.typ.kind == .variadic && p.tok.kind == .comma {
|
||||||
if is_variadic && p.tok.kind == .comma && p.peek_tok.kind != .rpar {
|
if is_variadic && p.tok.kind == .comma && p.peek_tok.kind != .rpar {
|
||||||
p.error_with_pos('cannot use ...(variadic) with non-final parameter ${para_name}',
|
p.error_with_pos('cannot use ...(variadic) with non-final parameter ${para_name}',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue