Skip to content

[orm]v fmt removes commented code lines that contain valid syntax #26968

@Jengro777

Description

@Jengro777

Describe the feature

Comments in orm expressions will be removed by vfmt

    update_expr := {
        //name == name_dyn  
    }

Use Case

#!/usr/bin/env -S v run

import db.sqlite
import time

@[table: 'sys_users']
struct User {
pub:
	id         string     @[primary; sql_type: 'VARCHAR(255)'; unique]
	name       ?string    @[sql_type: 'VARCHAR(255)']
	nickname   ?string    @[sql_type: 'VARCHAR(255)']
	mobile     ?string    @[sql_type: 'VARCHAR(255)']
	email      ?string    @[sql_type: 'VARCHAR(255)']
	created_at time.Time  @[omitempty; sql_type: 'TIMESTAMP']
	updated_at ?time.Time @[default: new; omitempty; sql_type: 'TIMESTAMP']
}

// 查询用户数据
fn query_users(mut db sqlite.DB) ![]User {
	users := sql db {
		select from User
	}!
	return users
}

fn main() {
	mut db := init_database()!
	defer { db.close() or {} }

	insert_users(mut db) or { panic(err) }

	req := UserReq{
		name:     'Jengro'
		nickname: 'Woo'
		mobile:   '535770088'
		email:    'admin@admin.com'
	}
	dynamic_update_users(mut db, req) or { panic(err) }

	users := query_users(mut db) or { panic(err) }
	dump(users)
}

fn init_database() !&sqlite.DB {
	mut db := sqlite.connect(':memory:')!
	sql db {
		create table User
	}!
	return &db
}

fn insert_users(mut db sqlite.DB) ! {
	users1 := User{
		id:         '1'
		name:       'Jengro'
		nickname:   'Woo'
		mobile:     '535770088'
		email:      'admin@admin.com'
		created_at: time.now()
		updated_at: time.now()
	}

	users2 := User{
		id:         '2'
		name:       'Dev'
		nickname:   'T'
		mobile:     '15020579521'
		email:      'dev@dev.com'
		created_at: time.now()
		updated_at: time.now()
	}

	sql db {
		insert users1 into User
		insert users2 into User
	}!
}

struct UserReq {
	name     ?string @[json: 'name']
	nickname ?string @[json: 'nickname']
	mobile   ?string @[json: 'mobile']
	email    ?string @[json: 'email']
}

fn dynamic_update_users(mut db sqlite.DB, req UserReq) ! {
	name_dyn := 'Avey'
	update_expr := {
				if m := req.mobile { mobile == m },
				//name == name_dyn
		}

	sql db {
		dynamic update User set update_expr where id == '2'
	}!
}

v fmt -w test.v

Proposed Solution

Annotated code should be retained, even if it contains valid V syntax. The formatting tool should:
Keep all comments, including those containing code
Do not delete any comment lines

Other Information

No response

Acknowledgements

  • I may be able to implement this feature request
  • This feature might incur a breaking change

Version used

V 0.5.1 f34a22f

Environment details (OS name and version, etc.)

V full version V 0.5.1 8ef799c.f34a22f
OS linux, Deepin 25
Processor 20 cpus, 64bit, little endian, 13th Gen Intel(R) Core(TM) i5-13500
Memory 12.75GB/31.03GB
V executable /home/Jengro/opt/v/v
V last modified time 2026-04-24 03:19:44
V home dir OK, value: /home/Jengro/opt/v
VMODULES OK, value: /home/Jengro/.vmodules
VTMP OK, value: /tmp/v_1000
Current working dir OK, value: /home/Jengro
Git version git version 2.51.0
V git status 0.5.1-1334-gf34a22f8
.git/config present true
cc version cc (Deepin 12.3.0-17deepin17) 12.3.0
gcc version gcc (Deepin 12.3.0-17deepin17) 12.3.0
clang version Deepin clang version 17.0.6 (5deepin7)
tcc version tcc version 0.9.28rc 2025-02-13 HEAD@f8bd136d (x86_64 Linux)
tcc git status thirdparty-linux-amd64 696c1d84
emcc version N/A
glibc version ldd (Debian GLIBC 2.38-6deepin21) 2.38

Note

You can use the 👍 reaction to increase the issue's priority for developers.

Please note that only the 👍 reaction to the issue itself counts as a vote.
Other reactions and those to comments will not be taken into account.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions