mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
fmt: update expr_is_single_line for MatchExpr, StructInit and CallExpr with or block (#7564)
This commit is contained in:
parent
2c0fba5480
commit
e7ca5dd17a
@ -1192,11 +1192,17 @@ pub:
|
||||
|
||||
pub fn (stmt Stmt) position() token.Position {
|
||||
match stmt {
|
||||
AssertStmt, AssignStmt, Block, BranchStmt, CompFor, ConstDecl, DeferStmt, EnumDecl, ExprStmt, FnDecl, ForCStmt, ForInStmt, ForStmt, GotoLabel, GotoStmt, Import, Return, StructDecl, GlobalDecl, HashStmt, InterfaceDecl, Module, SqlStmt { return stmt.pos }
|
||||
GoStmt { return stmt.call_expr.position() }
|
||||
TypeDecl { match stmt {
|
||||
AssertStmt, AssignStmt, Block, BranchStmt, CompFor, ConstDecl, DeferStmt, EnumDecl, ExprStmt, FnDecl, ForCStmt, ForInStmt, ForStmt, GotoLabel, GotoStmt, Import, Return, StructDecl, GlobalDecl, HashStmt, InterfaceDecl, Module, SqlStmt {
|
||||
return stmt.pos
|
||||
}
|
||||
GoStmt {
|
||||
return stmt.call_expr.position()
|
||||
}
|
||||
TypeDecl {
|
||||
match stmt {
|
||||
AliasTypeDecl, FnTypeDecl, SumTypeDecl { return stmt.pos }
|
||||
} }
|
||||
}
|
||||
}
|
||||
// Please, do NOT use else{} here.
|
||||
// This match is exhaustive *on purpose*, to help force
|
||||
// maintaining/implementing proper .pos fields.
|
||||
|
@ -98,12 +98,20 @@ pub fn (mut d Doc) stmt_signature(stmt ast.Stmt) string {
|
||||
// stmt_name returns the name of a given `ast.Stmt` node.
|
||||
pub fn (d Doc) stmt_name(stmt ast.Stmt) string {
|
||||
match stmt {
|
||||
ast.FnDecl, ast.StructDecl, ast.EnumDecl, ast.InterfaceDecl { return stmt.name }
|
||||
ast.TypeDecl { match stmt {
|
||||
ast.FnDecl, ast.StructDecl, ast.EnumDecl, ast.InterfaceDecl {
|
||||
return stmt.name
|
||||
}
|
||||
ast.TypeDecl {
|
||||
match stmt {
|
||||
ast.FnTypeDecl, ast.AliasTypeDecl, ast.SumTypeDecl { return stmt.name }
|
||||
} }
|
||||
ast.ConstDecl { return '' } // leave it blank
|
||||
else { return '' }
|
||||
}
|
||||
}
|
||||
ast.ConstDecl {
|
||||
return ''
|
||||
} // leave it blank
|
||||
else {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,11 +119,17 @@ pub fn (d Doc) stmt_name(stmt ast.Stmt) string {
|
||||
// is exposed to the public.
|
||||
pub fn (d Doc) stmt_pub(stmt ast.Stmt) bool {
|
||||
match stmt {
|
||||
ast.FnDecl, ast.StructDecl, ast.EnumDecl, ast.InterfaceDecl, ast.ConstDecl { return stmt.is_pub }
|
||||
ast.TypeDecl { match stmt {
|
||||
ast.FnDecl, ast.StructDecl, ast.EnumDecl, ast.InterfaceDecl, ast.ConstDecl {
|
||||
return stmt.is_pub
|
||||
}
|
||||
ast.TypeDecl {
|
||||
match stmt {
|
||||
ast.FnTypeDecl, ast.AliasTypeDecl, ast.SumTypeDecl { return stmt.is_pub }
|
||||
} }
|
||||
else { return false }
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1696,8 +1696,25 @@ fn stmt_is_single_line(stmt ast.Stmt) bool {
|
||||
|
||||
fn expr_is_single_line(expr ast.Expr) bool {
|
||||
match expr {
|
||||
ast.IfExpr { return false }
|
||||
ast.Comment { return false }
|
||||
ast.IfExpr {
|
||||
return false
|
||||
}
|
||||
ast.Comment {
|
||||
return false
|
||||
}
|
||||
ast.MatchExpr {
|
||||
return false
|
||||
}
|
||||
ast.StructInit {
|
||||
if expr.fields.len > 0 || expr.pre_comments.len > 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
ast.CallExpr {
|
||||
if expr.or_block.stmts.len > 1 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
else {}
|
||||
}
|
||||
return true
|
||||
|
52
vlib/v/fmt/tests/match_keep.vv
Normal file
52
vlib/v/fmt/tests/match_keep.vv
Normal file
@ -0,0 +1,52 @@
|
||||
fn main() {
|
||||
// Nested match
|
||||
match 100 {
|
||||
0...1 {
|
||||
println('0 to 1')
|
||||
}
|
||||
else {
|
||||
match 200 {
|
||||
0...1 { println('0 to 1') }
|
||||
else { println('unknown value') }
|
||||
}
|
||||
}
|
||||
}
|
||||
// StructInit
|
||||
match 'a' {
|
||||
'b' { SpamStruct{} }
|
||||
}
|
||||
match 'a' {
|
||||
'b' {
|
||||
SpamStruct{
|
||||
x: 42
|
||||
}
|
||||
}
|
||||
}
|
||||
match 'a' {
|
||||
'b' {
|
||||
SpamStruct{
|
||||
// only a comment
|
||||
}
|
||||
}
|
||||
}
|
||||
// CallExpr with or block
|
||||
match 'a' {
|
||||
'b' { foo() or { panic(err) } }
|
||||
}
|
||||
match 'a' {
|
||||
'b' {
|
||||
foo() or {
|
||||
// do stuff
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
match 'a' {
|
||||
'b' {
|
||||
foo() or {
|
||||
another_stmt()
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user