public static string Prettify()

in src/dotnet/ReSharperPlugin.DotNetDisassembler/JitDisasm/DisassemblyPrettifier.cs [30:108]


    public static string Prettify(string rawAsm, bool minimalComments)
    {
        if (!minimalComments)
            return rawAsm;
        try
        { 
            var lines = rawAsm.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
            var blocks = new List<Block>();

            var prevBlock = BlockType.Unknown;
            var currentMethod = "";

            foreach (var line in lines)
            {
                if (line.Contains("; Assembly listing for method "))
                    currentMethod = line.Remove(0, "; Assembly listing for method ".Length);
                else if (currentMethod == "")
                    return rawAsm; // in case if format is changed

                var currentBlock = BlockType.Unknown;

                if (line.StartsWith(";"))
                    currentBlock = BlockType.Comments;
                else if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }
                else 
                {
                    currentBlock = BlockType.Code;
                    if (Regex.IsMatch(line, @"^\w+:"))
                    {
                        prevBlock = BlockType.Unknown;
                    }
                }

                if (currentBlock != prevBlock)
                {
                    blocks.Add(new Block { MethodName = currentMethod, Type = currentBlock,  Data = $"\n{line}\n" });
                    prevBlock = currentBlock;
                }
                else
                    blocks[blocks.Count - 1].Data += line + "\n";
            }

            var blocksByMethods = blocks.GroupBy(b => b.MethodName);
            var output = new StringBuilder();

            foreach (var method in blocksByMethods)
            {
                List<Block> methodBlocks = method.ToList();

                int size = ParseMethodTotalSizes(methodBlocks);

                if (minimalComments)
                {
                    methodBlocks = methodBlocks.Where(m => m.Type != BlockType.Comments).ToList();
                    output.Append($"; Method {method.Key}");
                }

                foreach (var block in methodBlocks)
                    output.Append(block.Data);

                if (minimalComments)
                {
                    output.Append("; Total bytes of code: ")
                        .Append(size)
                        .AppendLine()
                        .AppendLine();
                }
            }

            return output.ToString();
        }
        catch
        {
            return rawAsm; // format is changed - leave it as is
        }
    }