| 
<?php
 /*
 * This file is part of Chevere.
 *
 * (c) Rodolfo Berrios <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 declare(strict_types=1);
 
 namespace Chevere\VarDump\Outputs;
 
 use Chevere\VarDump\Interfaces\FormatInterface;
 use Chevere\VarDump\Interfaces\OutputInterface;
 use Chevere\VarDump\Interfaces\VarDumperInterface;
 use Chevere\Writer\Interfaces\WriterInterface;
 
 abstract class Output implements OutputInterface
 {
 private WriterInterface $writer;
 
 /**
 * @var array<array<string, mixed>>
 */
 private array $trace;
 
 private string $caller;
 
 final public function setUp(WriterInterface $writer, array $trace): void
 {
 $this->writer = $writer;
 $this->trace = $trace;
 $frame = $this->trace[0] ?? [];
 /** @var string $class */
 $class = $frame['class'] ?? '';
 /** @var string $type */
 $type = $frame['type'] ?? '';
 $this->caller = $class . $type;
 /** @var ?string $function */
 $function = $frame['function'] ?? null;
 if ($function !== null) {
 $this->caller .= $function . '()';
 }
 }
 
 public function writeCallerFile(FormatInterface $format): void
 {
 $highlight = $this->getCallerFile($format);
 $this->writer()->write(
 <<<PLAIN
 
 {$highlight}
 
 PLAIN
 );
 }
 
 final public function trace(): array
 {
 return $this->trace;
 }
 
 final public function caller(): string
 {
 return $this->caller;
 }
 
 protected function getCallerFile(FormatInterface $format): string
 {
 $item = $this->trace[0] ?? [];
 // @codeCoverageIgnoreStart
 if (! isset($item['file'])) {
 return '@';
 }
 // @codeCoverageIgnoreEnd
 $fileLine = $item['file'] // @phpstan-ignore-line
 . ':'
 . $item['line'];
 
 return $format->highlight(
 VarDumperInterface::FILE,
 $fileLine
 );
 }
 
 final protected function writer(): WriterInterface
 {
 return $this->writer;
 }
 }
 
 |