Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
iquito opened this issue Dec 31, 2021 · 5 comments
Open

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

iquito opened this issue Dec 31, 2021 · 5 comments

Comments

@iquito
Copy link

iquito commented Dec 31, 2021

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
Copy link
Author

iquito commented Sep 27, 2022

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)

@seferov
Copy link
Member

seferov commented Sep 28, 2022

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

@iquito
Copy link
Author

iquito commented Sep 28, 2022

@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.

@seferov
Copy link
Member

seferov commented Sep 28, 2022

@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')
        ;
    }

@iquito
Copy link
Author

iquito commented Sep 28, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants