code: protected function applyFix(\SplFileInfo $file, Tokens $tokens)
      {
          for ($index = 0, $count = $tokens->count(); $index < $count; ++$index) {
              // skip T_FOR parenthesis to ignore duplicated `;` like `for ($i = 1; ; ++$i) {...}`
              if ($tokens[$index]->isGivenKind(T_FOR)) {
                  $index = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $tokens->getNextMeaningfulToken($index)) + 1;
  
                  continue;
              }
  
              if (!$tokens[$index]->equals(';')) {
                  continue;
              }
  
              $previousMeaningfulIndex = $tokens->getPrevMeaningfulToken($index);
  
              // A semicolon can always be removed if it follows a semicolon, '{' or opening tag.
              if ($tokens[$previousMeaningfulIndex]->equalsAny(['{', ';', [T_OPEN_TAG]])) {
                  $tokens->clearTokenAndMergeSurroundingWhitespace($index);
  
                  continue;
              }
  
              // A semicolon might be removed if it follows a '}' but only if the brace is part of certain structures.
              if ($tokens[$previousMeaningfulIndex]->equals('}')) {
                  $this->fixSemicolonAfterCurlyBraceClose($tokens, $index, $previousMeaningfulIndex);
              }
          }
      }
docs: {@inheritdoc}