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 |
Test cases 7
ExpressionGroupingRuleTest::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescoversExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcoversExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycoversExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncoversExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescoversExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescoversExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescovers
public function rewrite(TerminalSequence $sequence): TerminalSequenceParenthesizes nested compound operands, retaining their original production and leaf identities.
Parameters
$sequence | TerminalSequence |
Returns
Test cases 7
ExpressionGroupingRuleTest::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescovers and callsExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcovers and callsExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycovers and callsExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncovers and callsExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescovers and callsExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescovers and callsExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescovers and calls
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 7
ExpressionGroupingRuleTest::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescovers and callsExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcoversExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycoversExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncoversExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescoversExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescoversExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescovers
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::testRangesIncludesNestedAncestorsAndIgnoresEmptyOccurrencescovers and callsExpressionGroupingRuleTest::testRewriteContinuesAfterAnAlreadyGroupedOperandcovers and callsExpressionGroupingRuleTest::testRewriteGroupsARestrictedOperandInsideTheGeneralExpressionFamilycovers and callsExpressionGroupingRuleTest::testRewritePreservesBothNestedOperandsOfANonAssociativeComparisoncovers and callsExpressionGroupingRuleTest::testRewritePreservesTopLevelExpressionsAndUnrelatedNestedRulescovers and callsExpressionGroupingRuleTest::testRewriteRetainsNestedBoundaryProvenanceAndPreviouslyInsertedIdentitiescovers and callsExpressionGroupingRuleTest::testRewriteUsesTheConfiguredDialectTerminalNamescovers and calls
Other tests reaching this symbol 4
GenerationContextTestcallsRewriteDefinitionsTestcallsMySqlProviderTestcallsSqlGeneratorFactoryTestcalls