Skip to content

Commit ed1192a

Browse files
authored
Merge pull request #4 from boesing/qa/remove-immutability
2 parents ec21043 + 4fee9b5 commit ed1192a

File tree

6 files changed

+37
-26
lines changed

6 files changed

+37
-26
lines changed

src/ArrayInterface.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,30 @@ interface ArrayInterface extends IteratorAggregate, Countable
1818
{
1919
/**
2020
* @psalm-param TValue $element
21+
* @psalm-mutation-free
2122
*/
2223
public function contains($element): bool;
2324

2425
/**
2526
* @psalm-return TValue|null
27+
* @psalm-mutation-free
2628
*/
2729
public function first();
2830

2931
/**
3032
* @psalm-return TValue|null
33+
* @psalm-mutation-free
3134
*/
3235
public function last();
3336

37+
/**
38+
* @psalm-mutation-free
39+
*/
3440
public function isEmpty(): bool;
3541

3642
/**
3743
* @psalm-return array<TKey,TValue>
44+
* @psalm-mutation-free
3845
*/
3946
public function toNativeArray(): array;
4047
}

src/Array_.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,17 @@ public function getIterator(): Traversable
4646
return new ArrayIterator($this->data);
4747
}
4848

49+
/**
50+
* @psalm-mutation-free
51+
*/
4952
public function contains($element): bool
5053
{
5154
return in_array($element, $this->data, true);
5255
}
5356

