classExpressionGroupingRule
final class ExpressionGroupingRule
implements RewriteRule
Preserves derived operand grouping where the source grammar permits parenthesized expressions. This also prevents non-associative operators from being serialized as forbidden flat chains.
Methods§
public function __construct(
private non-empty-list<string> $expressions,
private string $source,
private string $open = '(',
private string $close = ')',
)Parameters
$expressions | non-empty-list<string> | Expression families with a parenthesized primary production |
$source | string | |
$open | string | |
$close | string |
public function rewrite(TerminalSequence $sequence): TerminalSequenceParenthesizes nested compound operands, retaining their original production and leaf identities.
Parameters
$sequence | TerminalSequence |
Returns
Test cases 7
ExpressionGroupingRuleTest::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescallsExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcallsExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycallsExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncallsExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescallsExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescallsExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescalls
Calls 11
- method-call ExpressionGroupingRule::ranges() line 29
- function-call
minline 33 - function-call
array_mapline 33 - function-call
in_arrayline 37 - function-call
array_searchline 47 - function-call
array_sliceline 48 - function-call
countline 49 - new TerminalOccurrence line 50
- function-call
array_pushline 58 - function-call
array_reverseline 60 - method-call TerminalSequence::replace() line 62
public function ranges(TerminalSequence $sequence): array<int, array{int, int}>Finds all source subtree ranges in one pass through retained ancestor identities.
Parameters
$sequence | TerminalSequence |
Returns
array<int, array{int, int}>Test cases 1
Private surface 4§
Implementation details, listed for orientation only.
private non-empty-list<string> $expressionsprivate string $sourceprivate string $open = '('private string $close = ')'Test cases 11§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 7
ExpressionGroupingRuleTest::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescallsExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcallsExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycallsExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncallsExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescallsExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescallsExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescalls
Other tests reaching this symbol 4
GenerationContextTestcallsRewriteDefinitionsTestcallsSqlGeneratorFactoryTestcallsSqliteProviderTestcalls