示例#1
0
        private List <LineChange> CreateDiff(CodeLanguage language, string input1, string input2, StringBuilder diff)
        {
            IEqualityComparer <string> eq = FunctionalExt.ValuedSwitch <CodeLanguage, IEqualityComparer <string> >(language)
                                            .Case(CodeLanguage.CSharp, () => new CSharpCodeLineEqualityComparer())
                                            .Case(CodeLanguage.IL, () => new ILCodeLineEqualityComparer())
                                            .GetResult();
            var differ = new AlignedDiff <string>(
                NormalizeAndSplitCode(input1),
                NormalizeAndSplitCode(input2),
                eq,
                new StringSimilarityComparer(),
                new StringAlignmentFilter());

            int line1 = 0, line2 = 0;

            var list = new List <LineChange>();

            foreach (var change in differ.Generate())
            {
                int startIndex = 0;
                switch (change.Change)
                {
                case ChangeType.Same:
                    diff.AppendFormat("{0,4} {1,4} ", ++line1, ++line2);
                    diff.AppendFormat("  ");
                    diff.AppendLine(change.Element1);
                    break;

                case ChangeType.Added:
                    startIndex = diff.Length;
                    diff.AppendFormat("     {1,4}  +  ", line1, ++line2);

                    diff.AppendLine(change.Element2);
                    list.Add(NewLineChange(LineChangeType.Add, diff, startIndex, diff.Length));
                    break;

                case ChangeType.Deleted:
                    startIndex = diff.Length;
                    diff.AppendFormat("{0,4}       -  ", ++line1, line2);
                    diff.AppendLine(change.Element1);
                    list.Add(NewLineChange(LineChangeType.Remove, diff, startIndex, diff.Length));
                    break;

                case ChangeType.Changed:
                    startIndex = diff.Length;
                    diff.AppendFormat("{0,4}      ", ++line1, line2);
                    diff.AppendFormat("(-) ");
                    diff.AppendLine(change.Element1);
                    list.Add(NewLineChange(LineChangeType.Remove, diff, startIndex, diff.Length));
                    startIndex = diff.Length;
                    diff.AppendFormat("     {1,4} ", line1, ++line2);
                    diff.AppendFormat("(+) ");
                    diff.AppendLine(change.Element2);
                    list.Add(NewLineChange(LineChangeType.Add, diff, startIndex, diff.Length));
                    break;
                }
            }
            return(list);
        }
        private List<LineChange> CreateDiff(CodeLanguage language, string input1, string input2, StringBuilder diff)
        {
            IEqualityComparer<string> eq = FunctionalExt.ValuedSwitch<CodeLanguage, IEqualityComparer<string>>(language)
                .Case(CodeLanguage.CSharp, () => new CSharpCodeLineEqualityComparer())
                .Case(CodeLanguage.IL, () => new ILCodeLineEqualityComparer())
                .GetResult();
            var differ = new AlignedDiff<string>(
                NormalizeAndSplitCode(input1),
                NormalizeAndSplitCode(input2),
                eq,
                new StringSimilarityComparer(),
                new StringAlignmentFilter());

            int line1 = 0, line2 = 0;

            var list = new List<LineChange>();
            foreach (var change in differ.Generate())
            {
                int startIndex = 0;
                switch (change.Change)
                {
                    case ChangeType.Same:
                        diff.AppendFormat("{0,4} {1,4} ", ++line1, ++line2);
                        diff.AppendFormat("  ");
                        diff.AppendLine(change.Element1);
                        break;
                    case ChangeType.Added:
                        startIndex = diff.Length;
                        diff.AppendFormat("     {1,4}  +  ", line1, ++line2);

                        diff.AppendLine(change.Element2);
                        list.Add(NewLineChange(LineChangeType.Add, diff, startIndex, diff.Length));
                        break;
                    case ChangeType.Deleted:
                        startIndex = diff.Length;
                        diff.AppendFormat("{0,4}       -  ", ++line1, line2);
                        diff.AppendLine(change.Element1);
                        list.Add(NewLineChange(LineChangeType.Remove, diff, startIndex, diff.Length));
                        break;
                    case ChangeType.Changed:
                        startIndex = diff.Length;
                        diff.AppendFormat("{0,4}      ", ++line1, line2);
                        diff.AppendFormat("(-) ");
                        diff.AppendLine(change.Element1);
                        list.Add(NewLineChange(LineChangeType.Remove, diff, startIndex, diff.Length));
                        startIndex = diff.Length;
                        diff.AppendFormat("     {1,4} ", line1, ++line2);
                        diff.AppendFormat("(+) ");
                        diff.AppendLine(change.Element2);
                        list.Add(NewLineChange(LineChangeType.Add, diff, startIndex, diff.Length));
                        break;
                }
            }
            return list;
        }
示例#3
0
        static bool Compare(string input1, string input2, StringWriter diff)
        {
            string[] inputLines1 = NormalizeAndSplitCode(input1);
            string[] inputLines2 = NormalizeAndSplitCode(input2);

            var differ = new AlignedDiff <string>(
                inputLines1,
                inputLines2,
                new CodeLineEqualityComparer(),
                new StringSimilarityComparer(),
                new StringAlignmentFilter());

            bool result = true, ignoreChange;

            int line1 = 0, line2 = 0;

            foreach (var change in differ.Generate())
            {
                switch (change.Change)
                {
                case ChangeType.Same:
                    diff.Write("{0,4} {1,4} ", ++line1, ++line2);
                    diff.Write("  ");
                    diff.WriteLine(change.Element1);
                    break;

                case ChangeType.Added:
                    diff.Write("     {1,4} ", line1, ++line2);
                    result &= ignoreChange = ShouldIgnoreChange(change.Element2);
                    diff.Write(ignoreChange ? "    " : " +  ");
                    diff.WriteLine(change.Element2);
                    break;

                case ChangeType.Deleted:
                    diff.Write("{0,4}      ", ++line1, line2);
                    result &= ignoreChange = ShouldIgnoreChange(change.Element1);
                    diff.Write(ignoreChange ? "    " : " -  ");
                    diff.WriteLine(change.Element1);
                    break;

                case ChangeType.Changed:
                    diff.Write("{0,4}      ", ++line1, line2);
                    result = false;
                    diff.Write("(-) ");
                    diff.WriteLine(change.Element1);
                    diff.Write("     {1,4} ", line1, ++line2);
                    diff.Write("(+) ");
                    diff.WriteLine(change.Element2);
                    break;
                }
            }

            return(result);
        }