diff --git a/src/dfmt/formatter.d b/src/dfmt/formatter.d index b5a9a37..19b5312 100644 --- a/src/dfmt/formatter.d +++ b/src/dfmt/formatter.d @@ -523,28 +523,20 @@ private: if (config.dfmt_selective_import_space) write(" "); writeToken(); - write(" "); - } - else if (currentIs(tok!",")) - { - // compute length until next ',' or ';' - int lengthOfNextChunk; - for (size_t i = index + 1; i < tokens.length; i++) - { - if (tokens[i].type == tok!"," || tokens[i].type == tok!";") - break; - immutable len = tokens[i].text.length; - lengthOfNextChunk += len; - } - assert(lengthOfNextChunk > 0); - writeToken(); - if (currentLineLength + 1 + lengthOfNextChunk >= config.dfmt_soft_max_line_length) - { - pushWrapIndent(tok!","); - newline(); - } - else + if (!currentIs(tok!"comment")) write(" "); + pushWrapIndent(tok!","); + } + else if (currentIs(tok!"comment")) + { + if (peekBack.line != current.line) + { + // The comment appears on its own line, keep it there. + if (!peekBackIs(tok!"comment")) + // Comments are already properly separated. + newline(); + } + formatStep(); } else formatStep(); diff --git a/tests/allman/issue0384.d.ref b/tests/allman/issue0384.d.ref new file mode 100644 index 0000000..cccd08b --- /dev/null +++ b/tests/allman/issue0384.d.ref @@ -0,0 +1,30 @@ +import std.stdio : readln, /* comment1 */ writeln; +import std.stdio : readln, // comment2 + writeln; +import std.stdio : readln, + // comment3 + writeln; +import std.stdio : readln, + /* comment4 */ + writeln; +import std.stdio : readln, readln, readln, readln, readln, readln, readln, + readln, readln, readln, readln, + // comment5 + writeln; +import std.stdio : // comment6 + readln, readln, readln, readln, readln, readln, // comment7 + // comment8 + writeln; +import std.stdio : /* comment9 */ + readln, readln, readln, readln, readln, readln, /* comment10 */ + // comment11 + writeln; +import std.stdio : readln, // comment12 + readln, readln, readln, readln, readln, readln, // comment13 + // comment14 + writeln; +import std.stdio : readln, + // comment15 + readln, readln, readln, readln, readln, readln, // comment16 + // comment17 + writeln; diff --git a/tests/issue0384.d b/tests/issue0384.d new file mode 100644 index 0000000..4ea9426 --- /dev/null +++ b/tests/issue0384.d @@ -0,0 +1,29 @@ +import std.stdio : readln, /* comment1 */ writeln; +import std.stdio : readln, // comment2 + writeln; +import std.stdio : readln, + // comment3 + writeln; +import std.stdio : readln, + /* comment4 */ + writeln; +import std.stdio : readln, readln, readln, readln, readln, readln, readln, readln, readln, readln, readln, + // comment5 + writeln; +import std.stdio : // comment6 + readln, readln, readln, readln, readln, readln, // comment7 + // comment8 + writeln; +import std.stdio : /* comment9 */ + readln, readln, readln, readln, readln, readln, /* comment10 */ + // comment11 + writeln; +import std.stdio : readln, // comment12 + readln, readln, readln, readln, readln, readln, // comment13 + // comment14 + writeln; +import std.stdio : readln, + // comment15 + readln, readln, readln, readln, readln, readln, // comment16 + // comment17 + writeln; diff --git a/tests/otbs/issue0384.d.ref b/tests/otbs/issue0384.d.ref new file mode 100644 index 0000000..cccd08b --- /dev/null +++ b/tests/otbs/issue0384.d.ref @@ -0,0 +1,30 @@ +import std.stdio : readln, /* comment1 */ writeln; +import std.stdio : readln, // comment2 + writeln; +import std.stdio : readln, + // comment3 + writeln; +import std.stdio : readln, + /* comment4 */ + writeln; +import std.stdio : readln, readln, readln, readln, readln, readln, readln, + readln, readln, readln, readln, + // comment5 + writeln; +import std.stdio : // comment6 + readln, readln, readln, readln, readln, readln, // comment7 + // comment8 + writeln; +import std.stdio : /* comment9 */ + readln, readln, readln, readln, readln, readln, /* comment10 */ + // comment11 + writeln; +import std.stdio : readln, // comment12 + readln, readln, readln, readln, readln, readln, // comment13 + // comment14 + writeln; +import std.stdio : readln, + // comment15 + readln, readln, readln, readln, readln, readln, // comment16 + // comment17 + writeln;