Skip to content

Fix/expression space parsing#18

Merged
ShaneBeee merged 3 commits intodev/featurefrom
fix/expression-space-parsing
Mar 10, 2026
Merged

Fix/expression space parsing#18
ShaneBeee merged 3 commits intodev/featurefrom
fix/expression-space-parsing

Conversation

@ShaneBeee
Copy link
Member

@ShaneBeee ShaneBeee commented Mar 10, 2026

Fix expression parsing with space-separated expressions

Problem

Patterns with two expressions separated only by whitespace or optional elements would fail to parse. For example:

Patterns that failed:

  • "claude test %number% [of] %number%"
  • "location %direction% [of] %location%"

Inputs that didn't work:

  • claude test 1 2
  • location above {_loc}

But these worked fine:

  • claude test 1 of 2
  • location north of {_loc}

Root Cause

In ExpressionElement.java at lines 135-137, there was an incorrect boundary check:

if (expressionIndex + 1 >= flattened.size()) {
    continue;  // This was wrong!
}

This check would skip processing when the next expression was the last element in the pattern. For a pattern like "claude test %number% [of] %number%", the flattened elements would be:

[0] TextElement("claude test ")
[1] ExpressionElement(%number%)
[2] TextElement(" ")
[3] OptionalGroup([TextElement("of")])
[4] TextElement(" ")
[5] ExpressionElement(%number%)  <- Last element

When matching the first expression, the code would find the second expression at index 5, then check 5 + 1 >= 6true, and skip it entirely, causing the match to fail.

Solution

Removed the incorrect boundary check. When an expression is the last element in a pattern, getPossibleInputs() correctly returns [TextElement("\0")] (the end-of-line marker), which is properly handled by the existing code below.

Changes

  • Fixed: ExpressionElement.java - Removed incorrect boundary check (lines 135-137)
  • Added: ClaudeDebugTest.java - Unit test verifying both space-separated and optional text cases

Testing

The new unit test verifies:

  • claude test 1 2 (space between expressions)
  • claude test 1 of 2 (optional text between expressions)

All existing tests continue to pass.

Related Issues

Fixes issues with parsing expressions that have:


🤖 This fix was identified and implemented with assistance from Claude Code.


You can copy this and use it as your PR description! It provides a clear explanation of the problem, the root cause, and the solution for reviewers.

ShaneBeee and others added 3 commits March 10, 2026 11:55
Fixes a bug where patterns with two expressions separated only by
whitespace or optional elements would fail to parse.

The issue was in ExpressionElement.java at line 135-137, where the
code incorrectly skipped processing when the next expression was the
last element in the pattern. This caused patterns like:
- "claude test %number% [of] %number%"
- "location %direction% [of] %location%"

To fail when parsing inputs like:
- "claude test 1 2"
- "location above {_loc}"

The fix removes the incorrect boundary check. When an expression is
the last element, getPossibleInputs() correctly returns the end-of-line
marker "\0", which is properly handled by the existing code.

Includes unit test (ClaudeDebugTest) that verifies both space-separated
and optional text cases work correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@ShaneBeee ShaneBeee merged commit 2c25383 into dev/feature Mar 10, 2026
1 check passed
@ShaneBeee ShaneBeee deleted the fix/expression-space-parsing branch March 10, 2026 19:06
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.

1 participant