diff --git a/src/PhpGenerator/Printer.php b/src/PhpGenerator/Printer.php index 4731fbe3..4d9f93f6 100644 --- a/src/PhpGenerator/Printer.php +++ b/src/PhpGenerator/Printer.php @@ -27,6 +27,7 @@ class Printer public int $linesBetweenUseTypes = 0; public string $returnTypeColon = ': '; public bool $bracesOnNextLine = true; + public bool $singleParameterOnOneLine = false; protected ?PhpNamespace $namespace = null; protected ?Dumper $dumper; private bool $resolveTypes = true; @@ -329,6 +330,7 @@ protected function printParameters(Closure|GlobalFunction|Method $function, int $params = []; $list = $function->getParameters(); $multiline = false; + $single = $this->singleParameterOnOneLine && count($list) === 1; foreach ($list as $param) { $param->validate(); @@ -348,7 +350,7 @@ protected function printParameters(Closure|GlobalFunction|Method $function, int . '$' . $param->getName() . ($param->hasDefaultValue() && !$variadic ? ' = ' . $this->dump($param->getDefaultValue()) : ''); - $multiline = $multiline || $promoted || $attrs; + $multiline = $multiline || (!$single && ($promoted || $attrs)); } $line = implode(', ', $params); diff --git a/tests/PhpGenerator/Printer.single.parameter.phpt b/tests/PhpGenerator/Printer.single.parameter.phpt new file mode 100644 index 00000000..0c015b31 --- /dev/null +++ b/tests/PhpGenerator/Printer.single.parameter.phpt @@ -0,0 +1,56 @@ +singleParameterOnOneLine = true; + + +$function = new Nette\PhpGenerator\GlobalFunction('singleFunction'); +$function + ->setReturnType('array') + ->addParameter('foo') + ->addAttribute('Foo'); + +Assert::match(<<<'XX' + function singleFunction(#[Foo] $foo): array + { + } + + XX, $printer->printFunction($function)); + + +$method = new Nette\PhpGenerator\Method('singleMethod'); +$method + ->setPublic() + ->setReturnType('array') + ->addParameter('foo') + ->addAttribute('Foo'); + +Assert::match(<<<'XX' + public function singleMethod(#[Foo] $foo): array + { + } + + XX, $printer->printMethod($method)); + + +$method = new Nette\PhpGenerator\Method('singleMethod'); +$method + ->setPublic() + ->setReturnType('array') + ->addPromotedParameter('foo') + ->setPublic(); + +Assert::match(<<<'XX' + public function singleMethod(public $foo): array + { + } + + XX, $printer->printMethod($method));