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

Breadcrumb

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

class Common

Same name in this branch
  1. 11.1.x vendor/open-telemetry/gen-otlp-protobuf/GPBMetadata/Opentelemetry/Proto/Common/V1/Common.php \GPBMetadata\Opentelemetry\Proto\Common\V1\Common

Hierarchy

  • class \PHP_CodeSniffer\Util\Common

Expanded class hierarchy of Common

41 files declare their use of Common
CamelCapsFunctionNameSniff.php in vendor/squizlabs/php_codesniffer/src/Standards/Generic/Sniffs/NamingConventions/CamelCapsFunctionNameSniff.php
CamelCapsMethodNameSniff.php in vendor/squizlabs/php_codesniffer/src/Standards/PSR1/Sniffs/Methods/CamelCapsMethodNameSniff.php
ClosureLinterSniff.php in vendor/squizlabs/php_codesniffer/src/Standards/Generic/Sniffs/Debug/ClosureLinterSniff.php
Code.php in vendor/squizlabs/php_codesniffer/src/Reports/Code.php
CodeAnalyzerSniff.php in vendor/squizlabs/php_codesniffer/src/Standards/Zend/Sniffs/Debug/CodeAnalyzerSniff.php

... See full list

1 string reference to 'Common'
CoreExtension::round in vendor/twig/twig/src/Extension/CoreExtension.php
Rounds a number.

File

vendor/squizlabs/php_codesniffer/src/Util/Common.php, line 15

Namespace

PHP_CodeSniffer\Util
View source
class Common {
    
    /**
     * An array of variable types for param/var we will check.
     *
     * @var string[]
     */
    public static $allowedTypes = [
        'array',
        'boolean',
        'float',
        'integer',
        'mixed',
        'object',
        'string',
        'resource',
        'callable',
    ];
    
    /**
     * Return TRUE if the path is a PHAR file.
     *
     * @param string $path The path to use.
     *
     * @return bool
     */
    public static function isPharFile($path) {
        if (strpos($path, 'phar://') === 0) {
            return true;
        }
        return false;
    }
    
    //end isPharFile()
    
    /**
     * Checks if a file is readable.
     *
     * Addresses PHP bug related to reading files from network drives on Windows.
     * e.g. when using WSL2.
     *
     * @param string $path The path to the file.
     *
     * @return boolean
     */
    public static function isReadable($path) {
        if (@is_readable($path) === true) {
            return true;
        }
        if (@file_exists($path) === true && @is_file($path) === true) {
            $f = @fopen($path, 'rb');
            if (fclose($f) === true) {
                return true;
            }
        }
        return false;
    }
    
    //end isReadable()
    
    /**
     * CodeSniffer alternative for realpath.
     *
     * Allows for PHAR support.
     *
     * @param string $path The path to use.
     *
     * @return string|false
     */
    public static function realpath($path) {
        // Support the path replacement of ~ with the user's home directory.
        if (substr($path, 0, 2) === '~/') {
            $homeDir = getenv('HOME');
            if ($homeDir !== false) {
                $path = $homeDir . substr($path, 1);
            }
        }
        // Check for process substitution.
        if (strpos($path, '/dev/fd') === 0) {
            return str_replace('/dev/fd', 'php://fd', $path);
        }
        // No extra work needed if this is not a phar file.
        if (self::isPharFile($path) === false) {
            return realpath($path);
        }
        // Before trying to break down the file path,
        // check if it exists first because it will mostly not
        // change after running the below code.
        if (file_exists($path) === true) {
            return $path;
        }
        $phar = Phar::running(false);
        $extra = str_replace('phar://' . $phar, '', $path);
        $path = realpath($phar);
        if ($path === false) {
            return false;
        }
        $path = 'phar://' . $path . $extra;
        if (file_exists($path) === true) {
            return $path;
        }
        return false;
    }
    
    //end realpath()
    
    /**
     * Removes a base path from the front of a file path.
     *
     * @param string $path     The path of the file.
     * @param string $basepath The base path to remove. This should not end
     *                         with a directory separator.
     *
     * @return string
     */
    public static function stripBasepath($path, $basepath) {
        if (empty($basepath) === true) {
            return $path;
        }
        $basepathLen = strlen($basepath);
        if (substr($path, 0, $basepathLen) === $basepath) {
            $path = substr($path, $basepathLen);
        }
        $path = ltrim($path, DIRECTORY_SEPARATOR);
        if ($path === '') {
            $path = '.';
        }
        return $path;
    }
    
