[etsy/phan](https://github.com/etsy/phan) is a static analysis tool for PHP. [I got Travis CI running phan against the MobileFrontend codebase](https://github.com/wikimedia/mediawiki-extensions-MobileFrontend/compare/master...phuedx:phan), the output of which is [here](https://travis-ci.org/phuedx/mediawiki-extensions-MobileFrontend/builds/125532463#L307).
Very nearly all of the errors are caused by DocBlocks not correctly enumerating the types of arguments or return types of methods. There are, however, two [LSP](https://en.wikipedia.org/wiki/Liskov_substitution_principle) violations: [one in SpecialMobileContributions#getDesktopUrl](https://travis-ci.org/phuedx/mediawiki-extensions-MobileFrontend/builds/125532463#L318); and [one in SpecialMobileWatchlist#formatComment](https://travis-ci.org/phuedx/mediawiki-extensions-MobileFrontend/builds/125532463#L325).
Let's keep our DocBlocks current and our subtypes substitutable!