From 19ea00ef72cebf0d5ea2f220e52a2d9bcd20c22a Mon Sep 17 00:00:00 2001 From: Tristan Ancelet Date: Tue, 11 Aug 2026 11:17:34 -0500 Subject: [PATCH] added a few things --- src/cligen/command.cr | 4 ++++ src/cligen/command_node.cr | 5 +++-- src/cligen/flag.cr | 10 ++++------ src/cligen/parsable.cr | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/cligen/command.cr b/src/cligen/command.cr index d62f630..bc2b071 100644 --- a/src/cligen/command.cr +++ b/src/cligen/command.cr @@ -28,6 +28,10 @@ module CliGen @{{var.id}} = {{var.default_value}} {% end %} {% end %} + + {% if @type.has_method? :after_initialize %} + after_initialize + {% end %} {% end %} end end diff --git a/src/cligen/command_node.cr b/src/cligen/command_node.cr index 3947075..77492cb 100644 --- a/src/cligen/command_node.cr +++ b/src/cligen/command_node.cr @@ -235,7 +235,7 @@ module CliGen end when MatchType::NoMatch - raise "ERROR : CommandNode(#{@name}).process : No command, subcommand or flag match for '#{arg.value}'" + abort "ERROR : CommandNode(#{@name}).process : No command, subcommand or flag match for '#{arg.value}'" end end @@ -255,7 +255,8 @@ module CliGen {% if T.has_method?(:main) %} cls.main {% else %} - raise "ERROR : CommandNode({{T}})\#{{@def.name}} : No subcommand matched and no #main defined" + abort help + #raise "ERROR : CommandNode({{T}})\#{{@def.name}} : No subcommand matched and no #main defined" {% end %} end {% end %} diff --git a/src/cligen/flag.cr b/src/cligen/flag.cr index 6710198..06749a2 100644 --- a/src/cligen/flag.cr +++ b/src/cligen/flag.cr @@ -61,12 +61,10 @@ module CliGen def process(argv : Array(Arg) = [] of Arg) : Nil if requires_arg? - raise "ERROR : Flag({{T}}) : Array requires an argument but provided array is empty" if argv.empty? + raise "ERROR : Flag(#{T}, long: #{@long_key}) : Array requires an argument but provided array is empty" if argv.empty? + abort "ERROR : Flag(#{T}, long: #{@long_key}) : Provided argument was a flag (#{argv.first.value})" if argv.first.flag? end - if argv.first.flag? - abort "ERROR : Flag({{T}}) : Provided argument was a flag (#{argv.first.value})" - end {% if T == Bool %} @value = true @@ -101,7 +99,7 @@ module CliGen {% elsif T == String %} # String @value = argv.first.value argv.first.processed - {% elsif T.class < CliGen::Parseable %} + {% elsif T.class < CliGen::Parsable %} processed = argv.select(&.processed?) @value = T.parse_args(argv) post_processed = argv.select(&.processed?) @@ -109,7 +107,7 @@ module CliGen raise "ERROR : Flag({{T}}, long: #{@long_key})#process : Your {{T}}#process_args did not mark processed args as processed. Please check your code" end {% else %} - {% raise "ERROR : Flag({{T}}#process : Generic Type #{T} is not supported. To add support you must include CliGen::Parsable & implement the class method" %} + {% raise "ERROR : Flag({{T}}#process : Generic Type #{T} is not supported. To add support you must extend with CliGen::Parsable & implement the class method" %} {% end %} validate! diff --git a/src/cligen/parsable.cr b/src/cligen/parsable.cr index 533bd7d..7c5a9d0 100644 --- a/src/cligen/parsable.cr +++ b/src/cligen/parsable.cr @@ -1,3 +1,3 @@ -module CliGen::Parseable +module CliGen::Parsable abstract def parse_args(args : Array(CliGen::Arg)) end