Skip to content

Commit

Permalink
tests(phpstan): Add PHPStan to detect problems in sniff code (#3104477)
Browse files Browse the repository at this point in the history
  • Loading branch information
klausi committed Jan 5, 2020
1 parent 37c291f commit f5b6c88
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 22 deletions.
4 changes: 4 additions & 0 deletions .travis.yml
Expand Up @@ -10,6 +10,7 @@ cache:
jobs:
fast_finish: true
include:
# Support PHP 7.0 because that is the minimum requirement of Drupal 8 core.
- php: 7.0
dist: xenial
- php: 7.1
Expand All @@ -20,6 +21,7 @@ jobs:
dist: bionic
- php: 7.4
dist: bionic
env: PHPSTAN=1

before_install:
# Speed up build time by disabling Xdebug when its not needed.
Expand All @@ -40,3 +42,5 @@ script:
# Ensure that the DrupalPractice standard can be invoked standalone and the
# auto-loading of abstract classes works.
- ./vendor/bin/phpcs -p --standard=coder_sniffer/DrupalPractice coder_sniffer/DrupalPractice/Test/good/ --ignore=coder_sniffer/DrupalPractice/Test/good/GoodUnitTest.php
# We cannot add PHPStan to composer.json because it cannot be installed in PHP 7.0.
- if [[ $PHPSTAN == "1" ]]; then composer require --dev phpstan/phpstan && ./vendor/bin/phpstan analyse; fi
Expand Up @@ -41,7 +41,7 @@ public function process(File $phpcsFile, $stackPtr)
return ($phpcsFile->numTokens + 1);
}

return parent::process($phpcsFile, $stackPtr);
parent::process($phpcsFile, $stackPtr);

}//end process()

Expand Down
2 changes: 0 additions & 2 deletions coder_sniffer/Drupal/Sniffs/Commenting/FileCommentSniff.php
Expand Up @@ -64,8 +64,6 @@ public function register()
*/
public function process(File $phpcsFile, $stackPtr)
{
$this->currentFile = $phpcsFile;

$tokens = $phpcsFile->getTokens();
$commentStart = $phpcsFile->findNext(T_WHITESPACE, ($stackPtr + 1), null, true);

Expand Down
18 changes: 0 additions & 18 deletions coder_sniffer/Drupal/Sniffs/Semantics/FunctionAliasSniff.php
Expand Up @@ -94,42 +94,25 @@ class FunctionAliasSniff extends FunctionCall
'msql_selectdb' => 'msql_select_db',
'msql_tablename' => 'msql_result',
'mssql_affected_rows' => 'sybase_affected_rows',
'mssql_affected_rows' => 'sybase_affected_rows',
'mssql_close' => 'sybase_close',
'mssql_close' => 'sybase_close',
'mssql_connect' => 'sybase_connect',
'mssql_connect' => 'sybase_connect',
'mssql_data_seek' => 'sybase_data_seek',
'mssql_data_seek' => 'sybase_data_seek',
'mssql_fetch_array' => 'sybase_fetch_array',
'mssql_fetch_array' => 'sybase_fetch_array',
'mssql_fetch_field' => 'sybase_fetch_field',
'mssql_fetch_field' => 'sybase_fetch_field',
'mssql_fetch_object' => 'sybase_fetch_object',
'mssql_fetch_object' => 'sybase_fetch_object',
'mssql_fetch_row' => 'sybase_fetch_row',
'mssql_fetch_row' => 'sybase_fetch_row',
'mssql_field_seek' => 'sybase_field_seek',
'mssql_field_seek' => 'sybase_field_seek',
'mssql_free_result' => 'sybase_free_result',
'mssql_free_result' => 'sybase_free_result',
'mssql_get_last_message' => 'sybase_get_last_message',
'mssql_get_last_message' => 'sybase_get_last_message',
'mssql_min_client_severity' => 'sybase_min_client_severity',
'mssql_min_error_severity' => 'sybase_min_error_severity',
'mssql_min_message_severity' => 'sybase_min_message_severity',
'mssql_min_server_severity' => 'sybase_min_server_severity',
'mssql_num_fields' => 'sybase_num_fields',
'mssql_num_fields' => 'sybase_num_fields',
'mssql_num_rows' => 'sybase_num_rows',
'mssql_num_rows' => 'sybase_num_rows',
'mssql_pconnect' => 'sybase_pconnect',
'mssql_pconnect' => 'sybase_pconnect',
'mssql_query' => 'sybase_query',
'mssql_query' => 'sybase_query',
'mssql_result' => 'sybase_result',
'mssql_result' => 'sybase_result',
'mssql_select_db' => 'sybase_select_db',
'mssql_select_db' => 'sybase_select_db',
'mysql' => 'mysql_db_query',
'mysql_createdb' => 'mysql_create_db',
Expand All @@ -153,7 +136,6 @@ class FunctionAliasSniff extends FunctionCall
'oci8assign' => 'ocicollassign',
'oci8assignelem' => 'ocicollassignelem',
'oci8close' => 'ocicloselob',
'oci8free' => 'ocifreecoll',
'oci8free' => 'ocifreedesc',
'oci8getelem' => 'ocicollgetelem',
'oci8load' => 'ociloadlob',
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -20,7 +20,7 @@
"symfony/yaml": ">=2.0.5"
},
"autoload": {
"psr-0": {
"psr-4": {
"Drupal\\": "coder_sniffer/Drupal/",
"DrupalPractice\\": "coder_sniffer/DrupalPractice/"
}
Expand Down
28 changes: 28 additions & 0 deletions phpstan.neon
@@ -0,0 +1,28 @@
parameters:
level: 0
paths:
- coder_sniffer/Drupal/Sniffs
autoload_files:
- coder_sniffer/Drupal/Test/phpunit-bootstrap.php
ignoreErrors:
# Already fixed in PHP_CodeSniffer, remove once 3.5.4 is released.
-
count: 3
message: '~^Cannot unset offset~'
path: %currentWorkingDirectory%/coder_sniffer/Drupal/Sniffs/Formatting/MultipleStatementAlignmentSniff.php
# PHPStan does not support variable variables, see https://github.com/phpstan/phpstan/issues/2810
-
count: 3
message: '~^Undefined variable: \$value[123]$~'
path: %currentWorkingDirectory%/coder_sniffer/Drupal/Sniffs/InfoFiles/ClassFilesSniff.php
-
count: 3
message: '~^Undefined variable: \$value[123]$~'
path: %currentWorkingDirectory%/coder_sniffer/Drupal/Sniffs/InfoFiles/DuplicateEntrySniff.php
# We don't want to introduce abstract methods for the 2 calls because
# the class is used in different ways where those methods are not
# always necessary for implementors.
-
count: 2
message: '~^Call to an undefined method Drupal\\Sniffs\\Semantics\\FunctionCall::(registerFunctionNames|processFunctionCall)\(\).$~'
path: %currentWorkingDirectory%/coder_sniffer/Drupal/Sniffs/Semantics/FunctionCall.php

0 comments on commit f5b6c88

Please sign in to comment.