Skip to content

Commit

Permalink
Keep phpstan strict rules testing (#9424)
Browse files Browse the repository at this point in the history
* Revert "Get rid of phpstan/phpstan-strict-rules"

This reverts commit ff59ade.

* drop phpstan baseline

* fix foreach phpstan issue

* adjust for rebase

* fix method call case

* ignore one phpstan error even after isset
  • Loading branch information
mvorisek authored Nov 20, 2024
1 parent 3b6eebc commit efcdce8
Show file tree
Hide file tree
Showing 15 changed files with 36 additions and 12 deletions.
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

0 comments on commit efcdce8

Please sign in to comment.