Code Cleanup is incorrectly removing Curly braces from code for some else if statements. This changes the logic of the code and causes bugs.
For Example the following code:
public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
{
if (HeightFeet.HasValue)
{
if (HeightInches.HasValue)
{
//Height Feet:
//1. Cannot be zero or less
//2. Cannot be greater than 8
if (HeightFeet.Value <= 0)
{
yield return false;
}
else if (HeightFeet.Value > 8)
{
yield return false;
}
else
{
//Height Inches:
//1. Cannot be less than zero
//2. Cannot be greater than 11
if (HeightInches.Value < 0)
{
yield return false;
}
else if (HeightInches.Value > 11)
{
yield return false;
}
}
}
else
{
yield return false;
}
}
else if (HeightInches.HasValue)
{
yield return false;
}
yield break;
}
Gets Cleaned up to:
public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
{
if (HeightFeet.HasValue)
if (HeightInches.HasValue)
//Height Feet:
//1. Cannot be zero or less
//2. Cannot be greater than 8
if (HeightFeet.Value <= 0)
yield return false;
else if (HeightFeet.Value > 8)
yield return false;
else
//Height Inches:
//1. Cannot be less than zero
//2. Cannot be greater than 11
if (HeightInches.Value < 0)
yield return false;
else if (HeightInches.Value > 11)
yield return false;
else
yield return false;
else if (HeightInches.HasValue)
yield return false;
yield break;
}
It Should be:
public IEnumerable<bool> ValidateHeight(int? HeightFeet, int? HeightInches)
{
if (HeightFeet.HasValue)
{
if (HeightInches.HasValue)
//Height Feet:
//1. Cannot be zero or less
//2. Cannot be greater than 8
if (HeightFeet.Value <= 0)
yield return false;
else if (HeightFeet.Value > 8)
yield return false;
else
{
//Height Inches:
//1. Cannot be less than zero
//2. Cannot be greater than 11
if (HeightInches.Value < 0)
yield return false;
else if (HeightInches.Value > 11)
yield return false;
else
yield return false;
}
}
else if (HeightInches.HasValue)
yield return false;
yield break;
}
Hi Ben,
Thank you for pointing out this issue and providing the code sample. I have reproduced this issue with the 'Apply 'Braces in statements' style' Code Cleanup rule. We are working on it and will inform you of our progress.