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("}"); } }
private void WriteDiffForNamespace(StreamWriter writer, DiffApiDefinition topLevelApi, bool isStandalone) { string heading = _createFilePerNamespace ? "#" : "##"; writer.WriteLine(heading + " " + topLevelApi.Name); writer.WriteLine(); WriteDiff(writer, topLevelApi); writer.WriteLine(); }
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; }
private static void WriteDiff(StreamWriter writer, DiffApiDefinition topLevelApi) { writer.WriteLine("``` diff"); WriteDiff(writer, topLevelApi, 0); writer.WriteLine("```"); }