PHPstan analysis.

This commit is contained in:
Jens True 2023-05-26 13:04:15 +00:00
parent acd209b351
commit 4c8f71d9d8
8 changed files with 264 additions and 55 deletions

@ -3,7 +3,8 @@
"symfony/console": "^5.4", "symfony/console": "^5.4",
"symfony/yaml": "^5.4", "symfony/yaml": "^5.4",
"twig/twig": "^3.6", "twig/twig": "^3.6",
"symfony/process": "^5.4" "symfony/process": "^5.4",
"monolog/monolog": "^2.9"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
@ -11,6 +12,7 @@
} }
}, },
"require-dev": { "require-dev": {
"squizlabs/php_codesniffer": "*" "squizlabs/php_codesniffer": "*",
"phpstan/phpstan": "^1.10"
} }
} }

274
composer.lock generated

@ -4,8 +4,110 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "d3057be657b112629e5a71cc9d06ebed", "content-hash": "c0867492125ff49535b74116a2803d90",
"packages": [ "packages": [
{
"name": "monolog/monolog",
"version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
"reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
"shasum": ""
},
"require": {
"php": ">=7.2",
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"provide": {
"psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
"graylog2/gelf-php": "^1.4.2 || ^2@dev",
"guzzlehttp/guzzle": "^7.4",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
"phpspec/prophecy": "^1.15",
"phpstan/phpstan": "^0.12.91",
"phpunit/phpunit": "^8.5.14",
"predis/predis": "^1.1 || ^2.0",
"rollbar/rollbar": "^1.3 || ^2 || ^3",
"ruflin/elastica": "^7",
"swiftmailer/swiftmailer": "^5.3|^6.0",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
"ext-mbstring": "Allow to work properly with unicode symbols",
"ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
"ext-openssl": "Required to send log messages using SSL",
"ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "https://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "https://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
"source": "https://github.com/Seldaek/monolog/tree/2.9.1"
},
"funding": [
{
"url": "https://github.com/Seldaek",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
"type": "tidelift"
}
],
"time": "2023-02-06T13:44:46+00:00"
},
{ {
"name": "psr/container", "name": "psr/container",
"version": "1.1.2", "version": "1.1.2",
@ -54,6 +156,56 @@
}, },
"time": "2021-11-05T16:50:12+00:00" "time": "2021-11-05T16:50:12+00:00"
}, },
{
"name": "psr/log",
"version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00"
},
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v5.4.23", "version": "v5.4.23",
@ -1092,56 +1244,101 @@
], ],
"packages-dev": [ "packages-dev": [
{ {
"name": "squizlabs/php_codesniffer", "name": "phpstan/phpstan",
"version": "2.2.0", "version": "1.10.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "b301c98f19414d836fdaa678648745fcca5aeb4f" "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b301c98f19414d836fdaa678648745fcca5aeb4f", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/762c4dac4da6f8756eebb80e528c3a47855da9bd",
"reference": "b301c98f19414d836fdaa678648745fcca5aeb4f", "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-tokenizer": "*", "php": "^7.2|^8.0"
"php": ">=5.1.2" },
"conflict": {
"phpstan/phpstan-shim": "*"
}, },
"bin": [ "bin": [
"scripts/phpcs", "phpstan",
"scripts/phpcbf" "phpstan.phar"
], ],
"type": "library", "type": "library",
"autoload": { "autoload": {
"classmap": [ "files": [
"CodeSniffer.php", "bootstrap.php"
"CodeSniffer/CLI.php",
"CodeSniffer/Exception.php",
"CodeSniffer/File.php",
"CodeSniffer/Fixer.php",
"CodeSniffer/Report.php",
"CodeSniffer/Reporting.php",
"CodeSniffer/Sniff.php",
"CodeSniffer/Tokens.php",
"CodeSniffer/Reports/",
"CodeSniffer/Tokenizers/",
"CodeSniffer/DocGenerators/",
"CodeSniffer/Standards/AbstractPatternSniff.php",
"CodeSniffer/Standards/AbstractScopeSniff.php",
"CodeSniffer/Standards/AbstractVariableSniff.php",
"CodeSniffer/Standards/IncorrectPatternException.php",
"CodeSniffer/Standards/Generic/Sniffs/",
"CodeSniffer/Standards/MySource/Sniffs/",
"CodeSniffer/Standards/PEAR/Sniffs/",
"CodeSniffer/Standards/PSR1/Sniffs/",
"CodeSniffer/Standards/PSR2/Sniffs/",
"CodeSniffer/Standards/Squiz/Sniffs/",
"CodeSniffer/Standards/Zend/Sniffs/"
] ]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"docs": "https://phpstan.org/user-guide/getting-started",
"forum": "https://github.com/phpstan/phpstan/discussions",
"issues": "https://github.com/phpstan/phpstan/issues",
"security": "https://github.com/phpstan/phpstan/security/policy",
"source": "https://github.com/phpstan/phpstan-src"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
"time": "2023-05-09T15:28:01+00:00"
},
{
"name": "squizlabs/php_codesniffer",
"version": "3.7.2",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879",
"reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"bin": [
"bin/phpcs",
"bin/phpcbf"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"BSD-3-Clause" "BSD-3-Clause"
], ],
@ -1152,17 +1349,18 @@
} }
], ],
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
"homepage": "http://www.squizlabs.com/php-codesniffer", "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
"keywords": [ "keywords": [
"phpcs", "phpcs",
"standards" "standards",
"static analysis"
], ],
"support": { "support": {
"issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
"source": "https://github.com/squizlabs/PHP_CodeSniffer", "source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
}, },
"time": "2015-01-21T22:44:05+00:00" "time": "2023-02-22T23:07:41+00:00"
} }
], ],
"aliases": [], "aliases": [],

