mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-04 10:35:27 +08:00 
			
		
		
		
	Allow custom help providers (#1259)
Allow custom help providers * Version option will show in help even with a default command * Reserve `-v` and `--version` as special Spectre.Console command line arguments (nb. breaking change for Spectre.Console users who have a default command with a settings class that uses either of these switches). * Help writer correctly determines if trailing commands exist and whether to display them as optional or mandatory in the usage statement. * Ability to control the number of indirect commands to display in the help text when the command itself doesn't have any examples of its own. Defaults to 5 (for backward compatibility) but can be set to any integer or zero to disable completely. * Significant increase in unit test coverage for the help writer. * Minor grammatical improvements to website documentation.
This commit is contained in:
		@@ -0,0 +1,34 @@
 | 
			
		||||
using Spectre.Console.Rendering;
 | 
			
		||||
 | 
			
		||||
namespace Spectre.Console.Cli.Tests.Data.Help;
 | 
			
		||||
 | 
			
		||||
internal class CustomHelpProvider : HelpProvider
 | 
			
		||||
{
 | 
			
		||||
    private readonly string version;
 | 
			
		||||
 | 
			
		||||
    public CustomHelpProvider(ICommandAppSettings settings, string version)
 | 
			
		||||
        : base(settings)
 | 
			
		||||
    {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override IEnumerable<IRenderable> GetHeader(ICommandModel model, ICommandInfo command)
 | 
			
		||||
    {
 | 
			
		||||
        return new IRenderable[]
 | 
			
		||||
        {
 | 
			
		||||
            new Text("--------------------------------------"), Text.NewLine,
 | 
			
		||||
            new Text("---      CUSTOM HELP PROVIDER      ---"), Text.NewLine,
 | 
			
		||||
            new Text("--------------------------------------"), Text.NewLine,
 | 
			
		||||
            Text.NewLine,
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public override IEnumerable<IRenderable> GetFooter(ICommandModel model, ICommandInfo command)
 | 
			
		||||
    {
 | 
			
		||||
        return new IRenderable[]
 | 
			
		||||
        {
 | 
			
		||||
            Text.NewLine,
 | 
			
		||||
            new Text($"Version {version}"),
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
using Spectre.Console.Rendering;
 | 
			
		||||
 | 
			
		||||
namespace Spectre.Console.Cli.Tests.Data.Help;
 | 
			
		||||
 | 
			
		||||
internal class RedirectHelpProvider : IHelpProvider
 | 
			
		||||
{
 | 
			
		||||
    public virtual IEnumerable<IRenderable> Write(ICommandModel model)
 | 
			
		||||
    {
 | 
			
		||||
        return Write(model, null);
 | 
			
		||||
    }
 | 
			
		||||
#nullable enable
 | 
			
		||||
    public virtual IEnumerable<IRenderable> Write(ICommandModel model, ICommandInfo? command)
 | 
			
		||||
#nullable disable
 | 
			
		||||
    {
 | 
			
		||||
        return new[]
 | 
			
		||||
        {
 | 
			
		||||
            new Text("Help has moved online. Please see: http://www.example.com"),
 | 
			
		||||
            Text.NewLine,
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user