Currently pretty much every external linter has copy-pasted the following code (with minor variations):
public function getVersion() { list($stdout) = execx('%C --version', $this->getExecutableCommand()); $matches = null; if (!preg_match('/^v(?P<version>\d+\.\d+\.\d+)$/', $stdout, $matches)) { return null; } return $matches['version']; }
We can reduce the boilerplate code here by providing a simpler interface consisting of getVersionFlags and parseVersionOutput, similar to getMandatoryFlags and parseLinterOutput. This change also makes it possible for me to proxy the getVersion method in [[https://github.com/freelancer/flarc/blob/master/src/lint/linter/ArcanistDockerContainerLinterProxy.php | ArcanistDockerContainerLinterProxy]].