Custom extension
This extension contributes one namespaced statistics provider and no syntax or rendering behavior.
<?php
use Alto\Rst\Extension\AbstractExtension;
use Alto\Rst\Extension\ExtensionStatistics;
use Alto\Rst\Extension\StatisticsProvider;
use Alto\Rst\Node\Document;
use Alto\Rst\Profile\Profile;
use Alto\Rst\Source\Source;
final readonly class AcmeExtension extends AbstractExtension
{
public function name(): string
{
return 'acme';
}
public function statisticsProviders(): array
{
return [new NodeCount()];
}
}
final readonly class NodeCount implements StatisticsProvider
{
public function name(): string
{
return 'nodes';
}
public function collect(
Document $document,
Source $source,
Profile $profile,
): array {
return ['count' => iterator_count($document->descendants())];
}
}
$profile = Profile::sphinx()->withExtension(new AcmeExtension());
$groups = new ExtensionStatistics()->collect(
$parsed->document(),
$source,
$profile,
);Provider names become stable keys inside the extension statistics group. A
provider returns only scalar values or null and receives immutable document,
source, and profile inputs.
Use a different contribution method only when the extension owns that behavior. See Extension points for the complete map.