tristan
f2d5c84f2b
Made changes:
...
- Updated .gitignore to include specs
- Re-licensed to MPL-2.0 as I want any modifications to be pushed back
to the main codebase so that the ecosystem can benefit from developer
adoption
- Updated LICENSE & shard.yml with new license
- Changed author to personal email as this is not being done for my
company
2026-08-30 12:52:16 -05:00
tristan
fe6112795a
Made several modifications:
...
- Added more complex date/time parsing for Time objects. This includes
the ability to provide times in epoch format and several others with
the ability to provide inline timezone offsets without external
codebase works to convert them. Alongside this I added the ability to
do relative time (ex: [+-]2 hours|minutes|days) (along with the ability
to specify timezone if needed)
- Littered the entire codebase with Log object calls to show state of
everything as the framework does it's stuff. Just needs Log to be
configured in the codebase consuming my shard
- removed flag collection for use in displaying all flags in the app
help output. So it will only show global flags & subcommands
- Changed CommandNode#get(short:) & get(long:) & flag?(arg : String)
methods to check @flags -> @commands.@flags -> CliGen::GLOBAL_FLAGS
when finding flags. Making it possible to not PRINT out the flag
output but still be able to set values to a child flag recursively.
2026-08-29 18:51:08 -05:00
Tristan Ancelet
fd4c0eb171
Had to fix default_value usage
2026-08-24 14:10:21 -05:00
Tristan Ancelet
fda58a2ff7
Added a test to see if it works
2026-08-24 14:00:44 -05:00
Tristan Ancelet
777a1b992a
Had to fix block.call to yield so that the compiler could be happy
2026-08-17 09:25:42 -05:00
tristan
a17053f45c
Added a specs for flag & arg. As well as changed a few ways I as handling cli args and determining how they're to be passed to each flag
2026-08-16 17:19:10 -05:00
Tristan Ancelet
6535753fa3
Had to fix some things in coerce
2026-08-14 15:55:28 -05:00
Tristan Ancelet
09389cb5e9
Added differnt check for default. Set it to empty string as a way of determining if a default was set. Ignoring empty strings
2026-08-14 15:01:04 -05:00
Tristan Ancelet
d1746602b1
modified the way that the FlagMeta default string gets generated based on Array vs LITERALLY anything else
2026-08-14 14:57:05 -05:00
Tristan Ancelet
21462029e3
Fixed template
2026-08-14 14:34:10 -05:00
Tristan Ancelet
4a0dcb8b59
Had to fix expression to show type as {{...}} isn't expanded in macro expression betweeh {% ... %}
2026-08-14 14:19:38 -05:00
Tristan Ancelet
8780be3a42
Removed 'long' from macro expression
2026-08-14 14:18:02 -05:00
Tristan Ancelet
fd510469ac
Added allow_no_verification for users to bypass the 'must have options or validation' check. However, not doing so can cause unexpected failures where flags will begin consuming preceeding arguments
2026-08-14 14:14:53 -05:00
Tristan Ancelet
f55cc25f2d
Modified Command.argument to let the user provide a method call for runtime learning of options value. This will let the compiler check at compile time
2026-08-14 14:10:25 -05:00
Tristan Ancelet
b05f49c2e8
Fixed something maybe
2026-08-14 14:00:31 -05:00
Tristan Ancelet
d3ca70ea9e
Added options for array checking of base types Strings/Int32/etc
2026-08-14 13:55:10 -05:00
Tristan Ancelet
697a0db3af
Added debug message to print out a missing match + the format being matched
2026-08-12 16:34:16 -05:00
Tristan Ancelet
a1a9c6fc04
Added format filter to enforce formatting on array objects
2026-08-12 16:26:35 -05:00
Tristan Ancelet
ffde5165f7
Added format support for filtering arguments
2026-08-12 16:12:59 -05:00
Tristan Ancelet
53f510278c
added thing
2026-08-12 13:12:09 -05:00
Tristan Ancelet
e6d9306e69
Added exit & default to help if no main is specified
2026-08-12 13:10:30 -05:00
Tristan Ancelet
18c5a559b1
Added exit & default to help if no main is specified
2026-08-12 13:08:24 -05:00
Tristan Ancelet
28c45fae9e
Added guard for empty @flags array in template
2026-08-12 13:01:41 -05:00
Tristan Ancelet
f889aae5e1
added dynamic resizing of description for flag & the like
2026-08-12 12:56:59 -05:00
Tristan Ancelet
e90d89689c
Increased default spacing in commands and flags
2026-08-12 12:50:42 -05:00
Tristan Ancelet
9b3d823bc7
Comitting for testing
2026-08-12 12:43:44 -05:00
Tristan Ancelet
d02eded273
Trying again
2026-08-12 12:40:08 -05:00
Tristan Ancelet
fc592fee37
Trying again
2026-08-12 12:38:55 -05:00
Tristan Ancelet
47b4bfa494
had to fix syntax
2026-08-12 12:37:28 -05:00
Tristan Ancelet
1a2da86048
Allowed delim in macros
2026-08-12 12:36:23 -05:00
Tristan Ancelet
37c5083ae2
added def_init
2026-08-12 11:59:49 -05:00
Tristan Ancelet
976ed10f75
Added def_getter
2026-08-12 11:00:56 -05:00
Tristan Ancelet
ea8ca62a63
Added StringIterpolation
2026-08-12 10:55:22 -05:00
Tristan Ancelet
0c7849dc7c
Added options
2026-08-11 12:24:30 -05:00
Tristan Ancelet
47df89a6c1
Had to fix the selection macro. Was part of the way throught and skipped finishing it
2026-08-11 11:58:04 -05:00
Tristan Ancelet
afd7ba7c7b
Added options to Command.argument macro
2026-08-11 11:53:38 -05:00
Tristan Ancelet
8447a1ffbb
Added prerun command annotation & implementation
2026-08-11 11:37:22 -05:00
Tristan Ancelet
4af08f8efe
had to fix again
2026-08-11 11:24:22 -05:00
Tristan Ancelet
1085335c88
Had to add for lib setup
2026-08-11 11:22:02 -05:00
Tristan Ancelet
19ea00ef72
added a few things
2026-08-11 11:17:34 -05:00
tristan
8d17de7434
Fix annotation key mismatch: validate -> validation in generate.cr
...
anno[:validate] was always nil; validation procs were never wired
into Flag(T).new. Correct key is :validation to match the field
name set by the argument macro in command/argument.cr.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs
2026-08-10 13:12:12 -05:00
Tristan Ancelet
405303e4f8
updated .gitignor
2026-08-10 13:00:23 -05:00
Tristan Ancelet
29327a3e83
Got Array(T) working in flag.cr. Hacky stuff it is to convince the compiler that a value isn't going to be nil if I set it
2026-08-10 12:57:31 -05:00
tristan
ac5711c0df
Update .claude/settings.json with project permission allowlist
...
Allows crystal build/spec/run, shards, git read/write, and ls
without per-call prompts — consistent across machines.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs
2026-08-10 08:02:58 -05:00
tristan
519c8dcd44
Remove test binary and test.cr
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs
2026-08-10 07:59:02 -05:00
tristan
bc0f56fda9
Add .claude/, .gitignore, and update README
...
- .claude/settings.json: project-level Claude Code config
- .gitignore: ignores test binary, build artifacts, shards cache, tags
- README.md: expanded with usage example, dev commands, and AI assistance
disclosure (Claude used for review/bug-checking, not code generation)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs
2026-08-10 07:58:15 -05:00
tristan
6f31a5d27c
object_rework: working MVP with runtime CommandNode tree
...
- BaseCommandNode (abstract) / CommandNode(T) split for heterogeneous tree
- Flag(T) with compile-time type branching, Parsable/Coercable modules
- Arg double-process invariant enforcement
- App.generate macro builds CommandNode tree from Command subclasses
- Command#initialize generated via macro finished, populates ivars from handler
- Reserved -h/--help enforcement in Flag#check!
- MatchType::Help added, SubCommand dispatch fixed
- design.adoc: added Planned Features (markdown docs, bash completion)
- Makefile: tabs, .DEFAULT_GOAL, doc_show target
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-08-09 22:49:55 -05:00
tristan
f5571cde73
Committing before test
2026-08-09 15:20:06 -05:00
Tristan Ancelet
3217750714
Added README changes to show install steps
2026-03-31 10:27:52 -05:00
Tristan Ancelet
613e059fb7
forgot to change one
2026-03-31 09:20:53 -05:00