psalm
psalm copied to clipboard
literal-string is non-empty-string seems to be considered as always true
Similar to https://github.com/vimeo/psalm/issues/10911
The reproducer can be https://psalm.dev/r/e9071d2408
I found these snippets:
https://psalm.dev/r/e9071d2408
<?php
/**
* @return (
* $s is non-empty-string ? float : int
* )
*/
function foo(string $s) {
return 1.0; // Obviously wrong
}
/** @var literal-string $b */
$b
/** @psalm-trace $a */
$a = foo($b);
/** @var string $b */
$b
/** @psalm-trace $a */
$a = foo($b);
Psalm output (using commit 08afc45):
ERROR: ParseError - 15:1 - Syntax error, unexpected T_VARIABLE on line 15
ERROR: ParseError - 20:1 - Syntax error, unexpected T_VARIABLE on line 20
INFO: UnusedParam - 8:21 - Param s is never referenced in this method
INFO: Trace - 15:1 - $a: float
INFO: Trace - 20:1 - $a: float|int
INFO: UnusedVariable - 15:1 - $a is never referenced or the value is not used
INFO: UnusedVariable - 20:1 - $a is never referenced or the value is not used