From 86d0fd833ac18914b89ffe3d447ad1f9e6bb607a Mon Sep 17 00:00:00 2001 From: Jean-Luc Herren Date: Mon, 4 Oct 2021 11:58:58 +0200 Subject: [PATCH] Mark file resource functions as having side effects Fixes phpstan/phpstan#5461 --- resources/functionMetadata.php | 19 ++++++ .../Analyser/NodeScopeResolverTest.php | 2 + .../Analyser/data/file-resource-functions.php | 58 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 tests/PHPStan/Analyser/data/file-resource-functions.php diff --git a/resources/functionMetadata.php b/resources/functionMetadata.php index f136e361e48..b452be2bd18 100644 --- a/resources/functionMetadata.php +++ b/resources/functionMetadata.php @@ -816,7 +816,14 @@ 'explode' => ['hasSideEffects' => false], 'expm1' => ['hasSideEffects' => false], 'extension_loaded' => ['hasSideEffects' => false], + 'fclose' => ['hasSideEffects' => true], 'fdiv' => ['hasSideEffects' => false], + 'feof' => ['hasSideEffects' => true], + 'fflush' => ['hasSideEffects' => true], + 'fgetc' => ['hasSideEffects' => true], + 'fgetcsv' => ['hasSideEffects' => true], + 'fgets' => ['hasSideEffects' => true], + 'fgetss' => ['hasSideEffects' => true], 'file_exists' => ['hasSideEffects' => false], 'fileatime' => ['hasSideEffects' => false], 'filectime' => ['hasSideEffects' => false], @@ -837,13 +844,25 @@ 'finfo::buffer' => ['hasSideEffects' => false], 'finfo::file' => ['hasSideEffects' => false], 'floatval' => ['hasSideEffects' => false], + 'flock' => ['hasSideEffects' => true], 'floor' => ['hasSideEffects' => false], 'fmod' => ['hasSideEffects' => false], + 'fopen' => ['hasSideEffects' => true], + 'fpassthru' => ['hasSideEffects' => true], + 'fputcsv' => ['hasSideEffects' => true], + 'fputs' => ['hasSideEffects' => true], + 'fread' => ['hasSideEffects' => true], + 'fscanf' => ['hasSideEffects' => true], + 'fseek' => ['hasSideEffects' => true], + 'fstat' => ['hasSideEffects' => true], + 'ftell' => ['hasSideEffects' => true], 'ftok' => ['hasSideEffects' => false], + 'ftruncate' => ['hasSideEffects' => true], 'func_get_arg' => ['hasSideEffects' => false], 'func_get_args' => ['hasSideEffects' => false], 'func_num_args' => ['hasSideEffects' => false], 'function_exists' => ['hasSideEffects' => false], + 'fwrite' => ['hasSideEffects' => true], 'gc_enabled' => ['hasSideEffects' => false], 'gc_status' => ['hasSideEffects' => false], 'gd_info' => ['hasSideEffects' => false], diff --git a/tests/PHPStan/Analyser/NodeScopeResolverTest.php b/tests/PHPStan/Analyser/NodeScopeResolverTest.php index b095b3db2a2..20ba05e9b8a 100644 --- a/tests/PHPStan/Analyser/NodeScopeResolverTest.php +++ b/tests/PHPStan/Analyser/NodeScopeResolverTest.php @@ -514,6 +514,8 @@ public function dataFileAsserts(): iterable yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-4743.php'); yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-5017.php'); yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-2760.php'); + + yield from $this->gatherAssertTypes(__DIR__ . '/data/file-resource-functions.php'); } /** diff --git a/tests/PHPStan/Analyser/data/file-resource-functions.php b/tests/PHPStan/Analyser/data/file-resource-functions.php new file mode 100644 index 00000000000..534788f2de6 --- /dev/null +++ b/tests/PHPStan/Analyser/data/file-resource-functions.php @@ -0,0 +1,58 @@ +