Search code examples
javascriptjshintcyclomatic-complexity

Turn on cyclmatic complexity in JSHint


I am using JSHint and I want to turn on cyclomatic complexity.
From JsHint homepage and JsHint Docs , JsHint seem to be able to measure it.
But after I ran this command jshint test.js to test the below file

//test.js
$(document).ready(function() {
    $("p").click(function() {
        $(this).hide();
        var x = 5
    });

    function main() {
        return 'Hello, World!';
    }
});

I only get the linting report (test.js: line 4, col 14, Missing semicolon., ...)

How can I do this?


Solution

  • From the API docs, it looks like you can call JSHINT.data() after linting to get the metrics, which includes measuring complexity:

    JSHINT.data()

    Generate a report containing details about the most recent invocation of JSHINT.

    For example, the following code:

    var source = [
      'function goo() {}',
      'foo = 3;'
    ];
    var options = {
      undef: true
    };
    var predef = {
      foo: false
    };
    
    JSHINT(source, options, predef);
    
    console.log(JSHINT.data());
    

    ...will produce the following output:

    {
      functions: [
        {
          name: 'goo',
          // ...
          metrics: {
            complexity: 1,
            parameters: 0,
            statements: 0
          }
          // ...
    

    This will display the measured complexity.

    Note that this is completely separate from the maxcomplexity rule - if enabled, and you set it low enough, and you have a function complex enough, your linting output will include an error.