Ongr/Sniffs/Strings/DoubleQuoteUsageSniff.php
public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
    {
        $tokens = $phpcsFile->getTokens();

        // We are only interested in the first token in a multi-line string.
        if ($tokens[$stackPtr]['code'] === $tokens[($stackPtr - 1)]['code']) {
            return;
        }

        $workingString   = $tokens[$stackPtr]['content'];
        $lastStringToken = $stackPtr;

        $i = ($stackPtr + 1);
        if (isset($tokens[$i]) === true) {
            while ($tokens[$i]['code'] === $tokens[$stackPtr]['code']) {
                $workingString  .= $tokens[$i]['content'];
                $lastStringToken = $i;
                $i++;
            }
        }

        // Check if it's a double quoted string.
        if (strpos($workingString, '"') === false) {
            return;
        }

        // Make sure it's not a part of a string started in a previous line.
        // If it is, then we have already checked it.
        if ($workingString[0] !== '"') {
            return;
        }
        //ONGR variables are allowed in double quoted strings.
//        // The use of variables in double quoted strings is not allowed.
//        if ($tokens[$stackPtr]['code'] === T_DOUBLE_QUOTED_STRING) {
//            $stringTokens = token_get_all('<?php '.$workingString);
//            foreach ($stringTokens as $token) {
//                if (is_array($token) === true && $token[0] === T_VARIABLE) {
//                    $error = 'Variable "%s" not allowed in double quoted string; use concatenation instead';
//                    $data  = array($token[1]);
//                    $phpcsFile->addError($error, $stackPtr, 'ContainsVar', $data);
//                }
//            }
//
//            return;
//        }//end if

        //ONGR We allow '$' char.
        $allowedChars = array(
            '\0',
            '\n',
            '\r',
            '\f',
            '\t',
            '\v',
            '\x',
            '\b',
            '\'',
            '$',
        );

        foreach ($allowedChars as $testChar) {
            if (strpos($workingString, $testChar) !== false) {
                return;
            }
        }

        $error = 'String %s does not require double quotes; use single quotes instead';
        $data  = array(str_replace("\n", '\n', $workingString));
        $fix   = $phpcsFile->addFixableError($error, $stackPtr, 'NotRequired', $data);

        if ($fix === true) {
            $phpcsFile->fixer->beginChangeset();
            $innerContent = substr($workingString, 1, -1);
            $innerContent = str_replace('\"', '"', $innerContent);
            $phpcsFile->fixer->replaceToken($stackPtr, "'$innerContent'");
            while ($lastStringToken !== $stackPtr) {
                $phpcsFile->fixer->replaceToken($lastStringToken, '');
                $lastStringToken--;
            }

            $phpcsFile->fixer->endChangeset();
        }

    }
public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
    {
        $tokens = $phpcsFile->getTokens();

        // We are only interested in the first token in a multi-line string.
        if ($tokens[$stackPtr]['code'] === $tokens[($stackPtr - 1)]['code']) {
            return;
        }

        $workingString   = $tokens[$stackPtr]['content'];
        $lastStringToken = $stackPtr;

        $i = ($stackPtr + 1);
        if (isset($tokens[$i]) === true) {
            while ($tokens[$i]['code'] === $tokens[$stackPtr]['code']) {
                $workingString  .= $tokens[$i]['content'];
                $lastStringToken = $i;
                $i++;
            }
        }

        // Check if it's a double quoted string.
        if (strpos($workingString, '"') === false) {
            return;
        }

        // Make sure it's not a part of a string started in a previous line.
        // If it is, then we have already checked it.
        if ($workingString[0] !== '"') {
            return;
        }
        //ONGR variables are allowed in double quoted strings.
//        // The use of variables in double quoted strings is not allowed.
//        if ($tokens[$stackPtr]['code'] === T_DOUBLE_QUOTED_STRING) {
//            $stringTokens = token_get_all('<?php '.$workingString);
//            foreach ($stringTokens as $token) {
//                if (is_array($token) === true && $token[0] === T_VARIABLE) {
//                    $error = 'Variable "%s" not allowed in double quoted string; use concatenation instead';
//                    $data  = array($token[1]);
//                    $phpcsFile->addError($error, $stackPtr, 'ContainsVar', $data);
//                }
//            }
//
//            return;
//        }//end if

        //ONGR We allow '$' char.
        $allowedChars = array(
            '\0',
            '\n',
            '\r',
            '\f',
            '\t',
            '\v',
            '\x',
            '\b',
            '\'',
            '$',
        );

        foreach ($allowedChars as $testChar) {
            if (strpos($workingString, $testChar) !== false) {
                return;
            }
        }

        $error = 'String %s does not require double quotes; use single quotes instead';
        $data  = array(str_replace("\n", '\n', $workingString));
        $fix   = $phpcsFile->addFixableError($error, $stackPtr, 'NotRequired', $data);

        if ($fix === true) {
            $phpcsFile->fixer->beginChangeset();
            $innerContent = substr($workingString, 1, -1);
            $innerContent = str_replace('\"', '"', $innerContent);
            $phpcsFile->fixer->replaceToken($stackPtr, "'$innerContent'");
            while ($lastStringToken !== $stackPtr) {
                $phpcsFile->fixer->replaceToken($lastStringToken, '');
                $lastStringToken--;
            }

            $phpcsFile->fixer->endChangeset();
        }

    }
Processes this test, when one of its tokens is encountered.

@param PHP_CodeSniffer_File $phpcsFile The file being scanned.
@param int                  $stackPtr  The position of the current token
in the stack passed in $tokens.

@return void