Skip to content

feat(hook): handle global options before subcommands#99

Merged
pszymkowiak merged 3 commits intortk-ai:masterfrom
mhcoen:feat/global-options-normalization
Feb 15, 2026
Merged

feat(hook): handle global options before subcommands#99
pszymkowiak merged 3 commits intortk-ai:masterfrom
mhcoen:feat/global-options-normalization

Conversation

@mhcoen
Copy link
Contributor

@mhcoen mhcoen commented Feb 13, 2026

Summary

  • Normalize git, cargo, docker, and kubectl commands by stripping global options to find the subcommand before matching
  • git -C /path status, cargo +nightly test, docker -H host ps, kubectl --context prod get pods now correctly rewrite
  • Preserves all original arguments (including global options) in the rewritten rtk command

Tools affected

Tool Global options now handled
git -C <path>, -c k=v, --no-pager, --no-optional-locks, --bare, --literal-pathspecs, --key=val
cargo +nightly, +stable, +1.75.0
docker -H <host>, --context <ctx>, --config <path>, --key=val
kubectl --context <ctx>, -n <ns>, --kubeconfig <path>, --namespace <ns>, --key=val

Test plan

🤖 Generated with Claude Code

mhcoen and others added 2 commits February 12, 2026 20:40
…ibility

Replace \s with [[:space:]] in all grep -E patterns. The \s shorthand
is a PCRE extension not guaranteed by POSIX ERE, causing intermittent
match failures on macOS depending on grep version and locale settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ker/kubectl

Normalize commands by stripping global options (git -C, --no-pager;
cargo +toolchain; docker -H, --context; kubectl --context, -n) to
correctly identify the subcommand for rewrite matching. Preserves all
original arguments in the rewritten command.
@pszymkowiak
Copy link
Collaborator

please review conlficts error ( rebase )

…ns-normalization

# Conflicts:
#	hooks/rtk-rewrite.sh
@mhcoen
Copy link
Contributor Author

mhcoen commented Feb 14, 2026

I fixed the merge conflicts

@pszymkowiak pszymkowiak merged commit 7401f10 into rtk-ai:master Feb 15, 2026
2 checks passed
ahundt added a commit to ahundt/rtk that referenced this pull request Feb 15, 2026
… dispatcher

Merge origin/master (7401f10) into feat/multi-platform-hooks.

From master (6 commits):
- src/format_cmd.rs: add universal format command (prettier, black, ruff format)
- src/lint_cmd.rs: add Python lint dispatcher (pylint, mypy, flake8, ruff via rtk lint)
- src/git.rs: add "Not a git repository" error handling for git status
- src/ruff_cmd.rs: make filter_ruff_check_json and filter_ruff_format pub
- src/main.rs: add Format command variant and mod format_cmd
- hooks/rtk-rewrite.sh: global option stripping for git/cargo/docker/kubectl (PR rtk-ai#99)
- Cargo.toml: version bump to 0.16.0

Conflict resolution:
- hooks/rtk-rewrite.sh: kept 3-line migration shim (shell logic replaced by Rust
  handlers in this branch), integrated PR rtk-ai#99 global option stripping into Rust

Branch additions to integrate master capabilities:
- src/config/rules.rs: add strip_global_options() for git (-C, --no-pager,
  --no-optional-locks, --bare, --literal-pathspecs, --key=value), cargo (+toolchain),
  docker (-H, --context, --config), kubectl (--context, --kubeconfig, -n).
  Updated matches_rule() to normalize commands before multi-word pattern matching.
  Table-driven tests: 26 strip cases, 11 rule-matching-with-globals cases.
- src/cmd/hook.rs: add test_global_options_not_blocked (12 cases),
  test_compound_commands_rewrite (5 chain cases with operator preservation),
  test_compound_blocked_in_chain (3 cases), test_compound_quoted_operators_not_split.
- src/ccusage.rs: fix trailing whitespace (cargo fmt)

675 tests pass, 0 failures. cargo fmt clean, no new clippy warnings.
ahundt added a commit to ahundt/rtk that referenced this pull request Feb 23, 2026
… dispatcher

Merge origin/master (9324f4c) into feat/multi-platform-hooks.

From master (6 commits):
- src/format_cmd.rs: add universal format command (prettier, black, ruff format)
- src/lint_cmd.rs: add Python lint dispatcher (pylint, mypy, flake8, ruff via rtk lint)
- src/git.rs: add "Not a git repository" error handling for git status
- src/ruff_cmd.rs: make filter_ruff_check_json and filter_ruff_format pub
- src/main.rs: add Format command variant and mod format_cmd
- hooks/rtk-rewrite.sh: global option stripping for git/cargo/docker/kubectl (PR rtk-ai#99)
- Cargo.toml: version bump to 0.16.0

Conflict resolution:
- hooks/rtk-rewrite.sh: kept 3-line migration shim (shell logic replaced by Rust
  handlers in this branch), integrated PR rtk-ai#99 global option stripping into Rust

Branch additions to integrate master capabilities:
- src/config/rules.rs: add strip_global_options() for git (-C, --no-pager,
  --no-optional-locks, --bare, --literal-pathspecs, --key=value), cargo (+toolchain),
  docker (-H, --context, --config), kubectl (--context, --kubeconfig, -n).
  Updated matches_rule() to normalize commands before multi-word pattern matching.
  Table-driven tests: 26 strip cases, 11 rule-matching-with-globals cases.
- src/cmd/hook.rs: add test_global_options_not_blocked (12 cases),
  test_compound_commands_rewrite (5 chain cases with operator preservation),
  test_compound_blocked_in_chain (3 cases), test_compound_quoted_operators_not_split.
- src/ccusage.rs: fix trailing whitespace (cargo fmt)

675 tests pass, 0 failures. cargo fmt clean, no new clippy warnings.
ahundt pushed a commit to ahundt/rtk that referenced this pull request Feb 23, 2026
* fix(hook): use POSIX character classes for cross-platform grep compatibility

Replace \s with [[:space:]] in all grep -E patterns. The \s shorthand
is a PCRE extension not guaranteed by POSIX ERE, causing intermittent
match failures on macOS depending on grep version and locale settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(hook): handle global options before subcommands in git/cargo/docker/kubectl

Normalize commands by stripping global options (git -C, --no-pager;
cargo +toolchain; docker -H, --context; kubectl --context, -n) to
correctly identify the subcommand for rewrite matching. Preserves all
original arguments in the rewritten command.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants