public static function debug($content)
    {
        $root = is_object($content) ? $content : static::parse($content, ['lines' => true]);
        $result = '';

        $abbr = [
            'file'      => 'file',
            'open'      => 'open',
            'close'     => 'close',
            'declare'   => 'declare',
            'namespace' => 'namespace',
            'use'       => 'use',
            'class'     => 'class',
            'interface' => 'interface',
            'trait'     => 'trait',
            'function'  => 'function',
            'signature' => 'signature',
            'attribute' => 'a',
            'code'      => 'c',
            'comment'   => 'd',
            'plain'     => 'p',
            'string'    => 's'
        ];

        foreach ($root->lines['content'] as $num => $content) {
            $start = $stop = $line = $num + 1;
            $result .= '#' . str_pad($line, 6, ' ');
            $types = [];
            foreach ($content['nodes'] as $node) {
                $types[] = $abbr[$node->type];
                $stop = max($stop, $node->lines['stop'] + 1);
            }
            $result .= $content['coverable'] ? '*' : ' ';
            $result .= '[' . str_pad(join(',', $types), 19, ' ', STR_PAD_BOTH) . "]";
            $result .= ' ' . str_pad("#{$start} > #{$stop}", 16, ' ') . "|";
            $result .= $content['body'] . "\n";
        }
        return $result;
    }