Fix option precedence over positional arguments #197
+134
−56
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bug
Before these changes, the generated code would incorrectly bind anything to required postional arguments (parameters decorated with
Argument
attribute) - this includes options.For example:
Would print:
Which is invalid, and should fail because "path" is missing.
Fix
Emitter.EmitRun
so named options are handled before positional[Argument]
parameters:argumentPosition
counter that advances only when a non-option token is consumed, keeping positional slots aligned with the number of positional values actually provided.-x
/--name
(exclude negative numbers) and run the existing switch to parse it; when a match occurs, setoptionMatched
andcontinue
so the token never reaches positional binding.RunTest.cs
with four regression tests that cover the original single-argument case, multiple positional arguments, an[Argument]
with a default value, and a command that mixes[Argument]
with aparams
array, demonstrating the new parser behavior across common patterns.Tests
All 104 generator tests (including the 4 new ones) pass.