psalm icon indicating copy to clipboard operation
psalm copied to clipboard

literal-string is non-empty-string seems to be considered as always true

Open VincentLanglet opened this issue 2 months ago • 1 comments

Similar to https://github.com/vimeo/psalm/issues/10911

The reproducer can be https://psalm.dev/r/e9071d2408

VincentLanglet avatar Apr 28 '24 22:04 VincentLanglet

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

psalm-github-bot[bot] avatar Apr 28 '24 22:04 psalm-github-bot[bot]