diff --git a/makefile b/makefile index 8e064d7..2db320d 100644 --- a/makefile +++ b/makefile @@ -1,6 +1,7 @@ SRC := $(shell find src -name "*.d") $(shell find libdparse/src -name "*.d") INCLUDE_PATHS := -Ilibdparse/src -Isrc DMD_COMMON_FLAGS := -dip25 -w $(INCLUDE_PATHS) +DMD_DEBUG_FLAGS := -g $(DMD_COMMON_FLAGS) DMD_FLAGS := -O -inline $(DMD_COMMON_FLAGS) DMD_TEST_FLAGS := -unittest -g $(DMD_COMMON_FLAGS) LDC_FLAGS := -g -w -oq $(INCLUDE_PATHS) @@ -25,3 +26,6 @@ bin/dfmt-test: $(SRC) bin/dfmt: $(SRC) dmd $(DMD_FLAGS) $^ -of$@ + +debug: $(SRC) + dmd $(DMD_DEBUG_FLAGS) $^ -ofbin/dfmt diff --git a/src/dfmt/formatter.d b/src/dfmt/formatter.d index d4f228c..0751ab7 100644 --- a/src/dfmt/formatter.d +++ b/src/dfmt/formatter.d @@ -596,26 +596,28 @@ private: } else { - indents.popWrapIndents(); - if (indents.length && isTempIndent(indents.top)) - indentLevel = indents.indentLevel - 1; - else - indentLevel = indents.indentLevel; - - if (!peekBackIsSlashSlash()) + if (peekBackIsSlashSlash()) { + if (peekBack2Is(tok!";")) + { + indents.popTempIndents(); + indentLevel = indents.indentLevel - 1; + } + writeToken(); + } + else + { + if (indents.length && isTempIndent(indents.top)) + indentLevel = indents.indentLevel - 1; + else + indentLevel = indents.indentLevel; if (config.dfmt_brace_style == BraceStyle.allman || peekBackIsOneOf(true, tok!"{", tok!"}")) newline(); else if (!peekBackIsOneOf(true, tok!"{", tok!"}", tok!";")) write(" "); writeToken(); } - else - { - writeToken(); - indents.popTempIndents(); - indentLevel = indents.indentLevel - 1; - } + indents.push(tok!"{"); if (!currentIs(tok!"{")) newline(); @@ -1113,7 +1115,7 @@ private: else if (currentIs(tok!"{")) { indents.popWrapIndents(); - if (peekBackIsSlashSlash()) + if (peekBackIsSlashSlash() && peekBack2Is(tok!";")) { indents.popTempIndents(); indentLevel = indents.indentLevel; diff --git a/tests/allman/issue0169.d.ref b/tests/allman/issue0169.d.ref new file mode 100644 index 0000000..cd16285 --- /dev/null +++ b/tests/allman/issue0169.d.ref @@ -0,0 +1,14 @@ +unittest +{ + if (true) + { + if (true) // comment + { + + } + else + { + + } + } +} diff --git a/tests/issue0169.d b/tests/issue0169.d new file mode 100644 index 0000000..b43164f --- /dev/null +++ b/tests/issue0169.d @@ -0,0 +1,14 @@ +unittest +{ + if (true) + { + if (true) // comment + { + + } + else + { + + } + } +} diff --git a/tests/otbs/issue0169.d.ref b/tests/otbs/issue0169.d.ref new file mode 100644 index 0000000..a1acfcc --- /dev/null +++ b/tests/otbs/issue0169.d.ref @@ -0,0 +1,11 @@ +unittest { + if (true) { + if (true) // comment + { + + } + else { + + } + } +}