psalm-plugin-symfony icon indicating copy to clipboard operation
psalm-plugin-symfony copied to clipboard

Psalm Plugin crashes with "Expected an integer. Got: boolean"

Open iquito opened this issue 3 years ago • 5 comments

Still the same issue as in #188 , tested with newest version (3.1.0), has existed since 2.3.1 (was never fixed):

Uncaught Exception: Webmozart\Assert\InvalidArgumentException Expected an integer. Got: boolean
Emitted in /vendor-bin/psalm/vendor/webmozart/assert/src/Assert.php:2060
Stack trace in the forked worker:
#0 /vendor-bin/psalm/vendor/webmozart/assert/src/Assert.php(85): Webmozart\Assert\Assert::reportInvalidArgument('Expected an int...')
#1 /vendor-bin/psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(266): Webmozart\Assert\Assert::integer(false)
#2 /vendor-bin/psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(245): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::normalizeParams(Array, Array)
#3 /vendor-bin/psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(175): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::normalizeOptionParams(Array)
#4 /vendor-bin/psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(71): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::analyseOption(Array, Object(Psalm\Internal\Analyzer\StatementsAnalyzer))
#5 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/EventDispatcher.php(312): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::afterMethodCallAnalysis(Object(Psalm\Plugin\EventHandler\Event\AfterMethodCallAnalysisEvent))
#6 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/ExistingAtomicMethodCallAnalyzer.php(457): Psalm\Internal\EventDispatcher->dispatchAfterMethodCallAnalysis(Object(Psalm\Plugin\EventHandler\Event\AfterMethodCallAnalysisEvent))
#7 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalyzer.php(429): Psalm\Internal\Analyzer\Statements\Expression\Call\Method\ExistingAtomicMethodCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(PhpParser\Node\Identifier), Array, Object(Psalm\Codebase), Object(Psalm\Context), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject), NULL, Object(Psalm\Internal\MethodIdentifier), Object(Psalm\Internal\Analyzer\Statements\Expression\Call\Method\AtomicMethodCallAnalysisResult))
#8 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.php(190): Psalm\Internal\Analyzer\Statements\Expression\Call\Method\AtomicMethodCallAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Codebase), Object(Psalm\Context), Object(Psalm\Type\Union), Object(Psalm\Type\Atomic\TNamedObject), Object(Psalm\Type\Atomic\TNamedObject), false, NULL, Object(Psalm\Internal\Analyzer\Statements\Expression\Call\Method\AtomicMethodCallAnalysisResult))
#9 /vendor-bin/psalm/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))
#10 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(78): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Context), false, Object(Psalm\Context), true)
#11 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(575): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Expr\MethodCall), Object(Psalm\Context), false, Object(Psalm\Context), true)
#12 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(206): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement(Object(Psalm\Internal\Analyzer\StatementsAnalyzer), Object(PhpParser\Node\Stmt\Expression), Object(Psalm\Context), Object(Psalm\Context))
#13 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.php(463): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze(Array, Object(Psalm\Context), Object(Psalm\Context), true)
#14 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(1788): Psalm\Internal\Analyzer\FunctionLikeAnalyzer->analyze(Object(Psalm\Context), Object(Psalm\Internal\Provider\NodeDataProvider), Object(Psalm\Context))
#15 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(425): Psalm\Internal\Analyzer\ClassAnalyzer->analyzeClassMethod(Object(PhpParser\Node\Stmt\ClassMethod), Object(Psalm\Storage\ClassLikeStorage), Object(Psalm\Internal\Analyzer\ClassAnalyzer), Object(Psalm\Context), Object(Psalm\Context))
#16 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(229): Psalm\Internal\Analyzer\ClassAnalyzer->analyze(Object(Psalm\Context), Object(Psalm\Context))
#17 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(362): Psalm\Internal\Analyzer\FileAnalyzer->analyze()
#18 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(211): Psalm\Internal\Codebase\Analyzer->Psalm\Internal\Codebase\{closure}(9, '/home/andreas/X...')
#19 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(428): Psalm\Internal\Fork\Pool->__construct(Object(Psalm\Config), Array, Object(Closure), Object(Closure), Object(Closure), Object(Closure))
#20 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(291): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7)
#21 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(685): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7, false, true)
#22 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(372): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/home/andreas/X...', false)
#23 /vendor-bin/psalm/vendor/vimeo/psalm/psalm(4): Psalm\Internal\Cli\Psalm::run(Array)
#24 /vendor-bin/psalm/vendor/bin/psalm(97): include('/home/andreas/X...')
#25 {main} in /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:402
Stack trace:
#0 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(436): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(503): Psalm\Internal\Fork\Pool->wait()
#2 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(291): Psalm\Internal\Codebase\Analyzer->doAnalysis(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7)
#3 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(685): Psalm\Internal\Codebase\Analyzer->analyzeFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), 7, false, true)
#4 /vendor-bin/psalm/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(372): Psalm\Internal\Analyzer\ProjectAnalyzer->check('/home/andreas/X...', false)
#5 /vendor-bin/psalm/vendor/vimeo/psalm/psalm(4): Psalm\Internal\Cli\Psalm::run(Array)
#6 /vendor-bin/psalm/vendor/bin/psalm(97): include('/home/andreas/X...')
#7 {main}
(Psalm 4.16.1@aa7e400908833b10c0333861f86cd48c510b60eb crashed due to an uncaught Throwable)

