classPlanBuilder
final class PlanBuilder
Compiles choices through the production generation pipeline into immutable instructions.
Methods§
public function __construct(
private Grammar $grammar,
private LexicalGrammar $lexical,
private ?TokenRewriter $rewriter = null,
private Closure(string|null): string|null $startSymbol = null,
)Parameters
$grammar | Grammar | |
$lexical | LexicalGrammar | |
$rewriter | ?TokenRewriter | |
$startSymbol | Closure(string|null): string|null | Resolves explicit release aliases |
Test cases 11
PlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncoversPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscoversPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcoversPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecoversPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcoversPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecoversPlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcoversPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcoversPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycoversPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscoversPlanBuilderTest::testRootResolvesOnlyAnExplicitReleaseAliascovers
Calls 4
- new CompletionCosts line 37
- method-call LexicalGrammar::isNonOutput() line 37
- new TokenGenerator line 38
- new
Generatorline 38
public function minimumExpansions(GenerationPlan<bool> $plan): intIncludes descendant and repeated-occurrence constraints before drawing an expansion budget.
Parameters
$plan | GenerationPlan<bool> |
Returns
intTest cases 4
PlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcovers and callsPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcovers and callsPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycovers and callsPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscovers and calls
Called from 1
Calls 6
- method-call ConstrainedCompletion::minimum() line 47
- new ConstrainedCompletion line 47
- new NonTerminal line 48
- method-call PlanBuilder::root() line 48
- method-call GenerationPlan::requiresNonEmpty() line 51
- method-call GenerationPlan::expansionBudget() line 52
public function root(GenerationPlan<bool> $plan): stringUses the grammar entry point unless the caller explicitly requests a rule.
Parameters
$plan | GenerationPlan<bool> |
Returns
stringTest cases 11
PlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncoversPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscoversPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcoversPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecoversPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcoversPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecoversPlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcoversPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcoversPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycoversPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscoversPlanBuilderTest::testRootResolvesOnlyAnExplicitReleaseAliascovers and calls
Called from 2
Calls 1
- method-call GenerationPlan::startRule() line 62
public function build<T of bool>(
GenerationPlan<T> $constraints,
int $budget,
Closure(int): ?int $productionChoice,
Closure(int): ?int $lexicalChoice,
): GenerationPlan<T>Freezes original production ordinals and every rewritten terminal's complete candidate.
Parameters
$constraints | GenerationPlan<T> | |
$budget | int | |
$productionChoice | Closure(int): ?int | |
$lexicalChoice | Closure(int): ?int |
Returns
Test cases 8
PlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncovers and callsPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscovers and callsPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcovers and callsPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecovers and callsPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcovers and callsPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecovers and callsPlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcoversPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcovers
Called from 1
Calls 11
- method-call TokenGenerator::generate() line 77
- method-call PlanBuilder::root() line 77
- method-call GenerationPlan::withExpansionBudget() line 77
- static-call ProductionPattern::at() line 80
- method-call LexicalGrammar::resolveSequence() line 83
- function-call
implodeline 88 - function-call
array_mapline 88 - new GenerationPlan line 91
- method-call GenerationPlan::startRule() line 92
- method-call GenerationPlan::requiresNonEmpty() line 98
- method-call GenerationPlan::maxDepth() line 99
Private surface 6§
Implementation details, listed for orientation only.
private CompletionCosts $costsprivate TokenGenerator $tokensprivate Grammar $grammarprivate LexicalGrammar $lexicalprivate ?TokenRewriter $rewriter = nullprivate Closure(string|null): string|null $startSymbol = nullTest cases 15§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 11
PlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncovers and callsPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscovers and callsPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcovers and callsPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecovers and callsPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcovers and callsPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecovers and callsPlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcovers and callsPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcovers and callsPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycovers and callsPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscovers and callsPlanBuilderTest::testRootResolvesOnlyAnExplicitReleaseAliascovers and calls
Other tests reaching this symbol 4
Relations§
Instantiated in 1
Method calls 2
Type declarations 5
- type SqlFaker\Generation\Choice\BytePlanCompiler packages/sql-faker/src/Generation/Choice/BytePlanCompiler.php:21
- type SqlFaker\Generation\SqlGenerator packages/sql-faker/src/Generation/SqlGenerator.php:64
- type SqlFaker\MySqlProvider packages/sql-faker/src/MySqlProvider.php:83
- type SqlFaker\PostgreSqlProvider packages/sql-faker/src/PostgreSqlProvider.php:69
- type SqlFaker\SqliteProvider packages/sql-faker/src/SqliteProvider.php:69