Update JSHint for new tool support and more reliable output parsing.

Review Request #11550 — Created March 23, 2021 and submitted — Latest diff uploaded




This updates JSHintTool to subclass the newer BaseTool, and to use
the newer features it offers (dependencies, improved configurable file
extension handling, and centralized base command building, and
standardized error code/column output).

The new version of the tool also passes a custom JSHint reporter that
returns simple JSON output containing only the information we need for
reporting. This eases parsing considerably, as we can guarantee that any
of the information we use for comments will be completely accurate.

Unit tests were added to cover the new JSHint parsing, and to provide
integration tests. These currently require doing a npm install jshint
in the bot/ directory to run.

Unit tests pass on Python 2.7 and 3.x.

Manually tested the jshint tool with the custom reporter, and parsed
using that data.

There are plans to add integration tests for tools down the road, but
that will require some additional work.