    //end stripBasepath()
    
    /**
     * Detects the EOL character being used in a string.
     *
     * @param string $contents The contents to check.
     *
     * @return string
     */
    public static function detectLineEndings($contents) {
        if (preg_match("/\r\n?|\n/", $contents, $matches) !== 1) {
            // Assume there are no newlines.
            $eolChar = "\n";
        }
        else {
            $eolChar = $matches[0];
        }
        return $eolChar;
    }
    
    //end detectLineEndings()
    
    /**
     * Check if STDIN is a TTY.
     *
     * @return boolean
     */
    public static function isStdinATTY() {
        // The check is slow (especially calling `tty`) so we static
        // cache the result.
        static $isTTY = null;
        if ($isTTY !== null) {
            return $isTTY;
        }
        if (defined('STDIN') === false) {
            return false;
        }
        // If PHP has the POSIX extensions we will use them.
        if (function_exists('posix_isatty') === true) {
            $isTTY = posix_isatty(STDIN) === true;
            return $isTTY;
        }
        // Next try is detecting whether we have `tty` installed and use that.
        if (defined('PHP_WINDOWS_VERSION_PLATFORM') === true) {
            $devnull = 'NUL';
            $which = 'where';
        }
        else {
            $devnull = '/dev/null';
            $which = 'which';
        }
        $tty = trim(shell_exec("{$which} tty 2> {$devnull}"));
        if (empty($tty) === false) {
            exec("tty -s 2> {$devnull}", $output, $returnValue);
            $isTTY = $returnValue === 0;
            return $isTTY;
        }
        // Finally we will use fstat.  The solution borrowed from
        // https://stackoverflow.com/questions/11327367/detect-if-a-php-script-is-being-run-interactively-or-not
        // This doesn't work on Mingw/Cygwin/... using Mintty but they
        // have `tty` installed.
        $type = [
            'S_IFMT' => 0170000,
            'S_IFIFO' => 010000,
        ];
        $stat = fstat(STDIN);
        $mode = $stat['mode'] & $type['S_IFMT'];
        $isTTY = $mode !== $type['S_IFIFO'];
        return $isTTY;
    }
    
    //end isStdinATTY()
    
    /**
     * Escape a path to a system command.
     *
     * @param string $cmd The path to the system command.
     *
     * @return string
     */
    public static function escapeshellcmd($cmd) {
        $cmd = escapeshellcmd($cmd);
        if (stripos(PHP_OS, 'WIN') === 0) {
            // Spaces are not escaped by escapeshellcmd on Windows, but need to be
            // for the command to be able to execute.
            $cmd = preg_replace('`(?<!^) `', '^ ', $cmd);
        }
        return $cmd;
    }
    
    //end escapeshellcmd()
    
    /**
     * Prepares token content for output to screen.
     *
     * Replaces invisible characters so they are visible. On non-Windows
     * operating systems it will also colour the invisible characters.
     *
     * @param string   $content The content to prepare.
     * @param string[] $exclude A list of characters to leave invisible.
     *                          Can contain \r, \n, \t and a space.
     *
     * @return string
     */
    public static function prepareForOutput($content, $exclude = []) {
        if (stripos(PHP_OS, 'WIN') === 0) {
            if (in_array("\r", $exclude, true) === false) {
                $content = str_replace("\r", '\\r', $content);
            }
            if (in_array("\n", $exclude, true) === false) {
                $content = str_replace("\n", '\\n', $content);
            }
            if (in_array("\t", $exclude, true) === false) {
                $content = str_replace("\t", '\\t', $content);
            }
        }
        else {
            if (in_array("\r", $exclude, true) === false) {
                $content = str_replace("\r", "\x1b[30;1m\\r\x1b[0m", $content);
            }
            if (in_array("\n", $exclude, true) === false) {
                $content = str_replace("\n", "\x1b[30;1m\\n\x1b[0m", $content);
            }
            if (in_array("\t", $exclude, true) === false) {
                $content = str_replace("\t", "\x1b[30;1m\\t\x1b[0m", $content);
            }
            if (in_array(' ', $exclude, true) === false) {
                $content = str_replace(' ', "\x1b[30;1m·\x1b[0m", $content);
            }
        }
        
        //end if
        return $content;
    }
    
    //end prepareForOutput()
    
