Skip to content

Commit 2bcbda5

Browse files
authored
parser, fmt: fix formatting assign static method to anon fn (#19505)
1 parent dd7f3a7 commit 2bcbda5

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

vlib/v/fmt/fmt.v

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1885,6 +1885,16 @@ pub fn (mut f Fmt) at_expr(node ast.AtExpr) {
18851885
f.write(node.name)
18861886
}
18871887

1888+
fn (mut f Fmt) write_static_method(name string, short_name string) {
1889+
f.mark_import_as_used(name.split('__static__')[0])
1890+
if short_name.contains('.') {
1891+
indx := short_name.index('.') or { -1 } + 1
1892+
f.write(short_name[0..indx] + short_name[indx..].replace('__static__', '.').capitalize())
1893+
} else {
1894+
f.write(short_name.replace('__static__', '.').capitalize())
1895+
}
1896+
}
1897+
18881898
pub fn (mut f Fmt) call_expr(node ast.CallExpr) {
18891899
mut is_method_newline := false
18901900
if node.is_method {
@@ -1922,13 +1932,7 @@ pub fn (mut f Fmt) call_expr(node ast.CallExpr) {
19221932
} else {
19231933
name := f.short_module(node.name)
19241934
if node.name.contains('__static__') {
1925-
f.mark_import_as_used(node.name.split('__static__')[0])
1926-
if name.contains('.') {
1927-
indx := name.index('.') or { -1 } + 1
1928-
f.write(name[0..indx] + name[indx..].replace('__static__', '.').capitalize())
1929-
} else {
1930-
f.write(name.replace('__static__', '.').capitalize())
1931-
}
1935+
f.write_static_method(node.name, name)
19321936
} else {
19331937
f.mark_import_as_used(name)
19341938
f.write(name)
@@ -2203,7 +2207,12 @@ pub fn (mut f Fmt) ident(node ast.Ident) {
22032207
}
22042208
}
22052209
name := f.short_module(node.name)
2206-
f.write(name)
2210+
if node.name.contains('__static__') {
2211+
f.write_static_method(node.name, name)
2212+
} else {
2213+
f.mark_import_as_used(name)
2214+
f.write(name)
2215+
}
22072216
if node.concrete_types.len > 0 {
22082217
f.write('[')
22092218
for i, concrete_type in node.concrete_types {

vlib/v/parser/parser.v

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2843,6 +2843,7 @@ fn (mut p Parser) name_expr() ast.Expr {
28432843
info: ast.IdentFn{
28442844
typ: fn_type
28452845
}
2846+
pos: pos
28462847
scope: p.scope
28472848
}
28482849
}

vlib/v/tests/assign_static_method_to_anon_fn_test.v

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ fn Foo.bar() string {
77
}
88

99
fn test_assign_static_method_to_anon_fn() {
10-
// vfmt off
1110
anon_fn := Foo.bar
12-
// vfmt on
1311
ret := anon_fn()
1412
assert ret == 'bar'
1513
}

0 commit comments

Comments
 (0)