<?php

// Valid.
for ($i = 0; $i < 10; $i++) {
}

// Invalid.
for ($i = 0; $i < 10; $i++) {
}

for ($i = 0; $i < 10; $i++) {
}

for ($i = 0; $i < 10; $i++) {
}

for ($i = 0; $i < 10; $i++) {
}

// The works.
for ($i = 0; $i < 10; $i++) {
}

for ($i = 0; $i < 10;) {
}

for ($i = 0; $i < 10;) {
}

for ($i = 0;; $i++) {
}
for ($i = 0;; $i++) {
}

// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 1
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 1
for ( $i = 0; $i < 10; $i++ ) {}
for ( $i = 0; $i < 10; $i++ ) {}
for ( $i = 0; $i < 10; $i++ ) {}
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 0
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 0

for (; $i < 10; $i++) {}
for (; $i < 10; $i++) {}

// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 1
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 1
for ( ; $i < 10; $i++ ) {}
for ( ; $i < 10; $i++ ) {}
for ( ; $i < 10; $i++ ) {}

for ( $i = 0; $i < 10; ) {}
for ( $i = 0; $i < 10; ) {}
for ( $i = 0; $i < 10; ) {}
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 0
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 0

// Test handling of comments and inline annotations.
for (/*phpcs:enable*/ $i = 0 /*start*/; /*end*/$i < 10/*comment*/; $i++ /*comment*/) {}

// Test multi-line FOR control structure.
for ($i = 0; $i < 10; $i++) {}

// Test multi-line FOR control structure with comments and annotations.
for ($i = 0; /* Start */
    $i < 10; /* phpcs:ignore Standard.Category.SniffName -- for reasons. */
    $i++ // comment

) {}

// Test fixing each error in one go. Note: lines 78 + 82 contain trailing whitespace on purpose.
for ($i = 0; $i < 10; $i++) {}

// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 1
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 1
for ( $i = 0; $i < 10; $i++ ) {}
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesAfterOpen 0
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration requiredSpacesBeforeClose 0

// Test with semicolon not belonging to for.
for ($i = function() { return $this->i  ;    }; $i < function() { return $this->max; }; $i++) {}
for ($i = function() { return $this->i; }; $i < function() { return $this->max; }; $i++) {}

// phpcs:set Squiz.ControlStructures.ForLoopDeclaration ignoreNewlines true
for (
    $i = 0;
    $i < 5;
    $i++
) {
    // body here
}
// phpcs:set Squiz.ControlStructures.ForLoopDeclaration ignoreNewlines false
