Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/squizlabs/php_codesniffer/src/Standards/Generic/Sniffs/Arrays/ArrayIndentSniff.php
<?php
/**
 * Ensures that array are indented one tab stop.
 *
 * @author    Greg Sherwood <gsherwood@squiz.net>
 * @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
 * @license   https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
 */

namespace PHP_CodeSniffer\Standards\Generic\Sniffs\Arrays;

use
PHP_CodeSniffer\Sniffs\AbstractArraySniff;
use
PHP_CodeSniffer\Util\Tokens;

class
ArrayIndentSniff extends AbstractArraySniff
{

   
/**
     * The number of spaces each array key should be indented.
     *
     * @var integer
     */
   
public $indent = 4;


   
/**
     * Processes a single-line array definition.
     *
     * @param \PHP_CodeSniffer\Files\File $phpcsFile  The current file being checked.
     * @param int                         $stackPtr   The position of the current token
     *                                                in the stack passed in $tokens.
     * @param int                         $arrayStart The token that starts the array definition.
     * @param int                         $arrayEnd   The token that ends the array definition.
     * @param array                       $indices    An array of token positions for the array keys,
     *                                                double arrows, and values.
     *
     * @return void
     */
   
public function processSingleLineArray($phpcsFile, $stackPtr, $arrayStart, $arrayEnd, $indices)
    {

    }
//end processSingleLineArray()


    /**
     * Processes a multi-line array definition.
     *
     * @param \PHP_CodeSniffer\Files\File $phpcsFile  The current file being checked.
     * @param int                         $stackPtr   The position of the current token
     *                                                in the stack passed in $tokens.
     * @param int                         $arrayStart The token that starts the array definition.
     * @param int                         $arrayEnd   The token that ends the array definition.
     * @param array                       $indices    An array of token positions for the array keys,
     *                                                double arrows, and values.
     *
     * @return void
     */
   
public function processMultiLineArray($phpcsFile, $stackPtr, $arrayStart, $arrayEnd, $indices)
    {
       
$tokens = $phpcsFile->getTokens();

       
// Determine how far indented the entire array declaration should be.
       
$ignore     = Tokens::$emptyTokens;
       
$ignore[]   = T_DOUBLE_ARROW;
       
$ignore[]   = T_COMMA;
       
$prev       = $phpcsFile->findPrevious($ignore, ($stackPtr - 1), null, true);
       
$start      = $phpcsFile->findStartOfStatement($prev);
       
$first      = $phpcsFile->findFirstOnLine(T_WHITESPACE, $start, true);
       
$baseIndent = ($tokens[$first]['column'] - 1);

       
$first       = $phpcsFile->findFirstOnLine(T_WHITESPACE, $stackPtr, true);
       
$startIndent = ($tokens[$first]['column'] - 1);

       
// If the open brace is not indented to at least to the level of the start
        // of the statement, the sniff will conflict with other sniffs trying to
        // check indent levels because it's not valid. But we don't enforce exactly
        // how far indented it should be.
       
if ($startIndent < $baseIndent) {
           
$error = 'Array open brace not indented correctly; expected at least %s spaces but found %s';
           
$data  = [
               
$baseIndent,
               
$startIndent,
            ];
           
$fix   = $phpcsFile->addFixableError($error, $stackPtr, 'OpenBraceIncorrect', $data);
            if (
$fix === true) {
               
$padding = str_repeat(' ', $baseIndent);
                if (
$startIndent === 0) {
                   
$phpcsFile->fixer->addContentBefore($first, $padding);
                } else {
                   
$phpcsFile->fixer->replaceToken(($first - 1), $padding);
                }
            }

            return;
        }
//end if

       
$expectedIndent = ($startIndent + $this->indent);

        foreach (
$indices as $index) {
            if (isset(
$index['index_start']) === true) {
               
$start = $index['index_start'];
            } else {
               
$start = $index['value_start'];
            }

           
$prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($start - 1), null, true);
            if (
$tokens[$prev]['line'] === $tokens[$start]['line']) {
               
// This index isn't the only content on the line
                // so we can't check indent rules.
               
continue;
            }

           
$first = $phpcsFile->findFirstOnLine(T_WHITESPACE, $start, true);

           
$foundIndent = ($tokens[$first]['column'] - 1);
            if (
$foundIndent === $expectedIndent) {
                continue;
            }

           
$error = 'Array key not indented correctly; expected %s spaces but found %s';
           
$data  = [
               
$expectedIndent,
               
$foundIndent,
            ];
           
$fix   = $phpcsFile->addFixableError($error, $first, 'KeyIncorrect', $data);
            if (
$fix === false) {
                continue;
            }

           
$padding = str_repeat(' ', $expectedIndent);
            if (
$foundIndent === 0) {
               
$phpcsFile->fixer->addContentBefore($first, $padding);
            } else {
               
$phpcsFile->fixer->replaceToken(($first - 1), $padding);
            }
        }
//end foreach

       
$prev = $phpcsFile->findPrevious(T_WHITESPACE, ($arrayEnd - 1), null, true);
        if (
$tokens[$prev]['line'] === $tokens[$arrayEnd]['line']) {
           
$error = 'Closing brace of array declaration must be on a new line';
           
$fix   = $phpcsFile->addFixableError($error, $arrayEnd, 'CloseBraceNotNewLine');
            if (
$fix === true) {
               
$padding = $phpcsFile->eolChar.str_repeat(' ', $expectedIndent);
               
$phpcsFile->fixer->addContentBefore($arrayEnd, $padding);
            }

            return;
        }

       
// The close brace must be indented one stop less.
       
$expectedIndent -= $this->indent;
       
$foundIndent     = ($tokens[$arrayEnd]['column'] - 1);
        if (
$foundIndent === $expectedIndent) {
            return;
        }

       
$error = 'Array close brace not indented correctly; expected %s spaces but found %s';
       
$data  = [
           
$expectedIndent,
           
$foundIndent,
        ];
       
$fix   = $phpcsFile->addFixableError($error, $arrayEnd, 'CloseBraceIncorrect', $data);
        if (
$fix === false) {
            return;
        }

       
$padding = str_repeat(' ', $expectedIndent);
        if (
$foundIndent === 0) {
           
$phpcsFile->fixer->addContentBefore($arrayEnd, $padding);
        } else {
           
$phpcsFile->fixer->replaceToken(($arrayEnd - 1), $padding);
        }

    }
//end processMultiLineArray()


}//end class