From 18c642e09156866e0725a8ff3d0ffbd36d6fafdd Mon Sep 17 00:00:00 2001 From: Bastiaan Veelo Date: Thu, 18 Oct 2018 14:16:33 +0200 Subject: [PATCH] Use general indent and line braking logic. - Let a single `pushWrapIndex` take care of indexing. - Remove chunk length calculation entirely. - Comment spacing is funny, fix by special casing. Bonus: comments that appear on a separate line are kept on a separate line. --- src/dfmt/formatter.d | 34 +++++++++++++--------------------- tests/allman/issue0384.d.ref | 30 ++++++++++++++++++++++++++++++ tests/issue0384.d | 29 +++++++++++++++++++++++++++++ tests/otbs/issue0384.d.ref | 30 ++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 tests/allman/issue0384.d.ref create mode 100644 tests/issue0384.d create mode 100644 tests/otbs/issue0384.d.ref 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;