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

Add static analyse like phpstan #42

Open
h4kuna opened this issue Jan 16, 2021 · 1 comment
Open

Add static analyse like phpstan #42

h4kuna opened this issue Jan 16, 2021 · 1 comment

Comments

@h4kuna
Copy link

h4kuna commented Jan 16, 2021

Hello,

i try add static analyse tool phpstan to project and here is output and choise what to do.

Here is commit where are changes https://github.com/h4kuna/GPIO/commit/93fa0c099d61d0a9fb9b2e3eb97032034ecfef8e run it by ./test/phpstan.

1 strict php functions

I will create new class with this php funcions what return two value and make it strictly like this. But here is need only fopen, fwrite and stream_get_contents.

And create own excenption instead of global RuntimeException.

 ------ --------------------------------------------------------------------------------------------------------------------------------- 
  Line   src/FileSystem/FileSystem.php                                                                                                    
 ------ --------------------------------------------------------------------------------------------------------------------------------- 
  29     Method PiPHP\GPIO\FileSystem\FileSystem::getContents() should return string but returns resource.                                
  29     Parameter #1 $result of method PiPHP\GPIO\FileSystem\FileSystem::exceptionIfFalse() expects resource|false, string|false given.  
  42     Method PiPHP\GPIO\FileSystem\FileSystem::putContents() should return int but returns resource.                                   
  42     Parameter #1 $result of method PiPHP\GPIO\FileSystem\FileSystem::exceptionIfFalse() expects resource|false, int|false given.     
  53     Offset 'message' does not exist on array('type' => int, 'message' => string, 'file' => string, 'line' => int)|null.              
 ------ --------------------------------------------------------------------------------------------------------------------------------- 

2 php typehint

Here are two way, make it strtly by php typehint or for this moment only by annotation. I'm vote for first choice and support with php 7.3+, it will be BC break. Here is opended PR #38

 ------ --------------------------------------------------------------------------------------------------- 
  Line   src/GPIO.php                                                                                       
 ------ --------------------------------------------------------------------------------------------------- 
  14     Property PiPHP\GPIO\GPIO::$fileSystem has no typehint specified.                                   
  15     Property PiPHP\GPIO\GPIO::$streamSelect has no typehint specified.                                 
  40     Method PiPHP\GPIO\GPIO::getOutputPin() has parameter $exportDirection with no typehint specified.  
 ------ --------------------------------------------------------------------------------------------------- 

 ------ ---------------------------------------------------------------------------------------------- 
  Line   src/Interrupt/InterruptWatcher.php                                                            
 ------ ---------------------------------------------------------------------------------------------- 
  10     Property PiPHP\GPIO\Interrupt\InterruptWatcher::$fileSystem has no typehint specified.        
  11     Property PiPHP\GPIO\Interrupt\InterruptWatcher::$streamSelect has no typehint specified.      
  12     Property PiPHP\GPIO\Interrupt\InterruptWatcher::$streams has no typehint specified.           
  13     Property PiPHP\GPIO\Interrupt\InterruptWatcher::$pins has no typehint specified.              
  14     Property PiPHP\GPIO\Interrupt\InterruptWatcher::$callbacks has no typehint specified.         
  43     Method PiPHP\GPIO\Interrupt\InterruptWatcher::register() has no return typehint specified.    
  62     Method PiPHP\GPIO\Interrupt\InterruptWatcher::unregister() has no return typehint specified.  
  78     Method PiPHP\GPIO\Interrupt\InterruptWatcher::watch() has no return typehint specified.       
 ------ ---------------------------------------------------------------------------------------------- 

 ------ ------------------------------------------------------------------------------------------------------- 
  Line   src/Interrupt/InterruptWatcherInterface.php                                                            
 ------ ------------------------------------------------------------------------------------------------------- 
  15     Method PiPHP\GPIO\Interrupt\InterruptWatcherInterface::register() has no return typehint specified.    
  22     Method PiPHP\GPIO\Interrupt\InterruptWatcherInterface::unregister() has no return typehint specified.  
  29     Method PiPHP\GPIO\Interrupt\InterruptWatcherInterface::watch() has no return typehint specified.       
 ------ ------------------------------------------------------------------------------------------------------- 

 ------ ----------------------------------------------------------------------------- 
  Line   src/Pin/InputPin.php                                                         
 ------ ----------------------------------------------------------------------------- 
  36     Method PiPHP\GPIO\Pin\InputPin::setEdge() has no return typehint specified.  
 ------ ----------------------------------------------------------------------------- 

 ------ -------------------------------------------------------------------------------------- 
  Line   src/Pin/InputPinInterface.php                                                         
 ------ -------------------------------------------------------------------------------------- 
  24     Method PiPHP\GPIO\Pin\InputPinInterface::setEdge() has no return typehint specified.  
 ------ -------------------------------------------------------------------------------------- 

 ------ ----------------------------------------------------------------------------------------------------------- 
  Line   src/Pin/OutputPin.php                                                                                      
 ------ ----------------------------------------------------------------------------------------------------------- 
  15     Method PiPHP\GPIO\Pin\OutputPin::__construct() has parameter $exportDirection with no typehint specified.  
  31     Method PiPHP\GPIO\Pin\OutputPin::setValue() has no return typehint specified.                              
 ------ ----------------------------------------------------------------------------------------------------------- 

 ------ ---------------------------------------------------------------------------------------- 
  Line   src/Pin/OutputPinInterface.php                                                          
 ------ ---------------------------------------------------------------------------------------- 
  12     Method PiPHP\GPIO\Pin\OutputPinInterface::setValue() has no return typehint specified.  
 ------ ---------------------------------------------------------------------------------------- 

 ------ ------------------------------------------------------------------------------------------------ 
  Line   src/Pin/Pin.php                                                                                 
 ------ ------------------------------------------------------------------------------------------------ 
  27     Property PiPHP\GPIO\Pin\Pin::$fileSystem has no typehint specified.                             
  28     Property PiPHP\GPIO\Pin\Pin::$number has no typehint specified.                                 
  30     Property PiPHP\GPIO\Pin\Pin::$exported has no typehint specified.                               
  57     Method PiPHP\GPIO\Pin\Pin::export() has no return typehint specified.                           
  72     Method PiPHP\GPIO\Pin\Pin::unexport() has no return typehint specified.                         
  82     Method PiPHP\GPIO\Pin\Pin::isExported() has no return typehint specified.                       
  92     Method PiPHP\GPIO\Pin\Pin::getDirection() has no return typehint specified.                     
  106    Method PiPHP\GPIO\Pin\Pin::setDirection() has no return typehint specified.                     
  106    Method PiPHP\GPIO\Pin\Pin::setDirection() has parameter $direction with no typehint specified.  
  163    Method PiPHP\GPIO\Pin\Pin::writePinNumberToFile() has no return typehint specified.             
 ------ ------------------------------------------------------------------------------------------------ 

 ------ ---------------------------------------------------------------------------------- 
  Line   src/Pin/PinInterface.php                                                          
 ------ ---------------------------------------------------------------------------------- 
  20     Method PiPHP\GPIO\Pin\PinInterface::export() has no return typehint specified.    
  25     Method PiPHP\GPIO\Pin\PinInterface::unexport() has no return typehint specified.  
 ------ ---------------------------------------------------------------------------------- 

 ------ ------------------------------------------------------------------------------------------------------ 
  Line   test/FileSystem/FileSystemTest.php                                                                    
 ------ ------------------------------------------------------------------------------------------------------ 
  11     Method PiPHP\Test\GPIO\FileSystem\FileSystemTest::testFileSystem() has no return typehint specified.  
  34     Method PiPHP\Test\GPIO\FileSystem\FileSystemTest::testBadFile() has no return typehint specified.     
 ------ ------------------------------------------------------------------------------------------------------ 

 ------ ---------------------------------------------------------------------------------------------------------------- 
  Line   test/Pin/OutputPinTest.php                                                                                      
 ------ ---------------------------------------------------------------------------------------------------------------- 
  12     Method PiPHP\Test\GPIO\Pin\OutputPinTest::testOutputPin() has no return typehint specified.                     
  28     Method PiPHP\Test\GPIO\Pin\OutputPinTest::testOutputPinIsNotDoubleExported() has no return typehint specified.  
 ------ ---------------------------------------------------------------------------------------------------------------- 

 ------ ------------------------------------------------------------------------------------------- 
  Line   test/Pin/InputPinTest.php                                                                  
 ------ ------------------------------------------------------------------------------------------- 
  11     Method PiPHP\Test\GPIO\Pin\InputPinTest::testInputPin() has no return typehint specified.  
 ------ ------------------------------------------------------------------------------------------- 

