Open main menu

Changes

m
wip
==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 Hershberger]] 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'; $cfg['directory_list'] = 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/