public Task WriteToConsole() { void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children) { foreach (IConfigurationSection child in children) { var valuesAndProviders = GetValueAndProviders(_configRoot, child.Path); IHasTreeNodes parent = node; if (valuesAndProviders.Count == 0) { parent = node.AddNode($"[blue]{child.Key}[/]"); } else { var current = valuesAndProviders.Pop(); var currentNode = node.AddNode(new Table() .Border(TableBorder.None) .HideHeaders() .AddColumn("Key") .AddColumn("Value") .AddColumn("Provider") .HideHeaders() .AddRow($"[yellow]{child.Key}[/]", current.Value, $@"([grey]{current.Provider}[/])") ); // Add the overriden values foreach (var valueAndProvider in valuesAndProviders) { currentNode.AddNode(new Table() .Border(TableBorder.None) .HideHeaders() .AddColumn("Value") .AddColumn("Provider") .HideHeaders() .AddRow($"[strikethrough]{valueAndProvider.Value}[/]", $@"([grey]{valueAndProvider.Provider}[/])") ); } } RecurseChildren(parent, child.GetChildren()); } } var tree = new Tree(string.Empty); RecurseChildren(tree, _configRoot.GetChildren()); AnsiConsole.Render(tree); return(Task.CompletedTask); }
private void FormatTreeNode(TreeNode debugTreeNode, IHasTreeNodes spectreTreeNode) { var childNode = spectreTreeNode.AddNode(debugTreeNode.DebugElement.Element.GetType().Name); foreach (var printableProperty in debugTreeNode.DebugElement.PrintableProperties) { var valueFormatter = TestingLibraryOptions.DebugOptions.DefaultValueFormatters.First(x => x.CanHandle(printableProperty.Value)); childNode.AddNode(EscapeMarkup($"{printableProperty.Key}: {valueFormatter.Format(printableProperty.Value)}")); } foreach (var treeNode in debugTreeNode.Nodes) { FormatTreeNode(treeNode, childNode); } }
public Task WriteToConsole() { void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children) { foreach (IConfigurationSection child in children) { (string Value, IConfigurationProvider Provider)valueAndProvider = GetValueAndProvider(_configRoot, child.Path); IHasTreeNodes parent = node; if (valueAndProvider.Provider != null) { node.AddNode(new Table() .Border(TableBorder.None) .HideHeaders() .AddColumn("Key") .AddColumn("Value") .AddColumn("Provider") .HideHeaders() .AddRow($"[yellow]{child.Key}[/]", valueAndProvider.Value, $@"([grey]{valueAndProvider.Provider}[/])") ); } else { parent = node.AddNode($"[yellow]{child.Key}[/]"); } RecurseChildren(parent, child.GetChildren()); } } var tree = new Tree(string.Empty); RecurseChildren(tree, _configRoot.GetChildren()); AnsiConsole.Render(tree); return(Task.CompletedTask); }
public Task WriteToConsole() { if (!(_configuration is IConfigurationRoot root)) { AnsiConsole.MarkupLine($"[red]{PreviewErrorMessage}[/]"); return(Task.CompletedTask); } void RecurseChildren(IHasTreeNodes node, IEnumerable <IConfigurationSection> children) { foreach (IConfigurationSection child in children) { var valuesAndProviders = GetValueAndProviders(root, child.Path); IHasTreeNodes parent = node; if (valuesAndProviders.Count == 0) { parent = node.AddNode($"[blue]{child.Key}[/]"); } else { // Remove the last value added to the stack. This is the "current" value var finalValue = valuesAndProviders.Pop(); var currentNode = node.AddNode( new Table() .Border(TableBorder.None) .HideHeaders() .AddColumn("Key") .AddColumn("Value") .AddColumn("Provider") .HideHeaders() .AddRow($"[yellow]{child.Key}[/]", finalValue.Value, $@"([grey]{finalValue.Provider}[/])") ); // Loop through the remaining (overridden) values // Display them as children of the current value foreach (var overriddenValue in valuesAndProviders) { currentNode.AddNode( new Table() .Border(TableBorder.None) .HideHeaders() .AddColumn("Value") .AddColumn("Provider") .HideHeaders() .AddRow($"[strikethrough]{overriddenValue.Value}[/]", $@"([grey]{overriddenValue.Provider}[/])") ); } } RecurseChildren(parent, child.GetChildren()); } } var tree = new Tree(string.Empty); RecurseChildren(tree, root.GetChildren()); AnsiConsole.Render(tree); return(Task.CompletedTask); }