3 fix tests

Tests have specific errors. I will fix it at last.

 ------ --------------------------------------------------------------------------------------------------------- 
  Line   test/FileSystem/VFS.php                                                                                  
 ------ --------------------------------------------------------------------------------------------------------- 
  9      Property PiPHP\Test\GPIO\FileSystem\VFS::$vfs has no typehint specified.                                 
  11     Method PiPHP\Test\GPIO\FileSystem\VFS::open() should return resource but return statement is missing.    
  22     Method PiPHP\Test\GPIO\FileSystem\VFS::putContents() should return int but return statement is missing.  
  30     Parameter #2 $subject of function preg_match expects string, int|string given.                           
 ------ --------------------------------------------------------------------------------------------------------- 

 ------ ---------------------------------------------------------------------------------------------- 
  Line   test/Interrupt/InterruptWatcherTest.php                                                       
 ------ ---------------------------------------------------------------------------------------------- 
  11     Method PiPHP\Test\GPIO\InterruptWatcherTest::testWatcher() has no return typehint specified.  
  17     Cannot access offset 1 on array<resource>|false.                                              
  18     Cannot access offset 1 on array<resource>|false.                                              
  27     Cannot access offset 0 on array<resource>|false.                                              
  28     Cannot access offset 0 on array<resource>|false.                                              
  69     Cannot access offset 1 on array<resource>|false.                                              
  72     Cannot access offset 1 on array<resource>|false.                                              
  73     Cannot access offset 1 on array<resource>|false.                                              
  79     Cannot access offset 1 on array<resource>|false.                                              
  86     Cannot access offset 1 on array<resource>|false.                                              
  87     Cannot access offset 1 on array<resource>|false.                                              
 ------ ---------------------------------------------------------------------------------------------- 
@h4kuna
Copy link
Author

h4kuna commented Jan 21, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant