diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index c9bf262ba2..2141f7b943 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -26,10 +26,9 @@ pub fn fmt(file ast.File, table &table.Table) string { mut f := Fmt{ out: strings.new_builder(1000) table: table - indent: -1 + indent: 0 } - f.stmts(file.stmts) - return f.out.str().trim_space() + '\n' + return f.process(file) } pub fn (f mut Fmt) write(s string) { @@ -49,6 +48,45 @@ pub fn (f mut Fmt) writeln(s string) { f.empty_line = true } +fn (f mut Fmt) process(file ast.File) string { + f.mod(file.mod) + f.imports(file.imports) + for stmt in file.stmts { + f.stmt(stmt) + } + return f.out.str().trim_space() + '\n' +} + +fn (f mut Fmt) mod(mod ast.Module) { + if mod.name != 'main' { + f.writeln('module ${mod.name}\n') + } +} + +fn (f mut Fmt) imports(imports []ast.Import) { + if imports.len == 1 { + imp_stmt_str := f.imp_stmt_str(imports[0]) + f.writeln('import ${imp_stmt_str}\n') + } else if imports.len > 1 { + f.writeln('import (') + f.indent++ + for imp in imports { + f.writeln(f.imp_stmt_str(imp)) + } + f.indent-- + f.writeln(')\n') + } +} + +fn (f Fmt) imp_stmt_str(imp ast.Import) string { + imp_alias_suffix := if imp.alias != imp.mod { + ' as ${imp.alias}' + } else { + '' + } + return '${imp.mod}${imp_alias_suffix}' +} + fn (f mut Fmt) stmts(stmts []ast.Stmt) { f.indent++ for stmt in stmts { diff --git a/vlib/v/fmt/tests/import_multiple_expected.vv b/vlib/v/fmt/tests/import_multiple_expected.vv new file mode 100644 index 0000000000..be52fff831 --- /dev/null +++ b/vlib/v/fmt/tests/import_multiple_expected.vv @@ -0,0 +1,4 @@ +import ( + filepath + os +) diff --git a/vlib/v/fmt/tests/import_multiple_input.vv b/vlib/v/fmt/tests/import_multiple_input.vv new file mode 100644 index 0000000000..d5b4542a86 --- /dev/null +++ b/vlib/v/fmt/tests/import_multiple_input.vv @@ -0,0 +1,2 @@ +import filepath +import os diff --git a/vlib/v/fmt/tests/import_single_expected.vv b/vlib/v/fmt/tests/import_single_expected.vv new file mode 100644 index 0000000000..21b405d8c2 --- /dev/null +++ b/vlib/v/fmt/tests/import_single_expected.vv @@ -0,0 +1 @@ +import os diff --git a/vlib/v/fmt/tests/import_single_input.vv b/vlib/v/fmt/tests/import_single_input.vv new file mode 100644 index 0000000000..21b405d8c2 --- /dev/null +++ b/vlib/v/fmt/tests/import_single_input.vv @@ -0,0 +1 @@ +import os