Avoid unnecessary indents for compount boolean expressions (#246)

- Avoid incrementing indents for compound binary boolean expressions. Multiple 'AND x = Y' statements were each indenting instead of having the same indent level.
- Fixes https://github.com/Microsoft/vscode-mssql/issues/709
This commit is contained in:
Kevin Cunnane
2017-02-21 22:18:01 -08:00
committed by GitHub
parent e1c8cc5ac3
commit 7f20f84add
6 changed files with 73 additions and 7 deletions

View File

@@ -38,12 +38,15 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
internal override void ProcessPrefixRegion(int startTokenNumber, int firstChildStartTokenNumber)
{
SpaceSeparatedListFormatter.ProcessPrefixRegion(startTokenNumber, firstChildStartTokenNumber);
// Binary boolean expressions
bool allowIncrement = !(CodeObject.Parent is SqlBinaryBooleanExpression);
SpaceSeparatedListFormatter.ProcessPrefixRegion(startTokenNumber, firstChildStartTokenNumber, allowIncrement);
}
internal override void ProcessSuffixRegion(int lastChildEndTokenNumber, int endTokenNumber)
{
SpaceSeparatedListFormatter.ProcessSuffixRegion(lastChildEndTokenNumber, endTokenNumber);
bool allowDecrement = !(CodeObject.Parent is SqlBinaryBooleanExpression);
SpaceSeparatedListFormatter.ProcessSuffixRegion(lastChildEndTokenNumber, endTokenNumber, allowDecrement);
}
internal override void ProcessInterChildRegion(SqlCodeObject previousChild, SqlCodeObject nextChild)

View File

@@ -13,7 +13,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
/// </summary>
internal abstract class WhiteSpaceSeparatedListFormatter : ASTNodeFormatterT<SqlCodeObject>
{
private bool IncremenetIndentLevelOnPrefixRegion { get; set; }
private bool IncrementIndentLevelOnPrefixRegion { get; set; }
/// <summary>
/// This constructor initalizes the <see cref="Visitor"/> and <see cref="CodeObject"/> properties since the formatter's entry point
@@ -25,21 +25,30 @@ namespace Microsoft.SqlTools.ServiceLayer.Formatter
internal WhiteSpaceSeparatedListFormatter(FormatterVisitor visitor, SqlCodeObject codeObject, bool incrementIndentLevelOnPrefixRegion)
: base(visitor, codeObject)
{
IncremenetIndentLevelOnPrefixRegion = incrementIndentLevelOnPrefixRegion;
IncrementIndentLevelOnPrefixRegion = incrementIndentLevelOnPrefixRegion;
}
internal override void ProcessPrefixRegion(int startTokenNumber, int firstChildStartTokenNumber)
internal void ProcessPrefixRegion(int startTokenNumber, int firstChildStartTokenNumber, bool allowIncrement)
{
if (IncremenetIndentLevelOnPrefixRegion)
if (allowIncrement && IncrementIndentLevelOnPrefixRegion)
{
IncrementIndentLevel();
}
base.ProcessPrefixRegion(startTokenNumber, firstChildStartTokenNumber);
}
internal override void ProcessPrefixRegion(int startTokenNumber, int firstChildStartTokenNumber)
{
ProcessPrefixRegion(startTokenNumber, firstChildStartTokenNumber, true);
}
internal override void ProcessSuffixRegion(int lastChildEndTokenNumber, int endTokenNumber)
{
if (IncremenetIndentLevelOnPrefixRegion)
ProcessSuffixRegion(lastChildEndTokenNumber, endTokenNumber, true);
}
internal void ProcessSuffixRegion(int lastChildEndTokenNumber, int endTokenNumber, bool allowDecrement)
{
if (allowDecrement && IncrementIndentLevelOnPrefixRegion)
{
DecrementIndentLevel();
}