Closed Ocramius closed 1 year ago
See https://github.com/Ocramius/harvest-to-jira-tempo-time-sync/actions/runs/3584283191/jobs/6030760454
Pertinent to vimeo/psalm:^5
vimeo/psalm:^5
Target PHP version: 8.1 (inferred from composer.json) Extensions enabled: (unsupported extensions: bcmath) Scanning files... Analyzing files... Uncaught Error: Call to private Psalm\Type\Union::__clone() from scope Psl\Psalm\EventHandler\Type\Shape\FunctionReturnTypeProvider in /github/workspace/vendor/php-standard-library/psalm-plugin/src/EventHandler/Type/Shape/FunctionReturnTypeProvider.php:60 Stack trace: #0 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Provider/FunctionReturnTypeProvider.php(152): Psl\Psalm\EventHandler\Type\Shape\FunctionReturnTypeProvider::getFunctionReturnType(Object(Psalm\Plugin\EventHandler\Event\FunctionReturnTypeProviderEvent)) #1 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallReturnTypeFetcher.php(107): Psalm\Internal\Provider\FunctionReturnTypeProvider->getReturnType(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), 'psl\\type\\shape', Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), Object(Psalm\CodeLocation)) #2 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(242): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallReturnTypeFetcher::fetch(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(Psalm\Codebase), Object(PhpParser\Node\Expr\FuncCall), Object(PhpParser\Node\Name), 'psl\\type\\shape', false, true, Object(Psalm\Storage\FunctionStorage), NULL, Object(Psalm\Internal\Type\TemplateResult), Object(Psalm\Context)) #3 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(296): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), Object(Psalm\Internal\Type\TemplateResult)) #4 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, false, NULL, false) #5 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.php(63): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context)) #6 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(186): Psalm\Internal\Analyzer\Statements\Expression\Call\MethodCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Context), true, NULL) #7 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Context), false, NULL, false, NULL, false) #8 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/AssignmentAnalyzer.php(243): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Context)) #9 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(546): Psalm\Internal\Analyzer\Statements\Expression\AssignmentAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Variable), Object(PhpParser\Node\Expr\MethodCall), NULL, Object(Psalm\Context), NULL, Array, NULL) #10 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(178): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyzeAssignment(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Assign), Object(Psalm\Context), true) #11 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Assign), Object(Psalm\Context), false, Object(Psalm\Context), true, NULL, false) #12 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(586): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Assign), Object(Psalm\Context), false, Object(Psalm\Context), true) #13 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(212): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\Expression), Object(Psalm\Context), Object(Psalm\Context)) #14 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.php(482): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze(Array, Object(Psalm\Context), Object(Psalm\Context), true) #15 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClosureAnalyzer.php(207): Psalm\Internal\Analyzer\FunctionLikeAnalyzer->analyze(Object(Psalm\Context), Object(Psalm\Internal\Provider\NodeDataProvider), Object(Psalm\Context), false) #16 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(320): Psalm\Internal\Analyzer\ClosureAnalyzer::analyzeExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Closure), Object(Psalm\Context)) #17 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Closure), Object(Psalm\Context), false, NULL, false, NULL, false) #18 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(620): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\Closure), Object(Psalm\Context)) #19 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/FunctionCallAnalyzer.php(132): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::getAnalyzeNamedExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(PhpParser\Node\Expr\FuncCall), Object(PhpParser\Node\Expr\Closure), Object(Psalm\Context)) #20 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(296): Psalm\Internal\Analyzer\Statements\Expression\Call\FunctionCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), NULL) #21 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(86): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, true, NULL, false) #22 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(586): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\FuncCall), Object(Psalm\Context), false, NULL, true) #23 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(212): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\Expression), Object(Psalm\Context), NULL) #24 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/NamespaceAnalyzer.php(100): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze(Array, Object(Psalm\Context), NULL, true) #25 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(316): Psalm\Internal\Analyzer\NamespaceAnalyzer->collectAnalyzableInformation() #26 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(193): Psalm\Internal\Analyzer\FileAnalyzer->populateCheckers(Array) #27 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(1600): Psalm\Internal\Analyzer\FileAnalyzer->analyze() #28 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(539): Psalm\Internal\Codebase\Analyzer->analysisWorker(0, '/github/workspa...') #29 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(290): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 1) #30 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(708): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 1, false, true) #31 /github/workspace/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(376): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/github/workspa...', true) #32 /github/workspace/vendor/vimeo/psalm/psalm(9): Psalm\Internal\Cli\Psalm::run(Array) #33 /github/workspace/vendor/bin/psalm(120): include('/github/workspa...') #34 {main} (Psalm 5.0.0@4e177bf0c9f03c17d2fbfd83b7cc9c47605274d8 crashed due to an uncaught Throwable)
Haven't dug down to the root cause, but perhaps this clone call is unsafe:
clone
https://github.com/php-standard-library/psalm-plugin/blob/acec87621b2a08b907d40b46c5551215eb4b2154/src/EventHandler/Type/Shape/FunctionReturnTypeProvider.php#L60
Initially erroneously reported @ https://github.com/vimeo/psalm/issues/8793
Fixed it in #9
Released it https://github.com/php-standard-library/psalm-plugin/releases/tag/2.1.0
See https://github.com/Ocramius/harvest-to-jira-tempo-time-sync/actions/runs/3584283191/jobs/6030760454
Pertinent to
vimeo/psalm:^5
Haven't dug down to the root cause, but perhaps this
clone
call is unsafe:https://github.com/php-standard-library/psalm-plugin/blob/acec87621b2a08b907d40b46c5551215eb4b2154/src/EventHandler/Type/Shape/FunctionReturnTypeProvider.php#L60
Initially erroneously reported @ https://github.com/vimeo/psalm/issues/8793