コード例 #1
0
ファイル: MarkdownDiffExporter.cs プロジェクト: tkapin/arcade
        private static void WriteDiff(StreamWriter writer, DiffApiDefinition api, int level)
        {
            bool hasChildren = api.Children.Any();

            string         indent = new string(' ', level * 4);
            string         suffix = hasChildren ? " {" : string.Empty;
            DifferenceType diff   = api.Difference;

            if (diff == DifferenceType.Changed)
            {
                // Let's see whether the syntax actually changed. For some cases the syntax might not
                // diff, for example, when attribute declarations have changed.

                string left  = api.Left.GetCSharpDeclaration();
                string right = api.Right.GetCSharpDeclaration();

                if (string.Equals(left, right, StringComparison.OrdinalIgnoreCase))
                {
                    diff = DifferenceType.Unchanged;
                }
            }

            switch (diff)
            {
            case DifferenceType.Added:
                WriteDiff(writer, "+", indent, suffix, api.Right);
                break;

            case DifferenceType.Removed:
                WriteDiff(writer, "-", indent, suffix, api.Left);
                break;

            case DifferenceType.Changed:
                WriteDiff(writer, "-", indent, suffix, api.Left);
                WriteDiff(writer, "+", indent, suffix, api.Right);
                break;

            default:
                WriteDiff(writer, " ", indent, suffix, api.Definition);
                break;
            }

            if (hasChildren)
            {
                foreach (DiffApiDefinition child in api.Children)
                {
                    WriteDiff(writer, child, level + 1);
                }

                var diffMarker = diff == DifferenceType.Added
                                    ? "+"
                                    : diff == DifferenceType.Removed
                                        ? "-"
                                        : " ";

                writer.Write(diffMarker);
                writer.Write(indent);
                writer.WriteLine("}");
            }
        }
コード例 #2
0
        private void WriteDiffForNamespace(StreamWriter writer, DiffApiDefinition topLevelApi, bool isStandalone)
        {
            string heading = _createFilePerNamespace ? "#" : "##";

            writer.WriteLine(heading + " " + topLevelApi.Name);
            writer.WriteLine();

            WriteDiff(writer, topLevelApi);

            writer.WriteLine();
        }
コード例 #3
0
        private void PushApi <T>(ElementMapping <T> elementMapping)
            where T : class, IDefinition
        {
            var left  = elementMapping[0];
            var right = elementMapping.ElementCount == 1
                            ? null
                            : elementMapping[1];

            var difference = elementMapping.Difference;

            var newChildren   = new List <DiffApiDefinition>();
            var apiDefinition = new DiffApiDefinition(left, right, difference, newChildren)
            {
                StartLine = _diffRecorder.Line
            };

            _apis.Add(apiDefinition);

            _apiStack.Push(_apis);
            _apiDefinitionStack.Push(apiDefinition);
            _apis = newChildren;
        }
コード例 #4
0
 private static void WriteDiff(StreamWriter writer, DiffApiDefinition topLevelApi)
 {
     writer.WriteLine("``` diff");
     WriteDiff(writer, topLevelApi, 0);
     writer.WriteLine("```");
 }