PhpStorm over-indenting multi-line functions

820 Views Asked by At

I'm currently attempting to configure PhpStorm to produce fully-PSR-2-compliant code, however its formatter is tripping up on long lines which contain functions with multiple parameters.

When I run the formatter, it converts this:

return ($thisIsALongLine || functionCall($arg1, $arg2));

into this:

return ($thisIsALongLine || functionCall(
        $arg1,
        $arg2
    ));

However, what I want is this:

return ($thisIsALongLine || functionCall(
    $arg1,
    $arg2
));

Does anyone know which formatter option tells it to further indent multi-line function calls in this instance?

Note: Usually, I'd format the above as this:

return ($thisIsALongLine
    || functionCall($arg1, $arg2));

However, that just bypasses the extra indentation issue, which I'd still need to fix for other situations.

Edit: This is the state of Wrapping and Braces, as requested by @LazyOne below:

Wrapping and Braces, part 1 Wrapping and Braces, part 2

Edit 2: Examples of two different types of line which PhpStorm's formatter isn't handling correctly. (Disclaimer: This is old code from a legacy system.)

Firstly, this:

if ($validateBudget && $this->getFinancialPeriodService()->validateBudget($formModel->action, $formModel->estimatedBudget, $formModel->startDate, $formModel->endDate, $formModel->isFirstPeriod)) {

becomes this:

if ($validateBudget && $this->getFinancialPeriodService()
    ->validateBudget($formModel->action, $formModel->estimatedBudget,
        $formModel->startDate, $formModel->endDate, $formModel->isFirstPeriod)) {

when I would expect this based on the settings above:

if ($validateBudget && $this->getFinancialPeriodService()
    ->validateBudget(
        $formModel->action,
        $formModel->estimatedBudget,
        $formModel->startDate,
        $formModel->endDate,
        $formModel->isFirstPeriod
    )
) {

Secondly, if you enable alignment on chained methods, then this:

if ($evaluation->getExpert() != NULL && ($evaluation->getExpert()->getStatusId() == Evaluation::STATUS_ASSIGNED || $evaluation->getEvaluationStage() == Evaluation::STAGE_PROPOSED && CoreDateUtils::dateIsPast($proposal->getCalendar()->getStage1StartDate()) == false || $evaluation->getEvaluationStage() == Evaluation::STAGE_IN_PROGRESS && CoreDateUtils::dateIsPast($proposal->getCalendar()->getStage2StartDate()) == false)) {

is reformatted to this:

if ($evaluation->getExpert() != null && ($evaluation->getExpert()
                                                    ->getStatusId() == Evaluation::STATUS_ASSIGNED || $evaluation->getEvaluationStage() == Evaluation::STAGE_PROPOSED && CoreDateUtils::dateIsPast($proposal->getCalendar()
                                                                                                                                                                                                            ->getStage1StartDate()) == false || $evaluation->getEvaluationStage() == Evaluation::STAGE_IN_PROGRESS && CoreDateUtils::dateIsPast($proposal->getCalendar()
                                                                                                                                                                                                                                                                                                                                                            ->getStage2StartDate()) == false)) {

when I would expect this:

if ($evaluation->getExpert() != null
    && ($evaluation->getExpert()->getStatusId() == Evaluation::STATUS_ASSIGNED
    || $evaluation->getEvaluationStage() == Evaluation::STAGE_PROPOSED
    && CoreDateUtils::dateIsPast($proposal->getCalendar()->getStage1StartDate()) == false
    || $evaluation->getEvaluationStage() == Evaluation::STAGE_IN_PROGRESS
    && CoreDateUtils::dateIsPast($proposal->getCalendar()->getStage2StartDate()) == false)
) {

To be honest, at this point I suspect a bug in the formatter, so will open a ticket with JetBrains, however I'll leave this open in case anyone does know why it over-/underformats things.

0

There are 0 best solutions below