    /**
     * Strip colors from a text for output to screen.
     *
     * @param string $text The text to process.
     *
     * @return string
     */
    public static function stripColors($text) {
        return preg_replace('`\\033\\[[0-9;]+m`', '', $text);
    }
    
    //end stripColors()
    
    /**
     * Returns true if the specified string is in the camel caps format.
     *
     * @param string  $string      The string the verify.
     * @param boolean $classFormat If true, check to see if the string is in the
     *                             class format. Class format strings must start
     *                             with a capital letter and contain no
     *                             underscores.
     * @param boolean $public      If true, the first character in the string
     *                             must be an a-z character. If false, the
     *                             character must be an underscore. This
     *                             argument is only applicable if $classFormat
     *                             is false.
     * @param boolean $strict      If true, the string must not have two capital
     *                             letters next to each other. If false, a
     *                             relaxed camel caps policy is used to allow
     *                             for acronyms.
     *
     * @return boolean
     */
    public static function isCamelCaps($string, $classFormat = false, $public = true, $strict = true) {
        // Check the first character first.
        if ($classFormat === false) {
            $legalFirstChar = '';
            if ($public === false) {
                $legalFirstChar = '[_]';
            }
            if ($strict === false) {
                // Can either start with a lowercase letter, or multiple uppercase
                // in a row, representing an acronym.
                $legalFirstChar .= '([A-Z]{2,}|[a-z])';
            }
            else {
                $legalFirstChar .= '[a-z]';
            }
        }
        else {
            $legalFirstChar = '[A-Z]';
        }
        if (preg_match("/^{$legalFirstChar}/", $string) === 0) {
            return false;
        }
        // Check that the name only contains legal characters.
        $legalChars = 'a-zA-Z0-9';
        if (preg_match("|[^{$legalChars}]|", substr($string, 1)) > 0) {
            return false;
        }
        if ($strict === true) {
            // Check that there are not two capital letters next to each other.
            $length = strlen($string);
            $lastCharWasCaps = $classFormat;
            for ($i = 1; $i < $length; $i++) {
                $ascii = ord($string[$i]);
                if ($ascii >= 48 && $ascii <= 57) {
                    // The character is a number, so it can't be a capital.
                    $isCaps = false;
                }
                else {
                    if (strtoupper($string[$i]) === $string[$i]) {
                        $isCaps = true;
                    }
                    else {
                        $isCaps = false;
                    }
                }
                if ($isCaps === true && $lastCharWasCaps === true) {
                    return false;
                }
                $lastCharWasCaps = $isCaps;
            }
        }
        
        //end if
        return true;
    }
    
    //end isCamelCaps()
    
    /**
     * Returns true if the specified string is in the underscore caps format.
     *
     * @param string $string The string to verify.
     *
     * @return boolean
     */
    public static function isUnderscoreName($string) {
        // If there is whitespace in the name, it can't be valid.
        if (strpos($string, ' ') !== false) {
            return false;
        }
        $validName = true;
        $nameBits = explode('_', $string);
        if (preg_match('|^[A-Z]|', $string) === 0) {
            // Name does not begin with a capital letter.
            $validName = false;
        }
        else {
            foreach ($nameBits as $bit) {
                if ($bit === '') {
                    continue;
                }
                if ($bit[0] !== strtoupper($bit[0])) {
                    $validName = false;
                    break;
                }
            }
        }
        return $validName;
    }
    
    //end isUnderscoreName()
    
    /**
     * Returns a valid variable type for param/var tags.
     *
     * If type is not one of the standard types, it must be a custom type.
     * Returns the correct type name suggestion if type name is invalid.
     *
     * @param string $varType The variable type to process.
     *
     * @return string
     */
    public static function suggestType($varType) {
        if ($varType === '') {
            return '';
        }
        if (in_array($varType, self::$allowedTypes, true) === true) {
            return $varType;
        }
        else {
            $lowerVarType = strtolower($varType);
            switch ($lowerVarType) {
                case 'bool':
                case 'boolean':
                    return 'boolean';
                case 'double':
                case 'real':
                case 'float':
                    return 'float';
                case 'int':
                case 'integer':
                    return 'integer';
                case 'array()':
                case 'array':
                    return 'array';
            }
            
            //end switch
            if (strpos($lowerVarType, 'array(') !== false) {
                // Valid array declaration:
                // array, array(type), array(type1 => type2).
                $matches = [];
                $pattern = '/^array\\(\\s*([^\\s^=^>]*)(\\s*=>\\s*(.*))?\\s*\\)/i';
                if (preg_match($pattern, $varType, $matches) !== 0) {
                    $type1 = '';
                    if (isset($matches[1]) === true) {
                        $type1 = $matches[1];
                    }
                    $type2 = '';
                    if (isset($matches[3]) === true) {
                        $type2 = $matches[3];
                    }
                    $type1 = self::suggestType($type1);
                    $type2 = self::suggestType($type2);
                    if ($type2 !== '') {
                        $type2 = ' => ' . $type2;
                    }
                    return "array({$type1}{$type2})";
                }
                else {
                    return 'array';
                }
                
                //end if
            }
            else {
                if (in_array($lowerVarType, self::$allowedTypes, true) === true) {
                    // A valid type, but not lower cased.
                    return $lowerVarType;
                }
                else {
                    // Must be a custom type name.
                    return $varType;
                }
            }
            
            //end if
        }
        
        //end if
    }
    