@ -3,7 +3,7 @@ notification:
topic: backup topic: backup
backup: backup:
- title: Example - title: Example
source: test/srcdasasda source: test/src
destination: test/dest destination: test/dest
templates: templates:
notify: | notify: |

@ -28,6 +28,7 @@ class CommandBackup extends Command
$config = Yaml::parseFile($input->getArgument('config')); $config = Yaml::parseFile($input->getArgument('config'));
} catch (ParseException $e) { } catch (ParseException $e) {
$output->writeln('Unable to parse the YAML string: '. $e->getMessage()); $output->writeln('Unable to parse the YAML string: '. $e->getMessage());
return Command::FAILURE;
} }
$rclone = new Rclone\Rclone(); $rclone = new Rclone\Rclone();

@ -27,6 +27,7 @@ class CommandShow extends Command
$config = Yaml::parseFile($input->getArgument('config')); $config = Yaml::parseFile($input->getArgument('config'));
} catch (ParseException $e) { } catch (ParseException $e) {
$output->writeln('Unable to parse the YAML string: '. $e->getMessage()); $output->writeln('Unable to parse the YAML string: '. $e->getMessage());
return Command::FAILURE;
} }
$table = new Table($output); $table = new Table($output);
$table $table

@ -3,19 +3,18 @@ namespace App\Ntfy;
class Ntfy class Ntfy
{ {
protected $domain; protected string $domain;
function __construct($domain) function __construct(string $domain)
{ {
$this->domain = $domain; $this->domain = $domain;
} }
function send($topic,$title, $message) function send(string $topic, string $title, string $message): void
{ {
file_get_contents( file_get_contents(
'https://'.$this->domain.'/'.$topic, false, stream_context_create( 'https://'.$this->domain.'/'.$topic, false, stream_context_create(
['http' => [ ['http' => [
'method' => 'POST', 'method' => 'POST',
'header' => 'Content-Type: text/plain',
'header' => 'header' =>
"Content-Type: text/plain\r\n" . "Content-Type: text/plain\r\n" .
"Title: $title\r\n", "Title: $title\r\n",

@ -6,27 +6,31 @@ use Symfony\Component\Process\Exception\ProcessFailedException;
class Rclone class Rclone
{ {
protected $rclone_path; protected string $rclone_path;
protected $global_options = []; /**
* Global options
*
* @var array<string>
*/
protected array $global_options = [];
function __construct($rclone_path = "rclone") function __construct(string $rclone_path = "rclone")
{ {
$this->rclone_path = $rclone_path; $this->rclone_path = $rclone_path;
} }
function getVersion() function getVersion(): string
{ {
return $this->exec('--version'); return $this->exec('--version');
} }
function getSize($path) function getSize(string $path): int
{ {
$output = $this->exec('size', ['--json', $path]); $output = $this->exec('size', ['--json', $path]);
return (int)json_decode($output)->bytes;
return (int)json_decode($output[0])->bytes;
} }
function copy($src, $dest, $bandwidth = null) function copy(string $src, string $dest, string $bandwidth = null): string
{ {
$options = array(); $options = array();
@ -40,7 +44,11 @@ class Rclone
return $this->exec('copy', $options); return $this->exec('copy', $options);
} }
protected function exec(string $command, array $options = array()) /**
* @param $command Top level Rclone command
* @param array<String> $options
*/
protected function exec(string $command, array $options = array()) : string
{ {
$process = new Process( $process = new Process(
array_merge( array_merge(

@ -24,7 +24,7 @@ class AppExtension extends AbstractExtension
public function formatBytes($bytes, $precision = 2) public function formatBytes($bytes, $precision = 2)
{ {
$size = ['B','kB','MB','GB','TB','PB','EB','ZB','YB']; $size = ['B','kB','MB','GB','TB','PB','EB','ZB','YB'];
$fact = floor((strlen($bytes) - 1) / 3); $fact = floor((strlen((string)$bytes) - 1) / 3);
return sprintf("%.{$precision}f", $bytes / pow(1024, $fact)) . $size[$fact]; return sprintf("%.{$precision}f", $bytes / pow(1024, $fact)) . $size[$fact];
} }