diff --git a/src/dfmt.d b/src/dfmt.d index 188e2c5..a1bddfa 100644 --- a/src/dfmt.d +++ b/src/dfmt.d @@ -333,6 +333,7 @@ private: writeToken(); writeParens(true); break; + case tok!"in": case tok!"is": writeToken(); if (!currentIs(tok!"(")) @@ -772,34 +773,27 @@ private: } else if (current.type == tok!")") { - if (peekIsLiteralOrIdent() || peekIsBasicType()) + depth--; + if (depth == 0 && (peekIs(tok!"in") || peekIs(tok!"out") + || peekIs(tok!"body"))) + { + writeToken(); // ) + newline(); + writeToken(); // in/out/body + } + else if (peekIsLiteralOrIdent() || peekIsBasicType() || peekIsKeyword()) { writeToken(); - if (space_afterwards) + if (space_afterwards || depth > 0) write(" "); } - else if (index + 1 < tokens.length) + else if ((peekIsKeyword() || peekIs(tok!"@")) && space_afterwards) { - if (tokens[index + 1].type == tok!"in" - || tokens[index + 1].type == tok!"out" - || tokens[index + 1].type == tok!"body") - { - writeToken(); - newline(); - } - else if (isKeyword(tokens[index + 1].type) - || tokens[index + 1].type == tok!"@") - { - writeToken(); - if (space_afterwards) - write(" "); - } - else - writeToken(); + writeToken(); + write(" "); } else writeToken(); - depth--; } else formatStep(); @@ -810,6 +804,11 @@ private: linebreakHints = []; } + bool peekIsKeyword() + { + return index + 1 < tokens.length && isKeyword(tokens[index + 1].type); + } + bool peekIsBasicType() { return index + 1 < tokens.length && isBasicType(tokens[index + 1].type); diff --git a/tests/issue0065.d b/tests/issue0065.d new file mode 100644 index 0000000..f004c5e --- /dev/null +++ b/tests/issue0065.d @@ -0,0 +1,5 @@ +void main(string[] args) +{ + if ((*tempdecl.parameters) [i].isTemplateThisParameter()is null){} + if (a()in b||a()is b){} +} diff --git a/tests/issue0065.d.ref b/tests/issue0065.d.ref new file mode 100644 index 0000000..4de8499 --- /dev/null +++ b/tests/issue0065.d.ref @@ -0,0 +1,9 @@ +void main(string[] args) +{ + if ((*tempdecl.parameters)[i].isTemplateThisParameter() is null) + { + } + if (a() in b || a() is b) + { + } +}