    //end suggestType()
    
    /**
     * Given a sniff class name, returns the code for the sniff.
     *
     * @param string $sniffClass The fully qualified sniff class name.
     *
     * @return string
     *
     * @throws \InvalidArgumentException When $sniffClass is not a non-empty string.
     * @throws \InvalidArgumentException When $sniffClass is not a FQN for a sniff(test) class.
     */
    public static function getSniffCode($sniffClass) {
        if (is_string($sniffClass) === false || $sniffClass === '') {
            throw new InvalidArgumentException('The $sniffClass parameter must be a non-empty string');
        }
        $parts = explode('\\', $sniffClass);
        $partsCount = count($parts);
        $sniff = $parts[$partsCount - 1];
        if (substr($sniff, -5) === 'Sniff') {
            // Sniff class name.
            $sniff = substr($sniff, 0, -5);
        }
        else {
            if (substr($sniff, -8) === 'UnitTest') {
                // Unit test class name.
                $sniff = substr($sniff, 0, -8);
            }
            else {
                throw new InvalidArgumentException('The $sniffClass parameter was not passed a fully qualified sniff(test) class name. Received: ' . $sniffClass);
            }
        }
        $standard = '';
        if (isset($parts[$partsCount - 4]) === true) {
            $standard = $parts[$partsCount - 4];
        }
        $category = '';
        if (isset($parts[$partsCount - 2]) === true) {
            $category = $parts[$partsCount - 2];
        }
        return $standard . '.' . $category . '.' . $sniff;
    }
    
    //end getSniffCode()
    
    /**
     * Removes project-specific information from a sniff class name.
     *
     * @param string $sniffClass The fully qualified sniff class name.
     *
     * @return string
     */
    public static function cleanSniffClass($sniffClass) {
        $newName = strtolower($sniffClass);
        $sniffPos = strrpos($newName, '\\sniffs\\');
        if ($sniffPos === false) {
            // Nothing we can do as it isn't in a known format.
            return $newName;
        }
        $end = strlen($newName) - $sniffPos + 1;
        $start = strrpos($newName, '\\', $end * -1);
        if ($start === false) {
            // Nothing needs to be cleaned.
            return $newName;
        }
        $newName = substr($newName, $start + 1);
        return $newName;
    }
    
    //end cleanSniffClass()

}

Members

Title Sort descending Modifiers Object type Summary
Common::$allowedTypes public static property An array of variable types for param/var we will check.
Common::cleanSniffClass public static function Removes project-specific information from a sniff class name.
Common::detectLineEndings public static function Detects the EOL character being used in a string.
Common::escapeshellcmd public static function Escape a path to a system command.
Common::getSniffCode public static function Given a sniff class name, returns the code for the sniff.
Common::isCamelCaps public static function Returns true if the specified string is in the camel caps format.
Common::isPharFile public static function Return TRUE if the path is a PHAR file.
Common::isReadable public static function Checks if a file is readable.
Common::isStdinATTY public static function Check if STDIN is a TTY.
Common::isUnderscoreName public static function Returns true if the specified string is in the underscore caps format.
Common::prepareForOutput public static function Prepares token content for output to screen.
Common::realpath public static function CodeSniffer alternative for realpath.
Common::stripBasepath public static function Removes a base path from the front of a file path.
Common::stripColors public static function Strip colors from a text for output to screen.
Common::suggestType public static function Returns a valid variable type for param/var tags.
RSS feed
Powered by Drupal