Добавьте файлы проекта.
This commit is contained in:
25
ArgumentsToolkit.Help/ArgumentsToolkit.Help.csproj
Normal file
25
ArgumentsToolkit.Help/ArgumentsToolkit.Help.csproj
Normal file
@@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<PackageId>ArgumentsToolkit.Help</PackageId>
|
||||
<Version>1.0.0</Version>
|
||||
<Authors>FrigaT</Authors>
|
||||
<Company>FrigaT</Company>
|
||||
<Description>Расширение для ArgumentsToolkit.Core: генерация справки (--help), вывод в консоль, Markdown/HTML.</Description>
|
||||
<PackageTags>cli arguments parser help toolkit</PackageTags>
|
||||
<RepositoryUrl>https://git.frigat.duckdns.org/FrigaT/ArgumentsToolkit</RepositoryUrl>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ArgumentsToolkit.Core\ArgumentsToolkit.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
36
ArgumentsToolkit.Help/Collectors/HelpCollector.cs
Normal file
36
ArgumentsToolkit.Help/Collectors/HelpCollector.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Сборщик информации о параметрах из модели Options.
|
||||
/// </summary>
|
||||
public static class HelpCollector
|
||||
{
|
||||
/// <summary>
|
||||
/// Собирает метаданные о параметрах из указанной модели Options.
|
||||
/// </summary>
|
||||
public static HelpModel Collect<T>()
|
||||
{
|
||||
var model = new HelpModel();
|
||||
var props = typeof(T).GetProperties();
|
||||
|
||||
foreach (var prop in props)
|
||||
{
|
||||
var opt = prop.GetCustomAttribute<OptionAttribute>();
|
||||
if (opt == null) continue;
|
||||
|
||||
model.Entries.Add(new HelpEntry
|
||||
{
|
||||
Name = opt.Name,
|
||||
ShortName = opt.ShortName,
|
||||
Description = opt.Description,
|
||||
TypeName = prop.PropertyType.Name,
|
||||
Required = opt.Required,
|
||||
DefaultValue = opt.DefaultValue
|
||||
});
|
||||
}
|
||||
|
||||
return model;
|
||||
}
|
||||
}
|
||||
13
ArgumentsToolkit.Help/Exceptions/HelpGenerationException.cs
Normal file
13
ArgumentsToolkit.Help/Exceptions/HelpGenerationException.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Исключение, выбрасываемое при ошибках генерации справки.
|
||||
/// </summary>
|
||||
public class HelpGenerationException : Exception
|
||||
{
|
||||
/// <summary>
|
||||
/// Создаёт новое исключение генерации справки.
|
||||
/// </summary>
|
||||
/// <param name="message">Сообщение об ошибке.</param>
|
||||
public HelpGenerationException(string message) : base(message) { }
|
||||
}
|
||||
29
ArgumentsToolkit.Help/Extensions/HelpExtensions.cs
Normal file
29
ArgumentsToolkit.Help/Extensions/HelpExtensions.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Расширенные методы для удобного форматирования справки.
|
||||
/// </summary>
|
||||
public static class HelpExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Форматирует справку в Markdown.
|
||||
/// </summary>
|
||||
/// <param name="model">Модель справки.</param>
|
||||
/// <returns>Строка в формате Markdown.</returns>
|
||||
public static string AsMarkdown(this HelpModel model)
|
||||
{
|
||||
IHelpFormatter formatter = new MarkdownHelpFormatter();
|
||||
return formatter.Format(model);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Форматирует справку в HTML.
|
||||
/// </summary>
|
||||
/// <param name="model">Модель справки.</param>
|
||||
/// <returns>Строка в формате HTML.</returns>
|
||||
public static string AsHtml(this HelpModel model)
|
||||
{
|
||||
IHelpFormatter formatter = new HtmlHelpFormatter();
|
||||
return formatter.Format(model);
|
||||
}
|
||||
}
|
||||
21
ArgumentsToolkit.Help/Formatters/HtmlHelpFormatter.cs
Normal file
21
ArgumentsToolkit.Help/Formatters/HtmlHelpFormatter.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Форматтер для генерации справки в формате HTML.
|
||||
/// </summary>
|
||||
public class HtmlHelpFormatter : IHelpFormatter
|
||||
{
|
||||
public string Format(HelpModel model)
|
||||
{
|
||||
var lines = new List<string> { $"<h2>{model.Title}</h2>", "<ul>" };
|
||||
|
||||
foreach (var entry in model.Entries)
|
||||
{
|
||||
string required = entry.Required ? " (обязательный)" : "";
|
||||
lines.Add($"<li><b>--{entry.Name} / -{entry.ShortName}</b>: {entry.Description} ({entry.TypeName}{required})</li>");
|
||||
}
|
||||
|
||||
lines.Add("</ul>");
|
||||
return string.Join(Environment.NewLine, lines);
|
||||
}
|
||||
}
|
||||
9
ArgumentsToolkit.Help/Formatters/IHelpFormatter.cs
Normal file
9
ArgumentsToolkit.Help/Formatters/IHelpFormatter.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс для форматирования справки в разные форматы.
|
||||
/// </summary>
|
||||
public interface IHelpFormatter
|
||||
{
|
||||
string Format(HelpModel model);
|
||||
}
|
||||
20
ArgumentsToolkit.Help/Formatters/MarkdownHelpFormatter.cs
Normal file
20
ArgumentsToolkit.Help/Formatters/MarkdownHelpFormatter.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Форматтер для генерации справки в формате Markdown.
|
||||
/// </summary>
|
||||
public class MarkdownHelpFormatter : IHelpFormatter
|
||||
{
|
||||
public string Format(HelpModel model)
|
||||
{
|
||||
var lines = new List<string> { $"## {model.Title}" };
|
||||
|
||||
foreach (var entry in model.Entries)
|
||||
{
|
||||
string required = entry.Required ? " (обязательный)" : "";
|
||||
lines.Add($"- **--{entry.Name} / -{entry.ShortName}**: {entry.Description} ({entry.TypeName}{required})");
|
||||
}
|
||||
|
||||
return string.Join(Environment.NewLine, lines);
|
||||
}
|
||||
}
|
||||
14
ArgumentsToolkit.Help/Models/HelpEntry.cs
Normal file
14
ArgumentsToolkit.Help/Models/HelpEntry.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Описание одного аргумента для справки.
|
||||
/// </summary>
|
||||
public class HelpEntry
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string? ShortName { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string TypeName { get; set; }
|
||||
public bool Required { get; set; }
|
||||
public object? DefaultValue { get; set; }
|
||||
}
|
||||
10
ArgumentsToolkit.Help/Models/HelpModel.cs
Normal file
10
ArgumentsToolkit.Help/Models/HelpModel.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace ArgumentsToolkit.Help;
|
||||
|
||||
/// <summary>
|
||||
/// Справка по всей модели Options.
|
||||
/// </summary>
|
||||
public class HelpModel
|
||||
{
|
||||
public string Title { get; set; } = "Доступные аргументы";
|
||||
public List<HelpEntry> Entries { get; set; } = new();
|
||||
}
|
||||
Reference in New Issue
Block a user