diff --git a/gptdiff/gptdiff.py b/gptdiff/gptdiff.py index 6defca6..b2f3a70 100644 --- a/gptdiff/gptdiff.py +++ b/gptdiff/gptdiff.py @@ -535,7 +535,12 @@ def parse_arguments(): parser.add_argument('--nowarn', action='store_true', help='Disable large token warning') parser.add_argument('--anthropic_budget_tokens', type=int, default=None, help='Budget tokens for Anthropic extended thinking') parser.add_argument('--verbose', action='store_true', help='Enable verbose output with detailed information') - return parser.parse_args() + + # Allow optional arguments like --apply to appear before or after file paths + parse_fn = parser.parse_args + if hasattr(parser, 'parse_intermixed_args'): + parse_fn = parser.parse_intermixed_args + return parse_fn() def absolute_to_relative(absolute_path): cwd = os.getcwd() diff --git a/tests/test_argparse_interleaving.py b/tests/test_argparse_interleaving.py new file mode 100644 index 0000000..a48a4c5 --- /dev/null +++ b/tests/test_argparse_interleaving.py @@ -0,0 +1,21 @@ +import sys +from unittest import mock + +import gptdiff.gptdiff as gptdiff + + +def parse(argv): + with mock.patch.object(sys, 'argv', argv): + return gptdiff.parse_arguments() + + +def test_apply_after_file(): + args = parse(['gptdiff', 'prompt', 'file.js', '--apply']) + assert args.apply is True + assert args.files == ['file.js'] + + +def test_apply_before_file(): + args = parse(['gptdiff', 'prompt', '--apply', 'file.js']) + assert args.apply is True + assert args.files == ['file.js']