Skip to content

How to preserve new lines in method body? #61

Open

Description

@romanmatena

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.

Activity

  1. gossi commented on Apr 24, 2019

    @gossi
    Member

    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?

  2. romanmatena commented on Apr 24, 2019

    @romanmatena
    ContributorAuthor

    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

  3. gossi commented on Apr 25, 2019

    @gossi
    Member

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

  4. added a commit that references this issue on Apr 25, 2019
  5. romanmatena commented on Apr 25, 2019

    @romanmatena
    ContributorAuthor

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

  6. gossi commented on May 30, 2019

    @gossi
    Member

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions