Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. LineEndingsSniff.php

class LineEndingsSniff

Hierarchy

  • class \PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineEndingsSniff implements \PHP_CodeSniffer\Sniffs\Sniff

Expanded class hierarchy of LineEndingsSniff

File

vendor/squizlabs/php_codesniffer/src/Standards/Generic/Sniffs/Files/LineEndingsSniff.php, line 15

Namespace

PHP_CodeSniffer\Standards\Generic\Sniffs\Files
View source
class LineEndingsSniff implements Sniff {
    
    /**
     * A list of tokenizers this sniff supports.
     *
     * @var array
     */
    public $supportedTokenizers = [
        'PHP',
        'JS',
        'CSS',
    ];
    
    /**
     * The valid EOL character.
     *
     * @var string
     */
    public $eolChar = '\\n';
    
    /**
     * Returns an array of tokens this test wants to listen for.
     *
     * @return array<int|string>
     */
    public function register() {
        return [
            T_OPEN_TAG,
            T_OPEN_TAG_WITH_ECHO,
        ];
    }
    
    //end register()
    
    /**
     * Processes this sniff, when one of its tokens is encountered.
     *
     * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.
     * @param int                         $stackPtr  The position of the current token in
     *                                               the stack passed in $tokens.
     *
     * @return int
     */
    public function process(File $phpcsFile, $stackPtr) {
        $found = $phpcsFile->eolChar;
        $found = str_replace("\n", '\\n', $found);
        $found = str_replace("\r", '\\r', $found);
        $phpcsFile->recordMetric($stackPtr, 'EOL char', $found);
        if ($found === $this->eolChar) {
            // Ignore the rest of the file.
            return $phpcsFile->numTokens;
        }
        // Check for single line files without an EOL. This is a very special
        // case and the EOL char is set to \n when this happens.
        if ($found === '\\n') {
            $tokens = $phpcsFile->getTokens();
            $lastToken = $phpcsFile->numTokens - 1;
            if ($tokens[$lastToken]['line'] === 1 && $tokens[$lastToken]['content'] !== "\n") {
                return $phpcsFile->numTokens;
            }
        }
        $error = 'End of line character is invalid; expected "%s" but found "%s"';
        $expected = $this->eolChar;
        $expected = str_replace("\n", '\\n', $expected);
        $expected = str_replace("\r", '\\r', $expected);
        $data = [
            $expected,
            $found,
        ];
        // Errors are always reported on line 1, no matter where the first PHP tag is.
        $fix = $phpcsFile->addFixableError($error, 0, 'InvalidEOLChar', $data);
        if ($fix === true) {
            $tokens = $phpcsFile->getTokens();
            switch ($this->eolChar) {
                case '\\n':
                    $eolChar = "\n";
                    break;
                case '\\r':
                    $eolChar = "\r";
                    break;
                case '\\r\\n':
                    $eolChar = "\r\n";
                    break;
                default:
                    $eolChar = $this->eolChar;
                    break;
            }
            for ($i = 0; $i < $phpcsFile->numTokens; $i++) {
                if (isset($tokens[$i + 1]) === true && $tokens[$i + 1]['line'] <= $tokens[$i]['line']) {
                    continue;
                }
                // Token is the last on a line.
                if (isset($tokens[$i]['orig_content']) === true) {
                    $tokenContent = $tokens[$i]['orig_content'];
                }
                else {
                    $tokenContent = $tokens[$i]['content'];
                }
                if ($tokenContent === '') {
                    // Special case for JS/CSS close tag.
                    continue;
                }
                $newContent = rtrim($tokenContent, "\r\n");
                $newContent .= $eolChar;
                if ($tokenContent !== $newContent) {
                    $phpcsFile->fixer
                        ->replaceToken($i, $newContent);
                }
            }
            
            //end for
        }
        
        //end if
        // Ignore the rest of the file.
        return $phpcsFile->numTokens;
    }
    
    //end process()

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
LineEndingsSniff::$eolChar public property The valid EOL character.
LineEndingsSniff::$supportedTokenizers public property A list of tokenizers this sniff supports.
LineEndingsSniff::process public function Processes this sniff, when one of its tokens is encountered. Overrides Sniff::process
LineEndingsSniff::register public function Returns an array of tokens this test wants to listen for. Overrides Sniff::register
RSS feed
Powered by Drupal