dotnet / roslyn

The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
https://docs.microsoft.com/dotnet/csharp/roslyn-sdk/
MIT License
19.02k stars 4.03k forks source link

Code fix for IDE0059 "Remove unnecessary assignment" removes empty lines or reorders code #45421

Open Tragetaschen opened 4 years ago

Tragetaschen commented 4 years ago

Version Used: 16.6.2

Steps to Reproduce:

public class Test
{
    public long M(bool flag)
    {
        long a = 0; // IDE0059
        long b = 0; // IDE0059
        long c = 0; // IDE0059

        if (flag)
        {
            a = 1;
            b = 1;
            c = 1;
        }
        else
        {
            a = 2;
            b = 2;
            c = 2;
        }

        return a + b + c;
    }
}
  1. Run "Remove unnecessary assignment" for c
  2. Run "Remove unnecessary assignment" for b

Expected Behavior:

In both steps, the = 0 characters should be removed

         long a = 0; // IDE0059
-        long b = 0; // IDE0059
-        long c = 0; // IDE0059
+        long b; // IDE0059
+        long c; // IDE0059

         if (flag)

Actual Behavior:

After running "Remove unnecessary assignment" for c, the empty line below the declaration and the comment is also removed:

         long a = 0; // IDE0059
         long b = 0; // IDE0059
-        long c = 0; // IDE0059
-
+        long c;
         if (flag)

After then running "Remove unnecessary assignment" for b , the b and c declarations are reordered and the comment is removed:

         long a = 0; // IDE0059
-        long b = 0; // IDE0059
-        long c = 0; // IDE0059
-
+        long c;
+        long b;
         if (flag)
kendrahavens commented 4 years ago

Design meeting notes