Open main menu

Changes

2,414 bytes removed ,  26 February
link to the Testing section of Ansible
Testing ''is '' software development. Software development is writing code. Testing makes sure the code actually works, so in a nutshell: '''Testing is software development''' :-)
Software One major aspect of testing - especially '''during''' development and the [[Continuous Integration]] process, is writing code[[static analysis]]. Testing makes sure <blockquote>Program testing can be used to show the code actually workspresence of bugs, so in a nutshellbut never to show their absence!<ref>https: Testing is software development :-)//en.wikiquote.org/wiki/Edsger_W._Dijkstra</ref>
Phan is a static analyzer for PHP. [https://github.com/phan/phan Phan project on GitHub] It will help you write better PHP7 code. You'll need the [https://github.com/nikic/php-ast Abstract Syntax Tree] generated by PHPEdsger W. You can read a [https:Dijkstra (1970)<//github.com/phan/phan/wiki/Tutorial-for-Analyzing-a-Large-Sloppy-Code-Base tutorial for how to get Phan working in your project]blockquote>
The MediaWiki project uses Phan. == See the article [[mw:Continuous_integration/Phan|Continuous_integration/Phan]]also ==
==Links== #https://github.com/wikimedia/mediawiki-tools-phan#https://github.com/phan/phan#https://www.mediawiki.org/wiki/Continuous_integration/Entry_points#https://www.mediawiki.org/wiki/Continuous_integration/Phan#https://www.mediawiki.org/wiki/Best_practices_for_extensions#File_structure#https://github.com/nikic/php-ast ==Static Analysis of MediaWiki==For some current analysis see https://doc.wikimedia.org/mediawiki-core/master/phpmetrics/complexity.html The on-wiki documentation and even the upstream projects do not exactly provide a usable guide for '''MediaWiki extension''' developers to actually use Phan. If you download MediaWiki and composer update (to get dev dependencies) and also install PHP-AST, then you should be able to run composer phan or ./vendor/bin/phan -p . But, that analyzes the entire MediaWiki codebase, and does '''not''' analyze your extension (unless you specifically add a proper .phan/config.php file to your extension). * [[Mark HershbergerSoftware Quality]] provides a good example of what that might look like in his CommentStreams configuration<syntaxhighlight lang="php"><?php$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';$extensions = * [ "Echo", "SocialProfile" ];// Assume this extension exists in a directory with a bunch of other extensions that may, or may not be, $IP/extensions$extDir = realpath( __DIR__ . "/../.." );$dirList = array_filter( array_map( fn ( $dir ): string => "$extDir/$dir", $extensions ), fn ( $dir ): bool => is_dir( $dir ));$cfg['directory_list'] = array_merge( $cfg['directory_list'] ?? [], $dirList );$cfg['exclude_analysis_directory_list'] = array_merge( $cfg['exclude_analysis_directory_list'] ?? [], $dirList);$cfg['suppress_issue_types'][] = 'PhanUndeclaredConstant';return $cfg;</syntaxhighlight>the more traditional form of that is<syntaxhighlight lang="php">$cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php'; $cfgAnsible#Testing|Ansible ['directory_list'Testing] = array_merge( $cfg['directory_list'], [ '../../extensions/Echo', '../../extensions/SocialProfile', ]);$cfg['exclude_analysis_directory_list'] = array_merge( $cfg['exclude_analysis_directory_list'], [ '../../extensions/Echo', '../../extensions/SocialProfile', ]); return $cfg;</syntaxhighlight> ==PHPStan==https://phpstan.org/ ==Psalm==https://psalm.dev/
<br />
[[Category:Wiki]]
[[Category:MediaWiki]]
[[Category:Tools]]
[[Category:Continuous Integration]]
<references />