Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions src/DeclarativeCommandLine.Generator/CommandBuilderGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,18 +137,18 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
else
{
// Child command
sb.AppendLine($"{tab}var {cmdVar} = new Command(\"{cmd.CmdName}\");");
sb.AppendLine($"{tab}var {cmdVar} = new Command({cmd.CmdName.Lit()});");
sb.AppendLine($"{tab}cmd{parent.Index}.Add({cmdVar});");
}

// Aliases
foreach (var alias in cmd.CmdAliases)
{
sb.AppendLine($"{tab}{cmdVar}.Aliases.Add(\"{alias}\");");
sb.AppendLine($"{tab}{cmdVar}.Aliases.Add({alias.Lit()});");
}

// Description
sb.AppendLine($"{tab}{cmdVar}.Description = \"{cmd.CmdDescription}\";");
sb.AppendLine($"{tab}{cmdVar}.Description = {cmd.CmdDescription?.Lit() ?? "null"};");

// Hidden
sb.AppendLine($"{tab}{cmdVar}.Hidden = {cmd.CmdHidden.ToCSharpBoolString()};");
Expand All @@ -163,12 +163,12 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
if (opt.ArgumentAttribute != null)
{
sb.AppendLine($"{tab}// Argument {opt.OptName}");
sb.AppendLine($"{tab}var {optVar} = new Argument<{opt.PropertyTypeNameWithNullable}>(\"{opt.OptName}\");");
sb.AppendLine($"{tab}var {optVar} = new Argument<{opt.PropertyTypeNameWithNullable}>({opt.OptName.Lit()});");
sb.AppendLine($"{tab}{{");
sb.AppendLine($"{tab} {cmdVar}.Add({optVar});");

// Description
sb.AppendLine($"{tab} {optVar}.Description = \"{opt.OptDescription}\";");
sb.AppendLine($"{tab} {optVar}.Description = {opt.OptDescription?.Lit() ?? "null"};");

// Default value
if (opt.OptDefaultValue != null)
Expand All @@ -189,7 +189,7 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
// From among
if (opt.OptFromAmong.Count > 0)
{
var allowedValues = string.Join(", ", opt.OptFromAmong.Select(o => $"\"{o}\""));
var allowedValues = string.Join(", ", opt.OptFromAmong.Select(o => o.Lit()));
sb.AppendLine($"{tab} {optVar}.AcceptOnlyFromAmong([{allowedValues}]);");
}

Expand All @@ -202,7 +202,7 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
if (opt.OptionAttribute != null)
{
sb.AppendLine($"{tab}// Option {opt.OptName}");
sb.AppendLine($"{tab}var {optVar} = new Option<{opt.PropertyTypeNameWithNullable}>(\"{opt.OptName}\");");
sb.AppendLine($"{tab}var {optVar} = new Option<{opt.PropertyTypeNameWithNullable}>({opt.OptName.Lit()});");
sb.AppendLine($"{tab}{{");
sb.AppendLine($"{tab} {cmdVar}.Add({optVar});");

Expand All @@ -212,7 +212,7 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
);

// Description
sb.AppendLine($"{tab} {optVar}.Description = \"{opt.OptDescription}\";");
sb.AppendLine($"{tab} {optVar}.Description = {opt.OptDescription?.Lit() ?? "null"};");

// Hidden
sb.AppendLine($"{tab} {optVar}.Hidden = {opt.OptHidden.ToCSharpBoolString()};");
Expand All @@ -223,7 +223,7 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
// Aliases
foreach (var alias in opt.OptAliases)
{
sb.AppendLine($"{tab} {optVar}.Aliases.Add(\"{alias}\");");
sb.AppendLine($"{tab} {optVar}.Aliases.Add({alias.Lit()});");
}

// Default value
Expand All @@ -245,7 +245,7 @@ private static void WriteCommand(StringBuilder sb, List<CommandView> cmds, Comma
// From among
if (opt.OptFromAmong.Count > 0)
{
var allowedValues = string.Join(", ", opt.OptFromAmong.Select(o => $"\"{o}\""));
var allowedValues = string.Join(", ", opt.OptFromAmong.Select(o => o.Lit()));
sb.AppendLine($"{tab} {optVar}.AcceptOnlyFromAmong([{allowedValues}]);");
}

Expand Down
2 changes: 1 addition & 1 deletion src/DeclarativeCommandLine.Generator/CommandView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ .. namedSymbol
view.CmdAliases = cmdAttr.NamedArguments.GetNamedArgumentArray<string>("Aliases");

// Description
view.CmdDescription = (cmdAttr.NamedArguments.GetNamedArgument("Description") as string)?.ToEscapedCSharpString();
view.CmdDescription = cmdAttr.NamedArguments.GetNamedArgument("Description") as string;

// Hidden
view.CmdHidden = cmdAttr.NamedArguments.GetNamedArgument("Hidden") as bool? ?? false;
Expand Down
4 changes: 2 additions & 2 deletions src/DeclarativeCommandLine.Generator/PropertyView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class PropertyView

public AttributeData? OptionAttribute { get; private set; }

public string? OptName { get; private set; }
public string OptName { get; private set; } = null!;

public string PropertyTypeName { get; private set; } = null!;

Expand Down Expand Up @@ -151,7 +151,7 @@ private static void ParseShared(PropertyView view, AttributeData optionAttr)

case "Description":
{
view.OptDescription = (constrArg.Value.Value as string)?.ToEscapedCSharpString();
view.OptDescription = constrArg.Value.Value as string;
break;
}

Expand Down
7 changes: 5 additions & 2 deletions src/DeclarativeCommandLine.Generator/SystemExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

namespace DeclarativeCommandLine.Generator;

public static class SystemExtensions
{
public static string ToEscapedCSharpString(this string source) =>
source == null ? throw new ArgumentNullException(nameof(source)) : source.Replace(@"\", @"\\").Replace("\n", "\\n");
public static string Lit(this string source) =>
source == null
? throw new ArgumentNullException(nameof(source))
: SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(source)).ToFullString();

[SuppressMessage(
"Globalization",
Expand Down