Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keep phpstan strict rules testing #9424

Merged
merged 6 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,4 @@ jobs:
run: |
rm -r public_html # remove once https://github.com/phpstan/phpstan/issues/10321 is fixed
mkdir node_modules # remove once https://github.com/phpstan/phpstan/issues/11436 is fixed
vendor/bin/phpstan analyse
vendor/bin/phpstan analyse -v
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.2",
"phpstan/phpstan-deprecation-rules": "^1.2",
"phpstan/phpstan-strict-rules": "^1.3",
"phpunit/phpunit": "^9.6.20 || ^10.0 || ^11.0",
"roundcube/acl": "*",
"roundcube/additional_message_headers": "*",
Expand Down
20 changes: 20 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,26 @@ parameters:
- vendor

ignoreErrors:
# relax strict rules
- '~^Only booleans are allowed in .+, .+ given( on the (left|right) side)?\.~'
- '~^Variable (static )?(property access|method call) on .+\.~'
- '~^Variable variables are not allowed.~'
- '~^Variable .* might not be defined\.~'
- '~Call to function array_filter\(\) requires parameter #2 to be passed to avoid loose comparison semantics.~'
# TODO
- '~^Dynamic call to static method .+\.~' # TODO in https://github.com/roundcube/roundcubemail/pull/9314
- '~^Construct empty\(\) is not allowed\. Use more strict comparison\.~'
- '~^Loose comparison via "[=!]=" is not allowed\.~'
- '~^Casting to .+ something that''s already .+\.~'
- '~^Short ternary operator is not allowed\. Use null coalesce operator if applicable or consider using long ternary\.~'
- '~^Call to function (array_search|in_array)\(\) requires parameter #3 to be set\.~'
- '~^Call to function base64_decode\(\) requires parameter #2 to be (set|true).~'

-
message: '~^Parameter #1 \$browser \(Roundcube\\Tests\\Browser\\Browser\) of method Roundcube\\Tests\\Browser\\Components\\\w+::assert\(\) should be contravariant with parameter \$browser \(Laravel\\Dusk\\Browser\) of method Laravel\\Dusk\\Component::assert\(\)$~'
count: 7
path: tests/Browser/Components/*.php

# https://github.com/php/pecl-authentication-krb5
-
path: 'program/lib/Roundcube/rcube_imap_generic.php'
Expand Down
4 changes: 2 additions & 2 deletions plugins/managesieve/managesieve.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ public function init()
$this->register_action('plugin.managesieve-save', [$this, 'managesieve_save']);
$this->register_action('plugin.managesieve-saveraw', [$this, 'managesieve_saveraw']);

$task = $this->rc->task ?? null;
$action = $this->rc->action ?? null;
$task = $this->rc->task ?? null; // @phpstan-ignore-line
$action = $this->rc->action ?? null; // @phpstan-ignore-line

if ($task == 'settings') {
$this->add_hook('settings_actions', [$this, 'settings_actions']);
Expand Down
1 change: 1 addition & 0 deletions program/actions/contacts/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public function run($args = [])
foreach ($cids as $source => $cid) {
$CONTACTS = self::contact_source($source);

// @phpstan-ignore-next-line
if ($CONTACTS->readonly && empty($CONTACTS->deletable)) {
// more sources? do nothing, probably we have search results from
// more than one source, some of these sources can be readonly
Expand Down
1 change: 1 addition & 0 deletions program/actions/contacts/move.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public function run($args = [])
break;
}

// @phpstan-ignore-next-line
if (!$CONTACTS || !$CONTACTS->ready || ($CONTACTS->readonly && empty($CONTACTS->deletable))) {
continue;
}
Expand Down
1 change: 1 addition & 0 deletions program/actions/contacts/save.php
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ public static function process_input()

foreach ($subtypes as $i => $subtype) {
$suffix = $subtype ? ":{$subtype}" : '';
// @phpstan-ignore-next-line
if (!empty($values[$i])) {
$record[$col . $suffix][] = $values[$i];
}
Expand Down
2 changes: 1 addition & 1 deletion program/actions/mail/compose.php
Original file line number Diff line number Diff line change
Expand Up @@ -1639,7 +1639,7 @@ public static function save_attachment($message, $pid, $compose_id, $params = []
$filename = !empty($params['filename']) ? $params['filename'] : self::attachment_name($part);
} elseif ($message instanceof rcube_message) {
// the whole message requested
$size = $message->size ?? null;
$size = $message->size ?? null; // @phpstan-ignore-line
$mimetype = 'message/rfc822';
$filename = !empty($params['filename']) ? $params['filename'] : 'message_rfc822.eml';
} elseif (is_string($message)) {
Expand Down
2 changes: 1 addition & 1 deletion program/include/rcmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class rcmail extends rcube
public $oauth;

/** @var rcmail_output_cli|rcmail_output_html|rcmail_output_json|null Output handler */
public $output;
public $output; // @phpstan-ignore-line

private $address_books = [];
private $action_args = [];
Expand Down
1 change: 1 addition & 0 deletions program/include/rcmail_sendmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ public function deliver_message($message, $disconnect = true)
return false;
}

// @phpstan-ignore-next-line
if ($mailbody_file) {
$this->temp_files[$message->headers()['Message-ID']] = $mailbody_file;
}
Expand Down
6 changes: 3 additions & 3 deletions program/lib/Roundcube/rcube.php
Original file line number Diff line number Diff line change
Expand Up @@ -659,9 +659,9 @@ public function text_exists($name, $domain = null, &$ref_domain = null)

// any of loaded domains (plugins)
if ($domain == '*') {
foreach ($this->plugins->loaded_plugins() as $domain) {
if (isset($this->texts[$domain . '.' . $name])) {
$ref_domain = $domain;
foreach ($this->plugins->loaded_plugins() as $domain2) {
if (isset($this->texts[$domain2 . '.' . $name])) {
$ref_domain = $domain2;
return true;
}
}
Expand Down
1 change: 0 additions & 1 deletion program/lib/Roundcube/rcube_imap.php
Original file line number Diff line number Diff line change
Expand Up @@ -4368,7 +4368,6 @@ public function sort_folder_list($a_folders, $skip_special = false)
}

// Force the type of folder name variable (#1485527)
/** @var array<string|null> $folders */
$folders = array_map('strval', $folders);

$count = count($folders);
Expand Down
2 changes: 1 addition & 1 deletion program/lib/Roundcube/rcube_washtml.php
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ private function dumpHtml($node, $level = 20)
}

foreach ($ns_nodes as $ns) {
if (isset($ns->nodeName) && isset($ns->nodeValue)
if (isset($ns->nodeName) && isset($ns->nodeValue) // @phpstan-ignore property.notFound
&& $ns->nodeName != 'xmlns:xml'
&& preg_match('/^[a-zA-Z:-]+$/', $ns->nodeName)
&& strpos($ns->nodeValue, '://')
Expand Down
2 changes: 1 addition & 1 deletion tests/Actions/Contacts/QrcodeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public function test_run()

$result = $output->getOutput();

$this->assertCOntains('HTTP/1.0 404 Contact not found', $output->headers);
$this->assertContains('HTTP/1.0 404 Contact not found', $output->headers);
$this->assertSame('', $result);

$type = $action->check_support();
Expand Down
2 changes: 1 addition & 1 deletion tests/Framework/MessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class rcube_message_test extends \rcube_message
{
private $part_bodies = [];

public function __construct($uid, $folder = null, $is_safe = false)
public function __construct($uid, $folder = null, $is_safe = false) // @phpstan-ignore constructor.missingParentCall
{
$this->uid = $uid;
$this->folder = $folder;
Expand Down