php-code-generator icon indicating copy to clipboard operation
php-code-generator copied to clipboard

How to preserve new lines in method body?

Open matak opened this issue 6 years ago • 5 comments

Hi, wonderfull library, but after several hours, i realize that i cant use it.

I would like to use this library to scaffolding my code. With help of AutoIt I want to replace the whole code in text window with scaffolded dependency injection of use statements etc.

But the problem is, that it is not possible to preserve the new lines and whitespaces in the body of methods, is it true? Am I right?

So when i want to update this code

public function renderDefault()
{
	$stockinRow = $this->stockinRepositoryService->findById($this->stockin_id);
		
	$pageHeader = $this['pageHeader'];
	$pageHeader->setTitle("Naskladnění [" . $stockinRow->id . "] " . $stockinRow->dateArrival->format("d.m.Y") . " , profil dodavatele: " . $stockinRow->supplierProfile->name);

	$template = $this->template;
	$template->dataStockinItems = $this->stockinItemRepositoryService->selectAll()->where("stockin_id = ?", $this->stockin_id)->order("EAN ASC")->fetchAll();
}

I get this code,

public function renderDefault() {
	$stockinRow = $this->stockinRepositoryService->findById($this->stockin_id);
	$pageHeader = $this['pageHeader'];
	$pageHeader->setTitle("Naskladnění [" . $stockinRow->id . "] " . $stockinRow->dateArrival->format("d.m.Y") . " , profil dodavatele: " . $stockinRow->supplierProfile->name);
	$template = $this->template;
	$template->dataStockinItems = $this->stockinItemRepositoryService->selectAll()->where("stockin_id = ?", $this->stockin_id)->order("EAN ASC")->fetchAll();
}

so quite messy. Can I somehow prevent it?

As i searched in code, it seems that builder knows that originally the row was on line 31 and next row was on line 33, so there should be new line string.

matak avatar Apr 24 '19 20:04 matak

For my understanding:

  1. You read in the first block of code into a model
  2. You regenerator the code from the model
  3. The regenerated code doesn't contain the blank lines of the body

Is that the problem you are describing? Can you provide your code generator config?

gossi avatar Apr 24 '19 21:04 gossi

Yes exactly!

$phpClass = PhpClass::fromFile($filePath);

$codeGeneratorConfig = new CodeGeneratorConfig([
			'generateScalarTypeHints' => true,
			'generateReturnTypeHints' => true,
			'generateEmptyDocblock' => false,
			'enableSorting' => false,
			'useStatementSorting' => false,
			'constantSorting' => false,
			'propertySorting' => false,
			'methodSorting' => false,
]);

$generator = new CodeGenerator($codeGeneratorConfig);
return '<?php' . "\n\n" . $generator->generate($phpClass);

this is the most simple sample of my use case, the return is as i desribed in previous post

matak avatar Apr 24 '19 21:04 matak

Ok, thanks. Could be a bug. Isn't even covered by tests, I'll try to tackle it on the weekend.

gossi avatar Apr 25 '19 08:04 gossi

Maybe my pull request is not the best solution, maybe you could inject different PHP PrettyPrinter?

matak avatar Apr 25 '19 08:04 matak

I merged your PR - thanks for that, it's on master. I'll keep this open, since tests for this are missing.

gossi avatar May 30 '19 17:05 gossi