From bcbfbed07224bdcf22f5e9f8738a021d892f9f5a Mon Sep 17 00:00:00 2001 From: Tomasz Kusy Date: Fri, 4 Feb 2022 19:39:39 +0100 Subject: [PATCH 1/4] Resolve __DIR__ / __FILE__ when const/variable is used for include --- .../Statements/Expression/MagicConstAnalyzer.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php index 4432087d9b8..1849735a4a6 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php @@ -84,10 +84,16 @@ public static function analyze( } else { $statements_analyzer->node_data->setType($stmt, new Union([new TCallableString])); } - } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\File - || $stmt instanceof PhpParser\Node\Scalar\MagicConst\Dir - ) { - $statements_analyzer->node_data->setType($stmt, new Union([new TNonEmptyString()])); + } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\Dir) { + $statements_analyzer->node_data->setType( + $stmt, + Type::getString(dirname($statements_analyzer->getSource()->getFilePath())) + ); + } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\File) { + $statements_analyzer->node_data->setType( + $stmt, + Type::getString($statements_analyzer->getSource()->getFilePath()) + ); } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\Trait_) { if ($statements_analyzer->getSource() instanceof TraitAnalyzer) { $statements_analyzer->node_data->setType($stmt, new Union([new TNonEmptyString()])); From b73f2c96d822e066650edc0a21f58d717862ae6f Mon Sep 17 00:00:00 2001 From: Tomasz Kusy Date: Fri, 4 Feb 2022 19:43:55 +0100 Subject: [PATCH 2/4] Resolve __DIR__ / __FILE__ when const/variable is used for include CS fix --- .../Analyzer/Statements/Expression/MagicConstAnalyzer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php index 1849735a4a6..ccaebe7ceda 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php @@ -87,7 +87,7 @@ public static function analyze( } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\Dir) { $statements_analyzer->node_data->setType( $stmt, - Type::getString(dirname($statements_analyzer->getSource()->getFilePath())) + Type::getString(\dirname($statements_analyzer->getSource()->getFilePath())) ); } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\File) { $statements_analyzer->node_data->setType( From 8da45aa7d8287baa23b29c2589539109b100ed14 Mon Sep 17 00:00:00 2001 From: Tomasz Kusy Date: Fri, 4 Feb 2022 20:26:06 +0100 Subject: [PATCH 3/4] Resolve __DIR__ / __FILE__ when const/variable is used for include CS fix fix --- .../Analyzer/Statements/Expression/MagicConstAnalyzer.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php index ccaebe7ceda..fc8ce4eba0e 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php @@ -15,6 +15,7 @@ use Psalm\Type\Atomic\TCallableString; use Psalm\Type\Atomic\TNonEmptyString; use Psalm\Type\Union; +use function dirname; class MagicConstAnalyzer { @@ -87,7 +88,7 @@ public static function analyze( } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\Dir) { $statements_analyzer->node_data->setType( $stmt, - Type::getString(\dirname($statements_analyzer->getSource()->getFilePath())) + Type::getString(dirname($statements_analyzer->getSource()->getFilePath())) ); } elseif ($stmt instanceof PhpParser\Node\Scalar\MagicConst\File) { $statements_analyzer->node_data->setType( From 124aa22fe9bff661a284f03a7acb1667e25ccc5b Mon Sep 17 00:00:00 2001 From: Tomasz Kusy Date: Fri, 4 Feb 2022 20:27:45 +0100 Subject: [PATCH 4/4] Resolve __DIR__ / __FILE__ when const/variable is used for include CS fix fix fix :) --- .../Analyzer/Statements/Expression/MagicConstAnalyzer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php index fc8ce4eba0e..481a5afa0d1 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/MagicConstAnalyzer.php @@ -15,6 +15,7 @@ use Psalm\Type\Atomic\TCallableString; use Psalm\Type\Atomic\TNonEmptyString; use Psalm\Type\Union; + use function dirname; class MagicConstAnalyzer