<?php

/*
 * Tests specifically for the error code differentiation.
 *
 * Each line should yield one of each of these errors: SpaceBefore, TooMuchSpaceAfter, NoSpaceAfter.
 */

// *InDeclare suffix.
declare(strict_types=1 ,  encoding='utf8',ticks=0);

// *InFunctionDeclaration suffix.
function name($param1 ,   $param2,$param3) {}
$closure = function ($param1 ,   $param2,$param3) {};
$arrow = fn ($param1 ,   $param2,$param3) => $param1 * $param2 + $param3;
class Foo {
    public function name($param1 ,   $param2,$param3) {}
}

// *InClosureUse suffix.
$closure = function () use($param1 ,   $param2,$param3) {};

// *InFunctionCall suffix.
do_something($param1 ,   $param2,$param3);
$obj = new Foo($param1 ,   $param2,$param3);
$obj = new self($param1 ,   $param2,$param3);
$obj = new parent($param1 ,   $param2,$param3);
$obj = new static($param1 ,   $param2,$param3);
$anonClass = new class($param1 ,   $param2,$param3) {};
$var($param1 ,   $param2,$param3);
#[MyAttribute(1 ,  'foo',false)]
function name() {}
isset($item1 ,   $item2,$item3);
unset($item1 ,   $item2,$item3);

// No suffix.
$a = array($item1 ,   $item2,$item3);
$a = [$item1 ,   $item2,$item3];

list($item1 ,   $item2,$item3) = $array;
[$item1 ,   $item2,$item3] = $array;

for ($i = 0 ,  $j = 1,$k = 2; $i < $j && $j < $k; $i++ ,  $j++,$k++) {}

echo $item1 ,   $item2,$item3;

use Vendor\Package\{NameA ,   NameB,NameC};

class Multi {
    const CONST_A = 1 ,  CONST_B = 2,CONST_C = 3;
    public $propA = 1 ,  $propB = 2,$propC = 3;

    public function name() {
        global $var1 ,   $var2,$var3;
        static $localA = 1 ,   $localB,$localC = 'foo';
    }
}

$value = match($value) {
    1  ,   2,3 => 123,
};

// Parse error, but not our concern.
print ($item1 ,   $item2,$item3);
