diff --git a/src/Workspaces/CSharp/Portable/Formatting/Rules/SpacingFormattingRule.cs b/src/Workspaces/CSharp/Portable/Formatting/Rules/SpacingFormattingRule.cs index baa733996cd9b611ee6039aad72a96a9a0712c14..640d1efb879b1de3d735a6ed15281f87f6a35e32 100644 --- a/src/Workspaces/CSharp/Portable/Formatting/Rules/SpacingFormattingRule.cs +++ b/src/Workspaces/CSharp/Portable/Formatting/Rules/SpacingFormattingRule.cs @@ -253,7 +253,18 @@ public override AdjustSpacesOperation GetAdjustSpacesOperation(SyntaxToken previ case BinaryOperatorSpacingOptions.Single: return CreateAdjustSpacesOperation(1, AdjustSpacesOption.ForceSpacesIfOnSingleLine); case BinaryOperatorSpacingOptions.Remove: - return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine); + if (currentKind == SyntaxKind.IsKeyword || + currentKind == SyntaxKind.AsKeyword || + previousKind == SyntaxKind.IsKeyword || + previousKind == SyntaxKind.AsKeyword) + { + // User want spaces removed but at least one is required for the "as" & "is" keyword + return CreateAdjustSpacesOperation(1, AdjustSpacesOption.ForceSpacesIfOnSingleLine); + } + else + { + return CreateAdjustSpacesOperation(0, AdjustSpacesOption.ForceSpacesIfOnSingleLine); + } case BinaryOperatorSpacingOptions.Ignore: return CreateAdjustSpacesOperation(0, AdjustSpacesOption.PreserveSpaces); default: diff --git a/src/Workspaces/CSharpTest/Formatting/FormattingTests.cs b/src/Workspaces/CSharpTest/Formatting/FormattingTests.cs index f9ebdd19974cf19072ad04f4d8e7191b48ac0cb7..fe927492d8321cb31a133dd02df27453ef172ffb 100644 --- a/src/Workspaces/CSharpTest/Formatting/FormattingTests.cs +++ b/src/Workspaces/CSharpTest/Formatting/FormattingTests.cs @@ -988,6 +988,34 @@ class D }", false, changingOptions); } + [Fact, Trait(Traits.Feature, Traits.Features.Formatting)] + public void RemoveSpacingAroundBinaryOperatorsShouldMakeAtLeastOneSpaceForIsAndAsKeywords() + { + var changingOptions = new Dictionary(); + changingOptions.Add(CSharpFormattingOptions.SpacingAroundBinaryOperator, BinaryOperatorSpacingOptions.Remove); + AssertFormat(@"class Class2 +{ + public void nothing() + { + var a = 1*2+3-4/5; + a+=1; + object o = null; + string s = o as string; + bool b = o is string; + } +}", @"class Class2 + { + public void nothing() + { + var a = 1 * 2 + 3 - 4 / 5; + a += 1; + object o = null; + string s = o as string; + bool b = o is string; + } + }", false, changingOptions); + } + [WorkItem(772298, "DevDiv")] [Fact, Trait(Traits.Feature, Traits.Features.Formatting)] public void IndentUserSettingNonDefaultTest_OpenBracesOfLambdaWithNoNewLine()