vimeo / psalm

A static analysis tool for finding errors in PHP applications
https://psalm.dev
MIT License
5.54k stars 660 forks source link

LanguageServer `Uncaught InvalidArgumentException: Could not get file storage` on Windows #3983

Closed ngyuki closed 4 years ago

ngyuki commented 4 years ago

I get the following error in the developer tools when using getpsalm.psalm-vscode-plugin on Windows with VSCode.

Uncaught InvalidArgumentException: Could not get file storage for c:\users\ngyuki\code\src\example.php in C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\Provider\FileStorageProvider.php:49
Stack trace:
#0 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Codebase.php(396): Psalm\Internal\Provider\FileStorageProvider->get('c:\\users\\ngyuki...')
#1 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\LanguageServer\LanguageServer.php(323): Psalm\Codebase->reloadFiles(Object(Psalm\Internal\Analyzer\ProjectAnalyzer), Array)
#2 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\LanguageServer\LanguageServer.php(175): Psalm\Internal\LanguageServer\LanguageServer->doAnalysis()
#3 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\LanguageServer\EmitterTrait.php(80): Psalm\Internal\LanguageServer\LanguageServer->Psalm\Internal\LanguageServer\{closure}()
#4 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\LanguageServer\ProtocolStreamReader.php(67): Psalm\Internal\LanguageServer\ProtocolStreamReader->emit('readMessageGrou...')
#5 [internal function]: Psalm\Internal\LanguageServer\ProtocolStreamReader->Psalm\Internal\LanguageServer\{closure}()
#6 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Coroutine.php(118): Generator->send('{"jsonrpc":"2.0...')
#7 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Internal\Placeholder.php(149): Amp\Coroutine->Amp\{closure}(NULL, '{"jsonrpc":"2.0...')
#8 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Deferred.php(52): class@anonymous->resolve('{"jsonrpc":"2.0...')
#9 C:\Users\ngyuki\code\vendor\amphp\byte-stream\lib\ResourceInputStream.php(109): Amp\Deferred->resolve('{"jsonrpc":"2.0...')
#10 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Loop\Driver.php(119): Amp\ByteStream\ResourceInputStream::Amp\ByteStream\{closure}('h', '{"jsonrpc":"2.0...')
#11 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Loop\Driver.php(72): Amp\Loop\Driver->tick()
#12 C:\Users\ngyuki\code\vendor\amphp\amp\lib\Loop.php(95): Amp\Loop\Driver->run()
#13 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\Psalm\Internal\Analyzer\ProjectAnalyzer.php(446): Amp\Loop::run()
#14 C:\Users\ngyuki\code\vendor\vimeo\psalm\src\psalm-language-server.php(292): Psalm\Internal\Analyzer\ProjectAnalyzer->server('127.0.0.1:62939', false)
#15 C:\Users\ngyuki\code\vendor\vimeo\psalm\psalm-language-server(2): require_once('C:\\Users\\ngyuki...')
#16 {main}(Psalm 3.13.1@afd8874a9e4562eac42a02de90e42e430c3a1db1 crashed due to an uncaught Throwable)

In my opinion, the file path case passed from VSCode is not strict and may not match the following conditions.

https://github.com/vimeo/psalm/blob/3.13.1/src/Psalm/Codebase.php#L392

if (in_array($referenced_file_path, $diff_files, true)) {
    continue;
}

I think this is a problem that can be solved by LanguageServer.

psalm-github-bot[bot] commented 4 years ago

Hey @ngyuki, can you reproduce the issue on https://psalm.dev ?

ngyuki commented 4 years ago

No! This issue is LanguageServer problem.