Skip to content
This repository was archived by the owner on Aug 25, 2025. It is now read-only.

Commit 878519b

Browse files
committed
fix support for Imm(Map|Set|Vector)
1 parent 58ef9bb commit 878519b

File tree

4 files changed

+85
-12
lines changed

4 files changed

+85
-12
lines changed

src/HackBuilder.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ enum ContainerType: string {
1818
VEC = 'vec';
1919
KEYSET = 'keyset';
2020
MAP = 'Map';
21-
IMMU_MAP = 'ImmuMap';
21+
IMM_MAP = 'ImmMap';
2222
VECTOR = 'Vector';
23-
IMMU_VECTOR = 'ImmuVector';
23+
IMM_VECTOR = 'ImmVector';
2424
SET = 'Set';
25-
IMMU_SET = 'ImmuSet';
25+
IMM_SET = 'ImmSet';
2626
SHAPE_TYPE = 'shape';
2727
}
2828

@@ -200,9 +200,9 @@ public function openContainer(ContainerType $type): this {
200200
case ContainerType::VEC:
201201
$container_sign = "[";
202202
break;
203-
case ContainerType::IMMU_MAP:
204-
case ContainerType::IMMU_SET:
205-
case ContainerType::IMMU_VECTOR:
203+
case ContainerType::IMM_MAP:
204+
case ContainerType::IMM_SET:
205+
case ContainerType::IMM_VECTOR:
206206
case ContainerType::MAP:
207207
case ContainerType::SET:
208208
case ContainerType::VECTOR:
@@ -230,9 +230,9 @@ public function closeContainer(ContainerType $type): this {
230230
case ContainerType::VEC:
231231
$container_sign = "]";
232232
break;
233-
case ContainerType::IMMU_MAP:
234-
case ContainerType::IMMU_SET:
235-
case ContainerType::IMMU_VECTOR:
233+
case ContainerType::IMM_MAP:
234+
case ContainerType::IMM_SET:
235+
case ContainerType::IMM_VECTOR:
236236
case ContainerType::MAP:
237237
case ContainerType::SET:
238238
case ContainerType::VECTOR:

src/key-value-render/HackBuilderValues.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static function immVector<Tv>(
5454
IHackBuilderValueRenderer<Tv> $vr,
5555
): IHackBuilderValueRenderer<ImmVector<Tv>> {
5656
return new HackBuilderNativeValueCollectionRenderer(
57-
ContainerType::IMMU_VECTOR,
57+
ContainerType::IMM_VECTOR,
5858
$vr,
5959
);
6060
}
@@ -77,7 +77,7 @@ public static function immSet<Tv>(
7777
IHackBuilderValueRenderer<Tv> $vr,
7878
): IHackBuilderValueRenderer<ImmSet<Tv>> {
7979
return new HackBuilderNativeValueCollectionRenderer(
80-
ContainerType::IMMU_SET,
80+
ContainerType::IMM_SET,
8181
$vr,
8282
);
8383
}
@@ -105,7 +105,7 @@ public static function immMap<Tk as arraykey, Tv>(
105105
IHackBuilderValueRenderer<Tv> $vr,
106106
): IHackBuilderValueRenderer<ImmMap<Tk, Tv>> {
107107
return new HackBuilderNativeKeyValueCollectionRenderer(
108-
ContainerType::MAP,
108+
ContainerType::IMM_MAP,
109109
$kr,
110110
$vr,
111111
);

test/HackBuilderTest.codegen

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,35 @@ if ($value <= 0) {
6969
return 2;
7070
}
7171

72+
!@#$%codegentest:testImmMapOfImmMaps
73+
$foo = ImmMap {
74+
'foo' => ImmMap {
75+
'a' => 12,
76+
'b' => 34,
77+
},
78+
'bar' => ImmMap {
79+
'c' => 45,
80+
},
81+
};
82+
83+
!@#$%codegentest:testImmSet
84+
$foo = ImmSet {
85+
'abc',
86+
'def',
87+
};
88+
89+
!@#$%codegentest:testImmVectorOfImmVectors
90+
$foo = ImmVector {
91+
ImmVector {
92+
'abc',
93+
'def',
94+
},
95+
ImmVector {
96+
'ghi',
97+
'jkl',
98+
},
99+
};
100+
72101
!@#$%codegentest:testKeyset
73102
$foo = keyset[
74103
'foo',

test/HackBuilderTest.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,50 @@ public function testVectorOfMaps(): void {
379379
$this->assertUnchanged($body->getCode());
380380
}
381381

382+
public function testImmVectorOfImmVectors(): void {
383+
$body = $this
384+
->getHackBuilder()
385+
->addAssignment(
386+
'$foo',
387+
ImmVector { ImmVector { 'abc', 'def' }, ImmVector { 'ghi', 'jkl' } },
388+
HackBuilderValues::immVector(
389+
HackBuilderValues::immVector(HackBuilderValues::export())
390+
),
391+
);
392+
$this->assertUnchanged($body->getCode());
393+
}
394+
395+
public function testImmMapOfImmMaps(): void {
396+
$body = $this
397+
->getHackBuilder()
398+
->addAssignment(
399+
'$foo',
400+
ImmMap {
401+
'foo' => ImmMap { 'a' => 12, 'b' => 34 },
402+
'bar' => ImmMap { 'c' => 45 },
403+
},
404+
HackBuilderValues::immMap(
405+
HackBuilderKeys::export(),
406+
HackBuilderValues::immMap(
407+
HackBuilderKeys::export(),
408+
HackBuilderValues::export(),
409+
),
410+
),
411+
);
412+
$this->assertUnchanged($body->getCode());
413+
}
414+
415+
public function testImmSet(): void {
416+
$body = $this
417+
->getHackBuilder()
418+
->addAssignment(
419+
'$foo',
420+
ImmSet { 'abc', 'def' },
421+
HackBuilderValues::immSet(HackBuilderValues::export()),
422+
);
423+
$this->assertUnchanged($body->getCode());
424+
}
425+
382426
public function testVec(): void {
383427
$body = $this
384428
->getHackBuilder()

0 commit comments

Comments
 (0)