57+
/**
58+
* @psalm-mutation-free
59+
*/
5460
public function first()
5561
{
5662
if ($this->data === []) {
@@ -60,6 +66,9 @@ public function first()
6066
return reset($this->data);
6167
}
6268

69+
/**
70+
* @psalm-mutation-free
71+
*/
6372
public function last()
6473
{
6574
if ($this->data === []) {
@@ -69,16 +78,25 @@ public function last()
6978
return end($this->data);
7079
}
7180

81+
/**
82+
* @psalm-mutation-free
83+
*/
7284
public function isEmpty(): bool
7385
{
7486
return $this->count() === 0;
7587
}
7688

89+
/**
90+
* @psalm-mutation-free
91+
*/
7792
public function count(): int
7893
{
7994
return count($this->data);
8095
}
8196

97+
/**
98+
* @psalm-mutation-free
99+
*/
82100
public function toNativeArray(): array
83101
{
84102
return $this->data;

src/Map.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ public function filter(callable $callback): MapInterface
115115
return $instance;
116116
}
117117

118+
/**
119+
* @psalm-mutation-free
120+
*/
118121
public function keys(): OrderedListInterface
119122
{
120123
$keys = array_keys($this->data);
@@ -130,6 +133,9 @@ public function put($key, $value): MapInterface
130133
return $instance;
131134
}
132135

136+
/**
137+
* @psalm-mutation-free
138+
*/
133139
public function get($key)
134140
{
135141
return $this->data[$key] ?? null;

src/MapInterface.php

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,60 +13,52 @@ interface MapInterface extends ArrayInterface
1313
/**
1414
* @psalm-param Closure(TValue $value,string $key):bool $callback
1515
* @psalm-return MapInterface<TValue>
16-
* @psalm-immutable
1716
*/
1817
public function filter(callable $callback): MapInterface;
1918

2019
/**
2120
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $callback
2221
* @psalm-return MapInterface<TValue>
23-
* @psalm-immutable
2422
*/
2523
public function sort(?callable $callback = null): MapInterface;
2624

2725
/**
2826
* @psalm-param list<MapInterface<TValue>> $stack
2927
* @psalm-return MapInterface<TValue>
30-
* @psalm-immutable
3128
*/
3229
public function merge(...$stack): MapInterface;
3330

3431
/**
3532
* @psalm-param MapInterface<TValue> $other
3633
* @psalm-param (Closure(string $a,string $b):int)|null $keyComparator
3734
* @psalm-return MapInterface<TValue>
38-
* @psalm-immutable
3935
*/
4036
public function diffKeys(MapInterface $other, ?callable $keyComparator = null): MapInterface;
4137

4238
/**
4339
* @template TNewValue
4440
* @psalm-param Closure(TValue $a):TNewValue $callback
4541
* @psalm-return MapInterface<TNewValue>
46-
* @psalm-immutable
4742
*/
4843
public function map(callable $callback): MapInterface;
4944

5045
/**
5146
* @psalm-param MapInterface<TValue> $other
5247
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
5348
* @psalm-return MapInterface<TValue>
54-
* @psalm-immutable
5549
*/
5650
public function intersect(MapInterface $other, ?callable $valueComparator = null): MapInterface;
5751

5852
/**
5953
* @psalm-param MapInterface<TValue> $other
6054
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
6155
* @psalm-return MapInterface<TValue>
62-
* @psalm-immutable
6356
*/
6457
public function diff(MapInterface $other, ?callable $valueComparator = null): MapInterface;
6558

6659
/**
6760
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $sorter
6861
* @psalm-return OrderedListInterface<TValue>
69-
* @psalm-immutable
7062
*/
7163
public function toOrderedList(?callable $sorter = null): OrderedListInterface;
7264

@@ -75,51 +67,46 @@ public function toOrderedList(?callable $sorter = null): OrderedListInterface;
7567
*
7668
* @psalm-param TValue $element
7769
* @psalm-return MapInterface<TValue>
78-
* @psalm-immutable
7970
*/
8071
public function removeElement($element): MapInterface;
8172

8273
/**
8374
* @psalm-param string $key
8475
* @psalm-return MapInterface<TValue>
85-
* @psalm-immutable
8676
*/
8777
public function removeElementByKey($key): MapInterface;
8878

8979
/**
9080
* @psalm-return OrderedListInterface<string>
91-
* @psalm-immutable
81+
* @psalm-mutation-free
9282
*/
9383
public function keys(): OrderedListInterface;
9484

9585
/**
9686
* @psalm-param string $key
9787
* @psalm-param TValue $value
9888
* @psalm-return MapInterface<TValue>
99-
* @psalm-immutable
10089
*/
10190
public function put($key, $value): MapInterface;
10291

10392
/**
10493
* @psalm-param string $key
10594
* @psalm-return TValue|null
106-
* @psalm-immutable
95+
* @psalm-mutation-free
10796
*/
10897
public function get($key);
10998

11099
/**
111100
* @psalm-param MapInterface<TValue> $other
112101
* @psalm-return MapInterface<TValue>
113102
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
114-
* @psalm-immutable
115103
*/
116104
public function intersectAssoc(MapInterface $other, ?callable $valueComparator = null): MapInterface;
117105

118106
/**
119107
* @psalm-param MapInterface<TValue> $other
120108
* @psalm-return MapInterface<TValue>
121109
* @psalm-param (Closure(string $a,string $b):int)|null $keyComparator
122-
* @psalm-immutable
123110
*/
124111
public function intersectUsingKeys(MapInterface $other, ?callable $keyComparator = null): MapInterface;
125112

@@ -128,7 +115,6 @@ public function intersectUsingKeys(MapInterface $other, ?callable $keyComparator
128115
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
129116
* @psalm-param (Closure(string $a,string $b):int)|null $keyComparator
130117
* @psalm-return MapInterface<TValue>
131-
* @psalm-immutable
132118
*/
133119
public function intersectUserAssoc(
134120
MapInterface $other,

src/OrderedList.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ public function add($element): OrderedListInterface
6969
return $instance;
7070
}
7171

72+
/**
73+
* @psalm-mutation-free
74+
*/
7275
public function at(int $position)
7376
{
7477
return $this->data[$position] ?? null;

src/OrderedListInterface.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,57 +15,51 @@ interface OrderedListInterface extends ArrayInterface
1515
/**
1616
* @psalm-param TValue $element
1717
* @psalm-return OrderedListInterface<TValue>
18-
* @psalm-immutable
1918
*/
2019
public function add($element): OrderedListInterface;
2120

2221
/**
2322
* @psalm-return TValue|null
23+
* @psalm-mutation-free
2424
*/
2525
public function at(int $position);
2626

2727
/**
2828
* @psalm-param Closure(TValue $value):bool $callback
2929
* @psalm-return OrderedListInterface<TValue>
30-
* @psalm-immutable
3130
*/
3231
public function filter(callable $callback): OrderedListInterface;
3332

3433
/**
3534
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $callback
3635
* @psalm-return OrderedListInterface<TValue>
37-
* @psalm-immutable
3836
*/
3937
public function sort(?callable $callback = null): OrderedListInterface;
4038

4139
/**
4240
* @psalm-param list<OrderedListInterface<TValue>> $stack
4341
* @psalm-return OrderedListInterface<TValue>
44-
* @psalm-immutable
4542
*/
4643
public function merge(...$stack): OrderedListInterface;
4744

4845
/**
4946
* @template TNewValue
5047
* @psalm-param Closure(TValue $a):TNewValue $callback
5148
* @psalm-return OrderedListInterface<TNewValue>
52-
* @psalm-immutable
5349
*/
5450
public function map(callable $callback): OrderedListInterface;
5551

5652
/**
5753
* @psalm-param OrderedListInterface<TValue> $other
5854
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
5955
* @psalm-return OrderedListInterface<TValue>
60-
* @psalm-immutable
6156
*/
6257
public function intersect(OrderedListInterface $other, ?callable $valueComparator = null): OrderedListInterface;
6358

6459
/**
6560
* @psalm-param OrderedListInterface<TValue> $other
6661
* @psalm-param (Closure(TValue $a,TValue $b):int)|null $valueComparator
6762
* @psalm-return OrderedListInterface<TValue>
68-
* @psalm-immutable
6963
*/
7064
public function diff(OrderedListInterface $other, ?callable $valueComparator = null): OrderedListInterface;
7165

@@ -78,15 +72,13 @@ public function toMap(callable $keyGenerator): MapInterface;
7872
/**
7973
* @psalm-param TValue $element
8074
* @psalm-return OrderedListInterface<TValue>
81-
* @psalm-immutable
8275
*/
8376
public function removeElement($element): OrderedListInterface;
8477

8578
/**
8679
* @psalm-param (Closure(TValue $value):non-empty-string)|null $unificationIdentifierGenerator
8780
* @psalm-param (Closure(TValue $value,TValue $other):TValue)|null $callback
8881
* @psalm-return OrderedListInterface<TValue>
89-
* @psalm-immutable
9082
*/
9183
public function unify(
9284
?callable $unificationIdentifierGenerator = null,
@@ -98,7 +90,6 @@ public function unify(
9890
*
9991
* @psalm-param TValue|Closure(int $index):TValue $value
10092
* @psalm-return OrderedListInterface<TValue>
101-
* @psalm-immutable
10293
*/
10394
public function fill(int $startIndex, int $amount, $value): OrderedListInterface;
10495

0 commit comments

Comments
 (0)