1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

vfmt: line comments fixes

This commit is contained in:
Alexander Medvednikov 2019-11-18 13:10:31 +03:00
parent 439bb0c5de
commit 1ccd1979a4
11 changed files with 87 additions and 42 deletions

View File

@ -35,7 +35,7 @@ fn (p mut Parser) enum_decl(no_name bool) {
p.warn('enum values cannot contain uppercase letters, use snake_case instead') p.warn('enum values cannot contain uppercase letters, use snake_case instead')
} }
fields << field fields << field
p.fgenln('') p.fgen_nl()
name := '${mod_gen_name(p.mod)}__${enum_name}_$field' name := '${mod_gen_name(p.mod)}__${enum_name}_$field'
if p.tok == .assign { if p.tok == .assign {
mut enum_assign_tidx := p.cur_tok_index() mut enum_assign_tidx := p.cur_tok_index()

View File

@ -223,7 +223,9 @@ fn (p mut Parser) fn_decl() {
is_amp := p.tok == .amp is_amp := p.tok == .amp
if is_mut || is_amp { if is_mut || is_amp {
p.check(p.tok) p.check(p.tok)
p.fspace() if !is_amp {
p.fspace()
}
} }
receiver_typ = p.get_type() receiver_typ = p.get_type()
t := p.table.find_type(receiver_typ) t := p.table.find_type(receiver_typ)
@ -364,7 +366,7 @@ fn (p mut Parser) fn_decl() {
if !is_c && !p.is_vh && !is_fn_header { if !is_c && !p.is_vh && !is_fn_header {
p.fspace() p.fspace()
p.check(.lcbr) p.check(.lcbr)
//p.fgenln('') //p.fgen_nl()
} }
// Register ?option type // Register ?option type
if typ.starts_with('Option_') { if typ.starts_with('Option_') {
@ -425,7 +427,7 @@ fn (p mut Parser) fn_decl() {
if is_fn_header { if is_fn_header {
p.genln('$typ $fn_name_cgen($str_args);') p.genln('$typ $fn_name_cgen($str_args);')
p.fgenln('') p.fgen_nl()
} }
if is_c { if is_c {
p.fgenln('\n') p.fgenln('\n')

View File

@ -41,6 +41,7 @@ fn (p mut Parser) match_statement(is_expr bool) string {
// unwrap match if there is only else // unwrap match if there is only else
if i == 0 { if i == 0 {
p.fspace()
if is_expr { if is_expr {
// statements are dissallowed (if match is expression) so user cant declare variables there and so on // statements are dissallowed (if match is expression) so user cant declare variables there and so on
@ -80,6 +81,7 @@ fn (p mut Parser) match_statement(is_expr bool) string {
// allow braces is else // allow braces is else
got_brace := p.tok == .lcbr got_brace := p.tok == .lcbr
if got_brace { if got_brace {
p.fspace()
p.check(.lcbr) p.check(.lcbr)
} }
@ -97,6 +99,7 @@ fn (p mut Parser) match_statement(is_expr bool) string {
p.returns = false p.returns = false
p.genln('else // default:') p.genln('else // default:')
p.fspace()
p.check(.lcbr) p.check(.lcbr)
p.genln('{ ') p.genln('{ ')
@ -190,6 +193,7 @@ fn (p mut Parser) match_statement(is_expr bool) string {
} }
else { else {
p.returns = false p.returns = false
p.fspace()
p.check(.lcbr) p.check(.lcbr)
p.genln('{ ') p.genln('{ ')
@ -199,7 +203,7 @@ fn (p mut Parser) match_statement(is_expr bool) string {
// p.gen(')') // p.gen(')')
} }
i++ i++
p.fgenln('') p.fgen_nl()
} }
if is_expr { if is_expr {

View File

@ -407,10 +407,10 @@ fn (p mut Parser) parse(pass Pass) {
if !p.cgen.nogen { if !p.cgen.nogen {
p.cgen.consts << g p.cgen.consts << g
} }
p.fgenln('') p.fgen_nl()
if p.tok != .key_global { if p.tok != .key_global {
// An extra empty line to separate a block of globals // An extra empty line to separate a block of globals
p.fgenln('') p.fgen_nl()
} }
} }
.eof { .eof {
@ -472,10 +472,10 @@ fn (p mut Parser) imports() {
p.fspace() p.fspace()
p.check(.lpar) p.check(.lpar)
p.fmt_inc() p.fmt_inc()
p.fgenln('') p.fgen_nl()
for p.tok != .rpar && p.tok != .eof { for p.tok != .rpar && p.tok != .eof {
p.import_statement() p.import_statement()
p.fgenln('') p.fgen_nl()
} }
p.fmt_dec() p.fmt_dec()
p.check(.rpar) p.check(.rpar)
@ -484,9 +484,9 @@ fn (p mut Parser) imports() {
} }
// `import foo` // `import foo`
p.import_statement() p.import_statement()
p.fgenln('') p.fgen_nl()
if p.tok != .key_import { if p.tok != .key_import {
p.fgenln('') p.fgen_nl()
} }
} }
@ -539,7 +539,7 @@ fn (p mut Parser) const_decl() {
p.check(.key_const) p.check(.key_const)
p.fspace() p.fspace()
p.check(.lpar) p.check(.lpar)
p.fgenln('') p.fgen_nl()
p.fmt_inc() p.fmt_inc()
for p.tok == .name { for p.tok == .name {
if p.lit == '_' && p.peek() == .assign && !p.cgen.nogen { if p.lit == '_' && p.peek() == .assign && !p.cgen.nogen {
@ -611,7 +611,7 @@ fn (p mut Parser) const_decl() {
if p.pref.build_mode != .build_module && is_compile_time_const(p.cgen.cur_line) { if p.pref.build_mode != .build_module && is_compile_time_const(p.cgen.cur_line) {
p.cgen.consts << '#define $name $p.cgen.cur_line' p.cgen.consts << '#define $name $p.cgen.cur_line'
p.cgen.resetln('') p.cgen.resetln('')
p.fgenln('') p.fgen_nl()
continue continue
} }
if typ.starts_with('[') { if typ.starts_with('[') {
@ -625,7 +625,7 @@ fn (p mut Parser) const_decl() {
} }
p.cgen.resetln('') p.cgen.resetln('')
} }
p.fgenln('') p.fgen_nl()
} }
p.fmt_dec() p.fmt_dec()
p.check(.rpar) p.check(.rpar)
@ -679,7 +679,7 @@ fn (p mut Parser) interface_method(field_name, receiver string) &Fn {
} else { } else {
method.typ = p.get_type()// method return type method.typ = p.get_type()// method return type
//p.fspace() //p.fspace()
p.fgenln('') p.fgen_nl()
} }
return method return method
} }
@ -764,7 +764,7 @@ fn (p mut Parser) check(expected TokenKind) {
p.fgen(p.strtok()) p.fgen(p.strtok())
// vfmt: increase indentation on `{` unless it's `{}` // vfmt: increase indentation on `{` unless it's `{}`
if expected == .lcbr { //&& p.scanner.pos + 1 < p.scanner.text.len && p.scanner.text[p.scanner.pos + 1] != `}` { if expected == .lcbr { //&& p.scanner.pos + 1 < p.scanner.text.len && p.scanner.text[p.scanner.pos + 1] != `}` {
p.fgenln('') p.fgen_nl()
p.fmt_inc() p.fmt_inc()
} }
*/ */
@ -1015,7 +1015,7 @@ fn (p mut Parser) statements_no_rcbr() string {
// println('last st typ=$last_st_typ') // println('last st typ=$last_st_typ')
if !p.inside_if_expr { if !p.inside_if_expr {
//p.genln('')// // end st tok= ${p.strtok()}') //p.genln('')// // end st tok= ${p.strtok()}')
p.fgenln('') p.fgen_nl()
} }
i++ i++
if i > 50000 { if i > 50000 {
@ -2096,7 +2096,7 @@ fn (p mut Parser) assoc() string {
if p.tok != .rcbr { if p.tok != .rcbr {
p.check(.comma) p.check(.comma)
} }
p.fgenln('') p.fgen_nl()
} }
// Copy the rest of the fields // Copy the rest of the fields
T := p.table.find_type(var.typ) T := p.table.find_type(var.typ)
@ -2302,14 +2302,14 @@ fn (p mut Parser) map_init() string {
} }
vals_gen += '$val_expr, ' vals_gen += '$val_expr, '
if p.tok == .rcbr { if p.tok == .rcbr {
p.fgenln('') p.fgen_nl()
p.check(.rcbr) p.check(.rcbr)
break break
} }
if p.tok == .comma { if p.tok == .comma {
p.check(.comma) p.check(.comma)
} }
p.fgenln('') p.fgen_nl()
} }
p.gen('new_map_init($i, sizeof($val_type), ' + p.gen('new_map_init($i, sizeof($val_type), ' +
'(string[$i]){ $keys_gen }, ($val_type [$i]){ $vals_gen } )') '(string[$i]){ $keys_gen }, ($val_type [$i]){ $vals_gen } )')
@ -2556,7 +2556,7 @@ fn (p mut Parser) if_st(is_expr bool, elif_depth int) string {
p.returns = false p.returns = false
if p.tok == .key_else { if p.tok == .key_else {
if !p.inside_if_expr { if !p.inside_if_expr {
p.fgenln('') p.fgen_nl()
} }
p.check(.key_else) p.check(.key_else)
p.fspace() p.fspace()
@ -2889,7 +2889,7 @@ fn (p mut Parser) attribute() {
p.attr = p.attr + ':' + p.check_name() p.attr = p.attr + ':' + p.check_name()
} }
p.check(.rsbr) p.check(.rsbr)
p.fgenln('') p.fgen_nl()
if p.tok == .key_fn || (p.tok == .key_pub && p.peek() == .key_fn) { if p.tok == .key_fn || (p.tok == .key_pub && p.peek() == .key_fn) {
p.fn_decl() p.fn_decl()
p.attr = '' p.attr = ''

View File

@ -589,6 +589,8 @@ fn (s mut Scanner) scan() ScanRes {
s.line_comment = s.text[start + 1..s.pos] s.line_comment = s.text[start + 1..s.pos]
s.line_comment = s.line_comment.trim_space() s.line_comment = s.line_comment.trim_space()
if s.is_fmt { if s.is_fmt {
s.pos-- // fix line_nr, \n was read, and the comment is marked on the next line
s.line_nr--
return scan_res(.line_comment, s.line_comment) return scan_res(.line_comment, s.line_comment)
} }
//s.fgenln('// ${s.prev_tok.str()} "$s.line_comment"') //s.fgenln('// ${s.prev_tok.str()} "$s.line_comment"')

View File

@ -143,7 +143,7 @@ fn (p mut Parser) struct_decl() {
p.check(.colon) p.check(.colon)
} }
p.fmt_inc() p.fmt_inc()
p.fgenln('') p.fgen_nl()
} }
if p.tok == .key_mut { if p.tok == .key_mut {
if is_mut { if is_mut {
@ -156,7 +156,7 @@ fn (p mut Parser) struct_decl() {
p.check(.colon) p.check(.colon)
} }
p.fmt_inc() p.fmt_inc()
p.fgenln('') p.fgen_nl()
} }
// if is_pub { // if is_pub {
// } // }
@ -229,7 +229,7 @@ fn (p mut Parser) struct_decl() {
if p.first_pass() { if p.first_pass() {
p.table.add_field(typ.name, field_name, field_type, is_mut, attr, access_mod) p.table.add_field(typ.name, field_name, field_type, is_mut, attr, access_mod)
} }
p.fgenln('') // newline between struct fields p.fgen_nl() // newline between struct fields
} }
p.check(.rcbr) p.check(.rcbr)
if !is_c && !did_gen_something && p.first_pass() { if !is_c && !did_gen_something && p.first_pass() {
@ -280,7 +280,7 @@ fn (p mut Parser) struct_init(typ string) string {
} }
p.fspace() p.fspace()
did_gen_something = true did_gen_something = true
p.fgenln('') // newline between struct fields p.fgen_nl() // newline between struct fields
} }
// If we already set some fields, need to prepend a comma // If we already set some fields, need to prepend a comma
if t.fields.len != inited_fields.len && inited_fields.len > 0 { if t.fields.len != inited_fields.len && inited_fields.len > 0 {

View File

@ -31,6 +31,12 @@ fn (scanner mut Scanner) fgenln(s_ string) {
scanner.fmt_line_empty = true scanner.fmt_line_empty = true
} }
[if vfmt]
fn (scanner mut Scanner) fgen_nl() {
scanner.fmt_out.writeln('')
scanner.fmt_line_empty = true
}
[if vfmt] [if vfmt]
fn (p mut Parser) fgen(s string) { fn (p mut Parser) fgen(s string) {
@ -57,6 +63,18 @@ fn (p mut Parser) fgenln(s string) {
p.scanner.fgenln(s) p.scanner.fgenln(s)
} }
[if vfmt]
fn (p mut Parser) fgen_nl() {
if p.pass != .main {
return
}
println(p.tok)
if p.prev_tok == .line_comment {
return
}
p.scanner.fgen_nl()
}
/* /*
fn (p mut Parser) peek() TokenKind { fn (p mut Parser) peek() TokenKind {
for { for {
@ -108,8 +126,9 @@ fn (p mut Parser) fnext() {
p.fgen(s) p.fgen(s)
} }
// vfmt: increase indentation on `{` unless it's `{}` // vfmt: increase indentation on `{` unless it's `{}`
mut inc_indent := false
if p.tok == .lcbr && !p.inside_if_expr && p.peek() != .rcbr { if p.tok == .lcbr && !p.inside_if_expr && p.peek() != .rcbr {
p.fgenln('') p.fgen_nl()
p.fmt_inc() p.fmt_inc()
} }
@ -117,33 +136,51 @@ fn (p mut Parser) fnext() {
if p.tokens[p.token_idx].tok in [.line_comment, .mline_comment] { if p.tokens[p.token_idx].tok in [.line_comment, .mline_comment] {
// Newline before the comment and after consts and closing } // Newline before the comment and after consts and closing }
if p.inside_const { if p.inside_const {
p.fgenln('\n') p.fgen_nl()
} p.fgen_nl()
if p.tok == .rcbr {
p.fgenln('')
} }
is_rcbr := p.tok == .rcbr
for p.token_idx < p.tokens.len - 1 { for p.token_idx < p.tokens.len - 1 {
i := p.token_idx
tok := p.tokens[p.token_idx].tok tok := p.tokens[p.token_idx].tok
if tok != .line_comment && tok != .mline_comment { if tok != .line_comment && tok != .mline_comment {
break break
} }
comment_token := p.tokens[p.token_idx] comment_token := p.tokens[p.token_idx]
next := p.tokens[p.token_idx+1]
comment_on_new_line := p.token_idx == 0 ||
comment_token.line_nr > p.tokens[p.token_idx - 1].line_nr
//prev_token := p.tokens[p.token_idx - 1]
comment := comment_token.lit comment := comment_token.lit
if p.token_idx > 0 && comment_token.line_nr > p.tokens[p.token_idx-1].line_nr { if i > 0 && p.tokens[i-1].tok != .line_comment &&
//p.fgenln('') comment_token.line_nr > p.tokens[i-1].line_nr {
p.fgen_nl()
} }
if tok == .line_comment { if tok == .line_comment {
if !comment_on_new_line { //prev_token.line_nr < comment_token.line_nr {
p.fgen(' ')
}
p.fgen('// ' + comment) p.fgen('// ' + comment)
/*
if false && i > 0 {
p.fgen(
'pln=${p.tokens[i-1].line_nr} ${comment_token.str()} ' +
'line_nr=$comment_token.line_nr next=${next.str()} next_line_nr=$next.line_nr')
}
*/
} else { } else {
p.fgen(comment) p.fgen(comment)
} }
if p.token_idx > 0 && if next.tok == .line_comment && comment_token.line_nr < next.line_nr {
comment_token.line_nr < p.tokens[p.token_idx+1].line_nr p.fgen_nl()
{
p.fgenln('')
} }
p.token_idx++ p.token_idx++
} }
if inc_indent {
p.fgen_nl()
}
} }
} }
@ -162,7 +199,7 @@ fn (p mut Parser) gen_fmt() {
if s == '' { if s == '' {
return return
} }
println('GENERATING ${p.file_name}.V') println('generating ${p.file_name}.v')
out := os.create('/var/tmp/fmt/' + p.file_name) or { out := os.create('/var/tmp/fmt/' + p.file_name) or {
verror('failed to create fmt.v') verror('failed to create fmt.v')
return return