iquito avatar Dec 31 '21 10:12 iquito

Still occurs in v3.1.9:

Uncaught Exception: Webmozart\Assert\InvalidArgumentException Expected an integer. Got: boolean
Emitted in /psalm/vendor/webmozart/assert/src/Assert.php:2074
Stack trace in the forked worker:
#0 /psalm/vendor/webmozart/assert/src/Assert.php(85): Webmozart\Assert\Assert::reportInvalidArgument()
#1 /psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(266): Webmozart\Assert\Assert::integer()
#2 /psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(245): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::normalizeParams()
#3 /psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(175): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::normalizeOptionParams()
#4 /psalm/vendor/psalm/plugin-symfony/src/Handler/ConsoleHandler.php(71): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::analyseOption()
#5 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/EventDispatcher.php(312): Psalm\SymfonyPsalmPlugin\Handler\ConsoleHandler::afterMethodCallAnalysis()
#6 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/ExistingAtomicMethodCallAnalyzer.php(495): Psalm\Internal\EventDispatcher->dispatchAfterMethodCallAnalysis()
#7 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/Method/AtomicMethodCallAnalyzer.php(467): Psalm\Internal\Analyzer\Statements\Expression\Call\Method\ExistingAtomicMethodCallAnalyzer::analyze()
#8 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/Expression/Call/MethodCallAnalyzer.php(185): Psalm\Internal\Analyzer\Statements\Expression\Call\Method\AtomicMethodCallAnalyzer::analyze()
#9 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(186): Psalm\Internal\Analyzer\Statements\Expression\Call\MethodCallAnalyzer::analyze()
#10 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/Statements/ExpressionAnalyzer.php(78): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::handleExpression()
#11 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(572): Psalm\Internal\Analyzer\Statements\ExpressionAnalyzer::analyze()
#12 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/StatementsAnalyzer.php(207): Psalm\Internal\Analyzer\StatementsAnalyzer::analyzeStatement()
#13 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FunctionLikeAnalyzer.php(476): Psalm\Internal\Analyzer\StatementsAnalyzer->analyze()
#14 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(1788): Psalm\Internal\Analyzer\FunctionLikeAnalyzer->analyze()
#15 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ClassAnalyzer.php(425): Psalm\Internal\Analyzer\ClassAnalyzer->analyzeClassMethod()
#16 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/FileAnalyzer.php(229): Psalm\Internal\Analyzer\ClassAnalyzer->analyze()
#17 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(362): Psalm\Internal\Analyzer\FileAnalyzer->analyze()
#18 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(211): Psalm\Internal\Codebase\Analyzer->Psalm\Internal\Codebase\{closure}()
#19 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(428): Psalm\Internal\Fork\Pool->__construct()
#20 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(291): Psalm\Internal\Codebase\Analyzer->doAnalysis()
#21 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(686): Psalm\Internal\Codebase\Analyzer->analyzeFiles()
#22 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(373): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#23 /psalm/vendor/vimeo/psalm/psalm(7): Psalm\Internal\Cli\Psalm::run()
#24 /psalm/vendor/bin/psalm(120): include('...')
#25 {main} in /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php:402
Stack trace:
#0 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Fork/Pool.php(436): Psalm\Internal\Fork\Pool->readResultsFromChildren()
#1 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(503): Psalm\Internal\Fork\Pool->wait()
#2 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Codebase/Analyzer.php(291): Psalm\Internal\Codebase\Analyzer->doAnalysis()
#3 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Analyzer/ProjectAnalyzer.php(686): Psalm\Internal\Codebase\Analyzer->analyzeFiles()
#4 /psalm/vendor/vimeo/psalm/src/Psalm/Internal/Cli/Psalm.php(373): Psalm\Internal\Analyzer\ProjectAnalyzer->check()
#5 /psalm/vendor/vimeo/psalm/psalm(7): Psalm\Internal\Cli\Psalm::run()
#6 /psalm/vendor/bin/psalm(120): include('...')
#7 {main}
(Psalm 4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff crashed due to an uncaught Throwable)

iquito avatar Sep 27 '22 08:09 iquito

@iquito thanks for the report. Could you please share a console command which causes the crash?

seferov avatar Sep 28 '22 09:09 seferov

@seferov Currently the only thing I get is the stack trace I posted, I have not found a hint in there what part of the codebase Psalm/Psalm-Plugin was analyzing at the time. If you can give me any pointers on how to make Psalm output any information that might be helpful, I would gladly try it out.

iquito avatar Sep 28 '22 09:09 iquito

@seferov Currently the only thing I get is the stack trace I posted, I have not found a hint in there what part of the codebase Psalm/Psalm-Plugin was analyzing at the time. If you can give me any pointers on how to make Psalm output any information that might be helpful, I would gladly try it out.

It happens on one or more of Console commands. Common usages are covered by tests and working.

From the trace, I can tell it happens from a configuration part of some command.

    protected function configure(): void
    {
        $this
            // ...
            ->addArgument('password', $this->requirePassword ? InputArgument::REQUIRED : InputArgument::OPTIONAL, 'User password')
        ;
    }

seferov avatar Sep 28 '22 10:09 seferov

But is there a way to identify which file Psalm is looking at when the error occurs? I have 57 commands in this project, so it would be important to narrow it down a bit.

iquito avatar Sep 28 '22 10:09 iquito