Skip to content

Intersection type support #59

@lukinovec

Description

@lukinovec

Hey! We're trying to run Doctum in the https://github.com/archtechx/tenancy repository (using php doctum.phar update doctum.php --output-format=github --force --ignore-parse-errors --no-ansi --no-progress -v), but the run keeps failing until we delete intersection types from our code. Could this be because Doctum\Parser\NodeVisitor's typeToString() method doesn't handle intersection types? I think those could be handled similarly to union types – using '&' instead of '|'.

Our config file:

use Doctum\Doctum;
use Symfony\Component\Finder\Finder;

$iterator = Finder::create()
    ->files()
    ->name('*.php')
    ->in('src/');

return new Doctum($iterator, [
    'title' => 'Tenancy for Laravel API Documentation',
    'base_url' => 'https://api.tenancyforlaravel.com/',
    'favicon' => 'https://tenancyforlaravel.com/favicon.ico',
]);

The stack trace:

Fatal error: Uncaught Error: Call to undefined method PhpParser\Node\IntersectionType::__toString() in phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/NodeVisitor.php:196
Stack trace:
#0 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/NodeVisitor.php(329): Doctum\Parser\NodeVisitor->typeToString(Object(PhpParser\Node\IntersectionType))
#1 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/NodeVisitor.php(73): Doctum\Parser\NodeVisitor->addMethod(Object(PhpParser\Node\Stmt\ClassMethod))
#2 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200): Doctum\Parser\NodeVisitor->enterNode(Object(PhpParser\Node\Stmt\ClassMethod))
#3 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray(Array)
#4 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Class_))
#5 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(114): PhpParser\NodeTraverser->traverseArray(Array)
#6 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(223): PhpParser\NodeTraverser->traverseNode(Object(PhpParser\Node\Stmt\Namespace_))
#7 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(91): PhpParser\NodeTraverser->traverseArray(Array)
#8 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/CodeParser.php(48): PhpParser\NodeTraverser->traverse(Array)
#9 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/Parser.php(66): Doctum\Parser\CodeParser->parse('<?php\n\ndeclare(...')
#10 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Project.php(725): Doctum\Parser\Parser->parse(Object(Doctum\Project), Array)
#11 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Project.php(137): Doctum\Project->parseVersion(Object(Doctum\Version\Version), NULL, Array, false)
#12 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Console/Command/Command.php(193): Doctum\Project->update(Array, false)
#13 phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Console/Command/UpdateCommand.php(58): Doctum\Console\Command\Command->update(Object(Doctum\Project))
#14 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/symfony/console/Command/Command.php(298): Doctum\Console\Command\UpdateCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(Doctum\Console\Command\UpdateCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 phar:///Users/lukas/Projects/tenancy/doctum.phar/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 phar:///Users/lukas/Projects/tenancy/doctum.phar/bin/doctum-binary.php(26): Symfony\Component\Console\Application->run()
#19 /Users/lukas/Projects/tenancy/doctum.phar(16): include('phar:///Users/l...')
#20 {main}
  thrown in phar:///Users/lukas/Projects/tenancy/doctum.phar/src/Parser/NodeVisitor.php on line 196

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions