Skip to content

Commit

Permalink
Simplify some methods to keep Psalm happy
Browse files Browse the repository at this point in the history
  • Loading branch information
weirdan committed Jul 30, 2022
1 parent 238b54a commit 7444ea8
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1254,26 +1254,13 @@ private static function analyzeAtomicAssignment(
false
);

if ($codebase->properties_to_rename) {
$declaring_property_id = strtolower($declaring_property_class) . '::$' . $prop_name;

foreach ($codebase->properties_to_rename as $original_property_id => $new_property_name) {
if ($declaring_property_id === $original_property_id) {
$file_manipulations = [
new FileManipulation(
(int)$stmt->name->getAttribute('startFilePos'),
(int)$stmt->name->getAttribute('endFilePos') + 1,
$new_property_name
)
];

FileManipulationBuffer::add(
$statements_analyzer->getFilePath(),
$file_manipulations
);
}
}
}
self::handlePropertyRenames(
$codebase,
$declaring_property_class,
$prop_name,
$stmt,
$statements_analyzer->getFilePath()
);

$declaring_class_storage = $codebase->classlike_storage_provider->get($declaring_property_class);

Expand Down Expand Up @@ -1446,6 +1433,37 @@ private static function analyzeAtomicAssignment(
);
}

private static function handlePropertyRenames(
Codebase $codebase,
string $declaring_property_class,
string $prop_name,
PropertyFetch $stmt,
string $file_path
): void {
if (!$codebase->properties_to_rename) {
return;
}

$declaring_property_id = strtolower($declaring_property_class) . '::$' . $prop_name;

foreach ($codebase->properties_to_rename as $original_property_id => $new_property_name) {
if ($declaring_property_id === $original_property_id) {
$file_manipulations = [
new FileManipulation(
(int)$stmt->name->getAttribute('startFilePos'),
(int)$stmt->name->getAttribute('endFilePos') + 1,
$new_property_name
)
];

FileManipulationBuffer::add(
$file_path,
$file_manipulations
);
}
}
}

public static function getExpandedPropertyType(
Codebase $codebase,
string $fq_class_name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
use Psalm\Node\Expr\VirtualAssign;
use Psalm\Plugin\EventHandler\Event\AddRemoveTaintsEvent;
use Psalm\Storage\Assertion\Falsy;
use Psalm\Storage\FileStorage;
use Psalm\Type;
use Psalm\Type\Atomic\TArray;
use Psalm\Type\Atomic\TFalse;
Expand Down Expand Up @@ -491,71 +492,21 @@ public static function analyze(
);
}

if ($assign_var instanceof PhpParser\Node\Expr\Variable) {
self::analyzeAssignmentToVariable(
$statements_analyzer,
$codebase,
if (self::analyzeAssignment(
$assign_var,
$assign_value,
$assign_value_type,
$var_id,
$context
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\List_
|| $assign_var instanceof PhpParser\Node\Expr\Array_
) {
self::analyzeDestructuringAssignment(
$statements_analyzer,
$codebase,
$assign_var,
$assign_value,
$assign_value_type,
$var_id,
$context,
$doc_comment,
$extended_var_id,
$var_comments,
$removed_taints
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\ArrayDimFetch) {
ArrayAssignmentAnalyzer::analyze(
$statements_analyzer,
$assign_var,
$context,
$assign_value,
$assign_value_type
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\PropertyFetch) {
self::analyzePropertyAssignment(
$statements_analyzer,
$codebase,
$assign_var,
$context,
$assign_value,
$assign_value_type,
$var_id
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\StaticPropertyFetch &&
$assign_var->class instanceof PhpParser\Node\Name
) === false
) {
if (ExpressionAnalyzer::analyze($statements_analyzer, $assign_var, $context) === false) {
return false;
}

if ($context->check_classes) {
if (StaticPropertyAssignmentAnalyzer::analyze(
$statements_analyzer,
$assign_var,
$assign_value,
$assign_value_type,
$context
) === false) {
return false;
}
}

if ($var_id) {
$context->vars_possibly_in_scope[$var_id] = true;
}
return false;
}

if ($var_id && isset($context->vars_in_scope[$var_id])) {
Expand Down Expand Up @@ -652,6 +603,93 @@ public static function analyze(
return $assign_value_type;
}

/**
* @param list<VarDocblockComment> $var_comments
* @param list<string> $removed_taints
* @return null|false
*/
private static function analyzeAssignment(
\PhpParser\Node\Expr $assign_var,
StatementsAnalyzer $statements_analyzer,
Codebase $codebase,
?\PhpParser\Node\Expr $assign_value,
Union $assign_value_type,
?string $var_id,
Context $context,
?\PhpParser\Comment\Doc $doc_comment,
?string $extended_var_id,
array $var_comments,
array $removed_taints
): ?bool {
if ($assign_var instanceof PhpParser\Node\Expr\Variable) {
self::analyzeAssignmentToVariable(
$statements_analyzer,
$codebase,
$assign_var,
$assign_value,
$assign_value_type,
$var_id,
$context
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\List_
|| $assign_var instanceof PhpParser\Node\Expr\Array_
) {
self::analyzeDestructuringAssignment(
$statements_analyzer,
$codebase,
$assign_var,
$assign_value,
$assign_value_type,
$context,
$doc_comment,
$extended_var_id,
$var_comments,
$removed_taints
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\ArrayDimFetch) {
ArrayAssignmentAnalyzer::analyze(
$statements_analyzer,
$assign_var,
$context,
$assign_value,
$assign_value_type
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\PropertyFetch) {
self::analyzePropertyAssignment(
$statements_analyzer,
$codebase,
$assign_var,
$context,
$assign_value,
$assign_value_type,
$var_id
);
} elseif ($assign_var instanceof PhpParser\Node\Expr\StaticPropertyFetch &&
$assign_var->class instanceof PhpParser\Node\Name
) {
if (ExpressionAnalyzer::analyze($statements_analyzer, $assign_var, $context) === false) {
return false;
}

if ($context->check_classes) {
if (StaticPropertyAssignmentAnalyzer::analyze(
$statements_analyzer,
$assign_var,
$assign_value,
$assign_value_type,
$context
) === false) {
return false;
}
}

if ($var_id) {
$context->vars_possibly_in_scope[$var_id] = true;
}
}
return null;
}

public static function assignTypeFromVarDocblock(
StatementsAnalyzer $statements_analyzer,
PhpParser\Node $stmt,
Expand Down

0 comments on commit 7444ea8

Please sign in to comment.