wishthis/vendor/phpcsstandards/phpcsutils/PHPCSUtils/BackCompat/Helper.php

198 lines
5.9 KiB
PHP
Raw Normal View History

2023-09-19 17:26:46 +00:00
<?php
/**
* PHPCSUtils, utility functions and classes for PHP_CodeSniffer sniff developers.
*
* @package PHPCSUtils
* @copyright 2019-2020 PHPCSUtils Contributors
* @license https://opensource.org/licenses/LGPL-3.0 LGPL3
* @link https://github.com/PHPCSStandards/PHPCSUtils
*/
namespace PHPCSUtils\BackCompat;
use PHP_CodeSniffer\Config;
use PHP_CodeSniffer\Exceptions\RuntimeException;
use PHP_CodeSniffer\Files\File;
/**
* Utility methods to retrieve (configuration) information from PHP_CodeSniffer.
*
* PHP_CodeSniffer cross-version compatibility helper.
*
* @since 1.0.0 The initial methods in this class have been ported over from
* the external PHPCompatibility & WPCS standards.
*/
final class Helper
{
/**
* The default tab width used by PHP_CodeSniffer.
*
* @since 1.0.0
*
* @var int
*/
const DEFAULT_TABWIDTH = 4;
/**
* Get the PHP_CodeSniffer version number.
*
* @since 1.0.0
*
* @return string
*/
public static function getVersion()
{
return Config::VERSION;
}
/**
* Pass config data to PHP_CodeSniffer.
*
* @since 1.0.0
*
* @param string $key The name of the config value.
* @param string|null $value The value to set. If `null`, the config entry
* is deleted, reverting it to the default value.
* @param bool $temp Set this config data temporarily for this script run.
* This will not write the config data to the config file.
* @param \PHP_CodeSniffer\Config $config The PHPCS config object.
* This parameter is required for PHPCS 4.x, optional
* for PHPCS 3.x and not possible to pass for PHPCS 2.x.
* Passing the `$phpcsFile->config` property should work
* in PHPCS 3.x and higher.
*
* @return bool Whether the setting of the data was successfull.
*/
public static function setConfigData($key, $value, $temp = false, $config = null)
{
if (isset($config) === true) {
// PHPCS 3.x and 4.x.
return $config->setConfigData($key, $value, $temp);
}
if (\version_compare(self::getVersion(), '3.99.99', '>') === true) {
throw new RuntimeException('Passing the $config parameter is required in PHPCS 4.x');
}
// PHPCS 3.x.
return Config::setConfigData($key, $value, $temp);
}
/**
* Get the value of a single PHP_CodeSniffer config key.
*
* @see Helper::getCommandLineData() Alternative for the same which is more reliable
* if the `$phpcsFile` object is available.
*
* @since 1.0.0
*
* @param string $key The name of the config value.
*
* @return string|null
*/
public static function getConfigData($key)
{
return Config::getConfigData($key);
}
/**
* Get the value of a CLI overrulable single PHP_CodeSniffer config key.
*
* Use this for config keys which can be set in the `CodeSniffer.conf` file,
* on the command-line or in a ruleset.
*
* @since 1.0.0
*
* @param \PHP_CodeSniffer\Files\File $phpcsFile The file being processed.
* @param string $key The name of the config value.
*
* @return string|null
*/
public static function getCommandLineData(File $phpcsFile, $key)
{
if (isset($phpcsFile->config->{$key})) {
return $phpcsFile->config->{$key};
}
return null;
}
/**
* Get the applicable tab width as passed to PHP_CodeSniffer from the
* command-line or the ruleset.
*
* @since 1.0.0
*
* @param \PHP_CodeSniffer\Files\File $phpcsFile The file being processed.
*
* @return int Tab width. Defaults to the PHPCS native default of 4.
*/
public static function getTabWidth(File $phpcsFile)
{
$tabWidth = self::getCommandLineData($phpcsFile, 'tabWidth');
if ($tabWidth > 0) {
return (int) $tabWidth;
}
return self::DEFAULT_TABWIDTH;
}
/**
* Get the applicable (file) encoding as passed to PHP_CodeSniffer from the
* command-line or the ruleset.
*
* @since 1.0.0
*
* @param \PHP_CodeSniffer\Files\File|null $phpcsFile Optional. The current file being processed.
*
* @return string Encoding. Defaults to the PHPCS native default, which is 'utf-8'
* for PHPCS 3.x.
*/
public static function getEncoding(File $phpcsFile = null)
{
$default = 'utf-8';
if ($phpcsFile instanceof File) {
// Most reliable.
$encoding = self::getCommandLineData($phpcsFile, 'encoding');
if ($encoding === null) {
$encoding = $default;
}
return $encoding;
}
// Less reliable.
$encoding = self::getConfigData('encoding');
if ($encoding === null) {
$encoding = $default;
}
return $encoding;
}
/**
* Check whether the "--ignore-annotations" option is in effect.
*
* @since 1.0.0
*
* @param \PHP_CodeSniffer\Files\File|null $phpcsFile Optional. The current file being processed.
*
* @return bool `TRUE` if annotations should be ignored, `FALSE` otherwise.
*/
public static function ignoreAnnotations(File $phpcsFile = null)
{
if (isset($phpcsFile, $phpcsFile->config->annotations)) {
return ! $phpcsFile->config->annotations;
}
$annotations = Config::getConfigData('annotations');
if (isset($annotations)) {
return ! $annotations;
}
return false;
}
}