When using proc_open() with 'bypass_shell' => true on Windows,
file extensions other than .exe will not be resolved. Various linters
therefore don't work, such as jshint, which is actually jshint.cmd.
The problem was already observed and fixed in some places (e.g.
ArcanistGitAPI trying to run git), but not in ArcanistExternalLinter.
Changes:
- Fix Filesystem::resolveBinary() to actually only resolve executable files on Windows, and not any other files with no extension or with an extension listed in %PATHEXT%. Those files can be executed by typing their name in the cmd.exe shell, but not directly by low-level Windows functions, and we're using 'bypass_shell' to bypass the shell.
- Fix ArcanistExternalLinter::getBinary() to call Filesystem::resolveBinary() on Windows.