<?php
declare(strict_types=1);
namespace GitList\App\Twig;
use GitList\SCM\Blob;
use GitList\SCM\Tree;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class RepositoryExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('getCommitish', [$this, 'getCommitish']),
new TwigFunction('getParent', [$this, 'getParent']),
new TwigFunction('getBreadcrumbs', [$this, 'getBreadcrumbs']),
];
}
public function getFilters()
{
return [
new TwigFilter('formatFileSize', [$this, 'formatFileSize']),
new TwigFilter('onlyTrees', [$this, 'onlyTrees']),
new TwigFilter('onlyFiles', [$this, 'onlyFiles']),
];
}
public function onlyTrees($items): array
{
return array_filter($items, [$this, 'isTree']);
}
public function onlyFiles($items): array
{
return array_filter($items, fn ($item) => !$this->isTree($item));
}
public function isTree($value): bool
{
if (!$value) {
return false;
}
return $value instanceof Tree;
}
public function getCommitish(string $hash, string $path): string
{