parsearger-core
ParseArger Core Skills
Critical Decision Tree
Before running any command, decide:
-
Does the target file exist?
- YES → Use
parse(modify EXISTING parseArger script) - NO → Use
generate(create NEW script)
- YES → Use
-
Check parseArger availability:
- Run
parseArgerif in PATH - Otherwise use
./parseArger(from project root)
- Run
Invocation Rules
- Check
which parseArger→ if found, useparseArger - Fallback:
./parseArger(in project root) - Never assume location - always check first
CRITICAL: Generated Code Sections
All parseArger scripts contain generated code between:
# @parseArger-parsing# @parseArger-parsing-end
DO NOT manually edit code between these markers.
To modify argument parsing:
- Edit the
# @parseArgerdeclarations at the top of the file - Run
parseArger parse FILE --inplaceto regenerate the parsing logic
The generated parsing code is regenerated every time you use parseArger parse.
1. Generate a NEW Parser (generate)
Use when creating a NEW script that doesn't exist yet.
CRITICAL: Always Use --output
parseArger generate --output /path/to/script.sh [OPTIONS]
Without --output, output goes to stdout only.
Core Definitions
Define arguments using specific flags. The value is a quoted string containing the name, description, and specific settings.
Positional Arguments (--pos)
Syntax: --pos 'NAME "DESCRIPTION" [SETTINGS]'
Settings:
--optional: Make the argument optional.--repeat: Allow multiple values (creates an array_arg_name).--repeat-min N: Min repetitions (implies --repeat).--repeat-max N: Max repetitions.--one-of "VAL": Restrict to specific values (repeatable).--complete "FUNC": Bash built-in completion (e.g.,file,directory).--complete-custom "CMD": Custom dynamic completion command.--match "REGEX": Validate input against a regex pattern (e.g.^[0-9]+$).--subcommand: Mark as a subcommand (see Subcommands below).
**Options (--opt)Syntax:--opt 'NAME "DESCRIPTION" [SETTINGS]'`
Settings:
--short "C": Short flag character (e.g.,o).--default-value "VAL": Default value if not provided.--repeat: Allow multiple occurrences.--alias "NAME": Alternative long name.--empty: Allow usage without value (acts like flag).--empty-value "VAL": Value to set if used without value (requires--empty).--env "VAR": Fallback to environment variable if option not provided.--required: Mark option as mandatory (script fails if missing).--match "REGEX": Validate input against a regex pattern (e.g.^[0-9]+$).
Flags (--flag)
Syntax: --flag 'NAME "DESCRIPTION" [SETTINGS]'
Settings:
--short "C": Short flag character (e.g.,f).--on: Flag is on by default (passing it turns it off).--alias "NAME": Alias.--no-name "NAME": Custom name for negation (e.g.,--dont-do-it).
Nested Options (--nested)
Syntax: --nested 'NAME "DESCRIPTION" [SETTINGS]'
Creates an associative array for namespaced options (e.g., --config-db value).
Settings:
--one-of "KEY": Restrict accepted keys.--complete "FUNC",--complete-custom "CMD".
Global Settings
--help-message "MSG": Main help text.--help-option "OPT": Custom help flag (defaulthelp).--version-opt: Enable--version.--set-version "VER": Set version number.--leftovers: Enable collecting extra arguments (into_arg_leftovers).--verbose-level N: Default verbose level (default 0).--die-fn-name "NAME": Rename internal die function.--log-fn-name "NAME": Rename internal log function.
Example: Generate a New Script
parseArger generate --output /path/to/my-script.sh \
--pos 'filename "Input file" --complete file' \
--opt 'output "Output file" --short o --default-value "out.txt"' \
--flag 'force "Overwrite existing" --short f' \
--nested 'config "Configuration namespace"' \
--leftovers
Using Generated Variables
# Variables follow pattern $_arg_<name> (hyphens -> underscores)
echo "File: $_arg_filename"
echo "Output: $_arg_output"
if [ "$_arg_force" == "on" ]; then echo "Forcing..."; fi
# Nested options are associative arrays
# CLI: --config-db sqlite
echo "DB: ${_arg_config[db]}"
2. Parse/Modify EXISTING File (parse)
Use when the file EXISTS and was created with parseArger.
parseArger parse FILE [OPTIONS]
Common Options
-ior--inplace: Modify the file directly (RECOMMENDED).--pos,--opt,--flag: Add new arguments to the existing ones.--set-version "VER": Update the version.
Example: Modify Existing Script
# Add a new verbose flag to an existing script
parseArger parse my-script.sh --inplace \
--flag 'verbose "Enable verbose logging" --short v'
CRITICAL: Only use parse on files that:
- Already exist
- Contain
# @parseArgercomments - Were created with parseArger
3. Subcommands
To create a subcommand structure:
- Define a positional argument with
--subcommand. - Use
--subcommand-directory "DIR"to point to a directory of scripts. parseArgerwill treat files in that directory as subcommands.
Example:
parseArger generate --output /path/to/main.sh \
--pos 'action "What to do" --subcommand --subcommand-directory ./bin'
Specific Subcommand Settings:
--subcommand-directory "DIR": Auto-populate valid values from scripts in DIR.--subcommand-run: Immediately execute the subcommand script found.--subcommand-use-leftovers: Pass any leftover arguments to the subcommand.--subcommand-variable "VAR": Store subcommand parts in a specific variable (default__subcommand).
Quick Reference: generate vs parse
| Scenario | Command | Key Options |
|---|---|---|
| Create new script | generate |
--output PATH (REQUIRED) |
| Modify existing script | parse |
--inplace (RECOMMENDED) |
| Add arguments to existing | parse |
--pos, --opt, --flag |
| Update version | parse |
--set-version |