Skip to content

Commit 541892e

Browse files
committed
Improve logic
1 parent efa31ca commit 541892e

File tree

6 files changed

+113
-37
lines changed

6 files changed

+113
-37
lines changed

psalm-baseline.xml

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="dev-master@cf404b51daf81d79198a029f7b2c7f64d28ae68e">
2+
<files psalm-version="6.x-dev@bbd217fc98c0daa0a13aea2a7f119d03ba3fc9a0">
33
<file src="examples/TemplateChecker.php">
44
<PossiblyUndefinedIntArrayOffset>
55
<code><![CDATA[$comment_block->tags['variablesfrom'][0]]]></code>
@@ -131,6 +131,11 @@
131131
<code><![CDATA[glob($parts[0], GLOB_ONLYDIR | GLOB_NOSORT)]]></code>
132132
</RiskyTruthyFalsyComparison>
133133
</file>
134+
<file src="src/Psalm/Config/ProjectFileFilter.php">
135+
<MutableDependency>
136+
<code><![CDATA[#[Override]]]></code>
137+
</MutableDependency>
138+
</file>
134139
<file src="src/Psalm/Context.php">
135140
<RiskyTruthyFalsyComparison>
136141
<code><![CDATA[strpos($key, '()')]]></code>
@@ -216,6 +221,9 @@
216221
</RiskyTruthyFalsyComparison>
217222
</file>
218223
<file src="src/Psalm/Internal/Analyzer/ClassLikeAnalyzer.php">
224+
<MutableDependency>
225+
<code><![CDATA[#[Override]]]></code>
226+
</MutableDependency>
219227
<PossiblyUndefinedIntArrayOffset>
220228
<code><![CDATA[$property_name]]></code>
221229
</PossiblyUndefinedIntArrayOffset>
@@ -1550,6 +1558,12 @@
15501558
</RiskyTruthyFalsyComparison>
15511559
</file>
15521560
<file src="src/Psalm/Internal/Codebase/CombinedFlowGraph.php">
1561+
<MutableDependency>
1562+
<code><![CDATA[#[Override]]]></code>
1563+
<code><![CDATA[#[Override]]]></code>
1564+
<code><![CDATA[#[Override]]]></code>
1565+
<code><![CDATA[DataFlowGraph]]></code>
1566+
</MutableDependency>
15531567
<PossiblyUnusedMethod>
15541568
<code><![CDATA[addSink]]></code>
15551569
</PossiblyUnusedMethod>
@@ -1651,13 +1665,23 @@
16511665
</RiskyTruthyFalsyComparison>
16521666
</file>
16531667
<file src="src/Psalm/Internal/Codebase/TaintFlowGraph.php">
1668+
<MutableDependency>
1669+
<code><![CDATA[#[Override]]]></code>
1670+
<code><![CDATA[DataFlowGraph]]></code>
1671+
</MutableDependency>
16541672
<RiskyTruthyFalsyComparison>
16551673
<code><![CDATA[end($path_types)]]></code>
16561674
</RiskyTruthyFalsyComparison>
16571675
<UnnecessaryVarAnnotation>
16581676
<code><![CDATA[DataFlowNode]]></code>
16591677
</UnnecessaryVarAnnotation>
16601678
</file>
1679+
<file src="src/Psalm/Internal/Codebase/VariableUseGraph.php">
1680+
<MutableDependency>
1681+
<code><![CDATA[#[Override]]]></code>
1682+
<code><![CDATA[DataFlowGraph]]></code>
1683+
</MutableDependency>
1684+
</file>
16611685
<file src="src/Psalm/Internal/Composer.php">
16621686
<RiskyTruthyFalsyComparison>
16631687
<code><![CDATA[getenv('COMPOSER')]]></code>
@@ -2099,6 +2123,11 @@
20992123
<code><![CDATA[new Cache($config, 'classlike_cache', $dependencies, $persistent)]]></code>
21002124
</InvalidPropertyAssignmentValue>
21012125
</file>
2126+
<file src="src/Psalm/Internal/Provider/FakeFileProvider.php">
2127+
<MutableDependency>
2128+
<code><![CDATA[#[Override]]]></code>
2129+
</MutableDependency>
2130+
</file>
21022131
<file src="src/Psalm/Internal/Provider/FileReferenceCacheProvider.php">
21032132
<InvalidPropertyAssignmentValue>
21042133
<code><![CDATA[new Cache($config, 'file_reference', [$composerLock], $persistent)]]></code>
@@ -2505,14 +2534,42 @@
25052534
<code><![CDATA[strpos($string_type_token[0], '$')]]></code>
25062535
</RiskyTruthyFalsyComparison>
25072536
</file>
2537+
<file src="src/Psalm/Internal/TypeVisitor/CanContainObjectTypeVisitor.php">
2538+
<MutableDependency>
2539+
<code><![CDATA[#[Override]]]></code>
2540+
</MutableDependency>
2541+
</file>
2542+
<file src="src/Psalm/Internal/TypeVisitor/ContainsLiteralVisitor.php">
2543+
<MutableDependency>
2544+
<code><![CDATA[#[Override]]]></code>
2545+
</MutableDependency>
2546+
</file>
2547+
<file src="src/Psalm/Internal/TypeVisitor/ContainsStaticVisitor.php">
2548+
<MutableDependency>
2549+
<code><![CDATA[#[Override]]]></code>
2550+
</MutableDependency>
2551+
</file>
2552+
<file src="src/Psalm/Internal/TypeVisitor/TemplateTypeCollector.php">
2553+
<MutableDependency>
2554+
<code><![CDATA[#[Override]]]></code>
2555+
</MutableDependency>
2556+
</file>
25082557
<file src="src/Psalm/Internal/TypeVisitor/TypeChecker.php">
2558+
<MutableDependency>
2559+
<code><![CDATA[#[Override]]]></code>
2560+
</MutableDependency>
25092561
<RiskyTruthyFalsyComparison>
25102562
<code><![CDATA[!$fq_classlike_name]]></code>
25112563
<code><![CDATA[$class_storage->template_types]]></code>
25122564
<code><![CDATA[$class_storage->template_types]]></code>
25132565
<code><![CDATA[$this->calling_method_id]]></code>
25142566
</RiskyTruthyFalsyComparison>
25152567
</file>
2568+
<file src="src/Psalm/Internal/TypeVisitor/TypeScanner.php">
2569+
<MutableDependency>
2570+
<code><![CDATA[#[Override]]]></code>
2571+
</MutableDependency>
2572+
</file>
25162573
<file src="src/Psalm/Issue/ArgumentIssue.php">
25172574
<RiskyTruthyFalsyComparison>
25182575
<code><![CDATA[$function_id]]></code>
@@ -2770,6 +2827,12 @@
27702827
<code><![CDATA[ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format')]]></code>
27712828
</RiskyTruthyFalsyComparison>
27722829
</file>
2830+
<file src="src/Psalm/Report/CompactReport.php">
2831+
<MutableDependency>
2832+
<code><![CDATA[#[Override]]]></code>
2833+
<code><![CDATA[Report]]></code>
2834+
</MutableDependency>
2835+
</file>
27732836
<file src="src/Psalm/Report/ConsoleReport.php">
27742837
<PossiblyInvalidArgument>
27752838
<code><![CDATA[$this->link_format]]></code>
@@ -2789,11 +2852,29 @@
27892852
<code><![CDATA[ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format')]]></code>
27902853
</RiskyTruthyFalsyComparison>
27912854
</file>
2855+
<file src="src/Psalm/Report/JunitReport.php">
2856+
<MutableDependency>
2857+
<code><![CDATA[#[Override]]]></code>
2858+
<code><![CDATA[Report]]></code>
2859+
</MutableDependency>
2860+
</file>
27922861
<file src="src/Psalm/Report/PhpStormReport.php">
27932862
<RiskyTruthyFalsyComparison>
27942863
<code><![CDATA[$issue_data->taint_trace]]></code>
27952864
</RiskyTruthyFalsyComparison>
27962865
</file>
2866+
<file src="src/Psalm/Report/SarifReport.php">
2867+
<MutableDependency>
2868+
<code><![CDATA[#[Override]]]></code>
2869+
<code><![CDATA[Report]]></code>
2870+
</MutableDependency>
2871+
</file>
2872+
<file src="src/Psalm/Report/XmlReport.php">
2873+
<MutableDependency>
2874+
<code><![CDATA[#[Override]]]></code>
2875+
<code><![CDATA[Report]]></code>
2876+
</MutableDependency>
2877+
</file>
27972878
<file src="src/Psalm/StatementsSource.php">
27982879
<MissingInterfaceImmutableAnnotation>
27992880
<code><![CDATA[StatementsSource]]></code>
@@ -3473,6 +3554,10 @@
34733554
<code><![CDATA[#[Override]]]></code>
34743555
<code><![CDATA[public function __construct()]]></code>
34753556
</MethodSignatureMismatch>
3557+
<MutableDependency>
3558+
<code><![CDATA[#[Override]]]></code>
3559+
<code><![CDATA[public function __construct()]]></code>
3560+
</MutableDependency>
34763561
</file>
34773562
<file src="tests/TypeParseTest.php">
34783563
<ImplicitToStringCast>

src/Psalm/Internal/Analyzer/ClassAnalyzer.php

Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2194,27 +2194,20 @@ private function checkImplementedInterfaces(
21942194
);
21952195
}
21962196

2197-
/*
21982197
if ($interface_storage->allowed_mutations
21992198
< $storage->allowed_mutations
22002199
) {
2201-
$project_analyzer = ProjectAnalyzer::getInstance();
2202-
$change = $codebase->alter_code
2203-
&& isset($project_analyzer->getIssuesToFix()['MissingImmutableAnnotation']);
2204-
2205-
ClassLikes::makeImmutable(
2206-
$interface_storage->allowed_mutations,
2207-
$change,
2208-
$storage,
2209-
$class,
2210-
$project_analyzer,
2211-
$fq_interface_name . ' is marked with @'.Mutations::TO_ATTRIBUTE_CLASS[
2200+
IssueBuffer::maybeAdd(
2201+
new MutableDependency(
2202+
$fq_interface_name . ' is marked with @'.Mutations::TO_ATTRIBUTE_CLASS[
22122203
$interface_storage->allowed_mutations
22132204
].', but '
2214-
. $fq_class_name . ' is not,'
2215-
.' run with --alter --issues=MissingImmutableAnnotation to fix this',
2205+
. $fq_class_name . ' is not',
2206+
$code_location,
2207+
),
2208+
$storage->suppressed_issues + $this->getSuppressedIssues(),
22162209
);
2217-
}*/
2210+
}
22182211

22192212
foreach ($interface_storage->methods as $interface_method_name_lc => $interface_method_storage) {
22202213
if ($interface_method_storage->visibility === self::VISIBILITY_PUBLIC) {
@@ -2444,27 +2437,20 @@ private function checkParentClass(
24442437
);
24452438
}
24462439

2447-
/*if ($parent_class_storage->allowed_mutations
2440+
if ($parent_class_storage->allowed_mutations
24482441
< $storage->allowed_mutations
24492442
) {
2450-
$project_analyzer = ProjectAnalyzer::getInstance();
2451-
$change = $codebase->alter_code
2452-
&& isset($project_analyzer->getIssuesToFix()['MissingImmutableAnnotation']);
2453-
2454-
ClassLikes::makeImmutable(
2455-
$parent_class_storage->allowed_mutations,
2456-
$change,
2457-
$storage,
2458-
$class,
2459-
$project_analyzer,
2460-
$parent_fq_class_name . ' is marked with @'.Mutations::TO_ATTRIBUTE_CLASS[
2461-
$parent_class_storage->allowed_mutations
2462-
].', but '
2463-
. $fq_class_name . ' is not, run with --alter --issues=MissingImmutableAnnotation to fix this',
2443+
IssueBuffer::maybeAdd(
2444+
new MutableDependency(
2445+
$parent_fq_class_name . ' is marked with @'.Mutations::TO_ATTRIBUTE_CLASS[
2446+
$parent_class_storage->allowed_mutations
2447+
].', but '
2448+
. $fq_class_name . ' is not, run with --alter --issues=MissingImmutableAnnotation to fix this',
2449+
$code_location,
2450+
),
2451+
$storage->suppressed_issues + $this->getSuppressedIssues(),
24642452
);
2465-
} else
2466-
*/
2467-
if ($parent_class_storage->allowed_mutations
2453+
} elseif ($parent_class_storage->allowed_mutations
24682454
> $storage->allowed_mutations
24692455
) {
24702456
IssueBuffer::maybeAdd(

src/Psalm/Internal/Analyzer/MethodComparator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
use Psalm\Issue\MethodSignatureMustProvideReturnType;
2727
use Psalm\Issue\MismatchingDocblockParamType;
2828
use Psalm\Issue\MismatchingDocblockReturnType;
29-
use Psalm\Issue\MissingAbstractPureAnnotation;
3029
use Psalm\Issue\MoreSpecificImplementedParamType;
30+
use Psalm\Issue\MutableDependency;
3131
use Psalm\Issue\OverriddenMethodAccess;
3232
use Psalm\Issue\ParamNameMismatch;
3333
use Psalm\Issue\TraitMethodSignatureMismatch;
@@ -385,7 +385,7 @@ private static function checkForObviousMethodMismatches(
385385
&& $prevent_method_signature_mismatch
386386
) {
387387
IssueBuffer::maybeAdd(
388-
new MissingAbstractPureAnnotation(
388+
new MutableDependency(
389389
$cased_guide_method_id . ' is marked at least @psalm-external-mutation-free, but '
390390
. $implementer_classlike_storage->name . '::'
391391
. ($guide_method_storage->cased_name ?: '')

src/Psalm/Internal/Codebase/CombinedFlowGraph.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public function addNode(DataFlowNode $node): void
2727
$this->variable_use_graph->addNode($node);
2828
$this->taint_flow_graph->addNode($node);
2929
}
30+
/**
31+
* @psalm-external-mutation-free
32+
*/
3033
#[Override]
3134
public function addPath(
3235
DataFlowNode $from,

src/Psalm/Internal/Codebase/VariableUseGraph.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public function addNode(DataFlowNode $node): void
3232
$this->nodes[$node->id] = $node;
3333
}
3434

35+
/**
36+
* @psalm-external-mutation-free
37+
*/
3538
#[Override]
3639
public function addPath(
3740
DataFlowNode $from,

tests/ImmutableAnnotationTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,6 @@ public function somePure(int $a) : int;
758758
'code' => '<?php
759759
/** @psalm-immutable */
760760
interface SomethingImmutable {
761-
/** @psalm-mutation-free */
762761
public function someInteger() : int;
763762
}
764763

0 commit comments

Comments
 (0)