From 53ba0a697e29cbd8476c537c2c7138d1a7b50fc8 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 8 Apr 2025 12:39:31 -0700 Subject: [PATCH 1/5] set types properly --- src/Writers/FunctionWriter.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Writers/FunctionWriter.php b/src/Writers/FunctionWriter.php index ee1e669..a77ce8b 100644 --- a/src/Writers/FunctionWriter.php +++ b/src/Writers/FunctionWriter.php @@ -6,6 +6,8 @@ use PhpParser\Node\Arg; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Name; +use PhpParser\Node\Scalar\Float_; +use PhpParser\Node\Scalar\Int_; use PhpParser\Node\Scalar\String_; class FunctionWriter @@ -85,7 +87,7 @@ private function convertToArgs($args) { return collect($args) ->reject(fn ($arg) => $arg === null || mb_strlen($arg) === 0) - ->map(fn (string $arg) => new Arg(new String_($arg))) + ->map(fn (mixed $arg) => $this->arg($arg)) ->all(); } @@ -93,4 +95,20 @@ private function convertToName(string $name) { return new Name($name); } + + private function getScalarClass(string $type): string + { + return match ($type) { + 'integer' => Int_::class, + 'double' => Float_::class, + default => String_::class, + }; + } + + private function arg(mixed $arg): Arg + { + $scalarClass = $this->getScalarClass($arg); + + return new Arg(new $scalarClass($arg)); + } } From 12ac4396ac79b45659f5f9d77788bf6272b9e8d3 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 8 Apr 2025 12:41:24 -0700 Subject: [PATCH 2/5] need the type, duh --- src/Writers/FunctionWriter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Writers/FunctionWriter.php b/src/Writers/FunctionWriter.php index a77ce8b..0075a1f 100644 --- a/src/Writers/FunctionWriter.php +++ b/src/Writers/FunctionWriter.php @@ -107,7 +107,7 @@ private function getScalarClass(string $type): string private function arg(mixed $arg): Arg { - $scalarClass = $this->getScalarClass($arg); + $scalarClass = $this->getScalarClass(gettype($arg)); return new Arg(new $scalarClass($arg)); } From 6447c1aa8b3d46f116a14b0292b2e6eac8b3ce62 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 8 Apr 2025 12:44:27 -0700 Subject: [PATCH 3/5] bit nicer? --- src/Writers/FunctionWriter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Writers/FunctionWriter.php b/src/Writers/FunctionWriter.php index 0075a1f..a8ab6ed 100644 --- a/src/Writers/FunctionWriter.php +++ b/src/Writers/FunctionWriter.php @@ -96,7 +96,7 @@ private function convertToName(string $name) return new Name($name); } - private function getScalarClass(string $type): string + private function scalarClass(string $type): string { return match ($type) { 'integer' => Int_::class, @@ -107,7 +107,7 @@ private function getScalarClass(string $type): string private function arg(mixed $arg): Arg { - $scalarClass = $this->getScalarClass(gettype($arg)); + $scalarClass = $this->scalarClass(gettype($arg)); return new Arg(new $scalarClass($arg)); } From 9dd812021950a864bfe09b5260a6851bdf99a09b Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 8 Apr 2025 13:52:17 -0700 Subject: [PATCH 4/5] spacing --- tests/LaravelFunctionCallTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/LaravelFunctionCallTest.php b/tests/LaravelFunctionCallTest.php index ef78d26..f09f6de 100644 --- a/tests/LaravelFunctionCallTest.php +++ b/tests/LaravelFunctionCallTest.php @@ -60,8 +60,6 @@ public function testCustomCallsCanBeWritten() ); } - - public function testWritingNewClosuresOrArrowFunctions() { $f = new FunctionWriter(); From 48686d7019c4f134678b9c149ef3c750cddd1f82 Mon Sep 17 00:00:00 2001 From: edalzell Date: Tue, 8 Apr 2025 13:59:22 -0700 Subject: [PATCH 5/5] test --- tests/LaravelFunctionCallTest.php | 15 +++++++++++++++ tests/expected/typesenv.php | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 tests/expected/typesenv.php diff --git a/tests/LaravelFunctionCallTest.php b/tests/LaravelFunctionCallTest.php index f09f6de..7e1692f 100644 --- a/tests/LaravelFunctionCallTest.php +++ b/tests/LaravelFunctionCallTest.php @@ -60,6 +60,21 @@ public function testCustomCallsCanBeWritten() ); } + public function testTypesAreMaintained() + { + $f = new FunctionWriter; + + $this->assertChangeEquals( + __DIR__.'/configs/empty.php', + __DIR__.'/expected/typesenv.php', + [ + 'int_type' => $f->env('INTEGER_TYPE', 5), + 'double_type' => $f->env('DOUBLE_TYPE', 5.0), + 'string_type' => $f->env('STRING_TYPE', '5'), + ] + ); + } + public function testWritingNewClosuresOrArrowFunctions() { $f = new FunctionWriter(); diff --git a/tests/expected/typesenv.php b/tests/expected/typesenv.php new file mode 100644 index 0000000..6fd4e77 --- /dev/null +++ b/tests/expected/typesenv.php @@ -0,0 +1,7 @@ + env('INTEGER_TYPE', 5), + 'double_type' => env('DOUBLE_TYPE', 5.0), + 'string_type' => env('STRING_TYPE', '5'), +];