private function compareTokensForSorting(array $leftToken, array $rightToken, array $tagCounts): int
    {
        $leftTagName = $leftToken['content'];
        $rightTagName = $rightToken['content'];
        $realLeftTagName = $this->getRealtagName($leftTagName);
        $realRightTagName = $this->getRealtagName($rightTagName);

        // If they have the same content, leave them, where they where ...
        $return = $leftToken['line'] > $rightToken['line'] ? 1 : -1;

        // But if they are different.
        if ($realLeftTagName !== $realRightTagName) {
            $leftTagCount = $tagCounts[$leftTagName];
            $rightTagCount = $tagCounts[$rightTagName];

            switch (true) {
                // Move return to bottom everytime ...
                case ($realLeftTagName === '@return'):
                    $return = 1;
                    break;

                // ... yes, everytime
                case ($realRightTagName === '@return'):
                    $return = -1;
                    break;

                // Move single items to the top.
                case ($leftTagCount !== $rightTagCount):
                    $return = $leftTagCount > $rightTagCount ? +1 : -1;
                    break;

                // Compare tag name
                default:
                    $return = strcasecmp($realLeftTagName, $realRightTagName) > 1 ? 1 : -1;
            }
        }

        return $return;
    }