Arcanist does not aggregate exceptions pertaining to missing external linters. We have four external linters configured (ArcanistCSSLintLinter, ArcanistLesscLinter, ArcanistJSHintLinter and ArcanistJSONLintLinter) and new devs end up doing something like this:
- Writing some code.
- arc diff
- Arcanist throws an exception because csslint is not installed.
- sudo npm install -g csslint
- arc diff
- Arcanist throws an exception because lessc is not installed.
- sudo npm install -g less
- arc diff
- Arcanist throws an exception because jshint is not installed.
- sudo npm install -g jshint
- arc diff
- Arcanist throws an exception because jsonlint is not installed.
- sudo npm install -g jsonlint
- arc diff (finally...)
This process is pretty painful and could be handled a lot better by allowing these exceptions to aggregate and just throwing a PhutilAggregateException instead. Probably we should define a new subclass of ArcanistUsageException for ArcanistExternalLinterException to differentiate these types of exceptions.