11

In the Python world there are multiple static code analysis tools that can be easily extended with custom checks via writing plugins or extensions, for example:

In the JavaScript world, as far as I understand, jshint is the number one tool for static code analysis. I've been using it for a while and it definitely helps to find lots of code style violations, but, recently, I've encountered the need to extend jshint with a custom check. How can I do that? Is it extendable?


I've looked through the documentation and the only thing I've found is how to write a custom reporter which is not what I'm looking for.

As a workaround, I guess I can fork the jshint repo, implement the check, and use the fork in the project maintaining updates from the upstream.

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
  • Of course, you can also fork it, add your check and create a pull request if you think it's a generally worthy check. :) – Ingo Bürk Dec 07 '14 at 10:36

2 Answers2

7

If I were you I would try to use something like ESLint. The ES stands for ECMAScript, which is where the rules for the JS language come from. Every single rule in ESLint is standalone (so you can use what you like), and you can use the default rules as a guideline or skeleton to create your own rule and plug it in.

Try ESLint.

J0e3gan
  • 8,740
  • 10
  • 53
  • 80
RadleyMith
  • 1,313
  • 11
  • 22
  • Great! `ESLint` is easily customizeable, you can plug in and out built-in rules, custom rules - awesome. Thank you very much! – alecxe Dec 14 '14 at 02:57
3

The ability to create custom JSHint rules has been discussed on the JSHint Google group, but that thread has had no activity in 17 months. Your only at this time is to use ESLint. ESLint was created with the explicit purpose of making each of the JSHint rules pluggable, and I think at this time, every JSHint rules is available in ESLint.

I-Lin Kuo
  • 3,220
  • 2
  • 18
  • 25
  • Decided to accept your answer as being more specific, but award a bounty to @Bradgnar for the initial idea about `ESLint`. Hope this sounds fair to you. Thanks again. – alecxe Dec 14 '14 at 07:14