This function has too many statements. (41)

26.6k views Asked by At

I have this controller

  .controller('ctrl', function($scope, $rootScope, $timeout, $alert, 
                               $location, $tooltip, $popover, BetSlipFactory, 
                               AccordionsFactory, AuthFactory, 
                               RiskWinCalculations) {...});

and, I am getting this error due to jshint:

line 10 col 44 This function has too many statements. (41)

so, what should I do to avoid it ?

5

There are 5 answers

4
Reacting On BEST ANSWER

It doesn't mean poorly managed code as @pankajparkar says before, it could be because you have something like this, lets say this from one of my projects:

  $scope.betLoader = false;
  $scope.showIfbetAlerts = true;
  $scope.displayStraight = true;
  $scope.displayParlay = true;
  $scope.displayIfBet = true;
  $scope.displayTeaser = true;
  $scope.displayPleaser = true;
  $scope.displayReverse = true;
  $scope.unavailableBet = false;
  $scope.subAccordion = false;
  $scope.betTypeShow = false;
  $scope.showStraight = true;

you can do this:

$scope.setInitialState = function() {
  $scope.betLoader = false;
  $scope.showIfbetAlerts = true;
  $scope.displayStraight = true;
  $scope.displayParlay = true;
  $scope.displayIfBet = true;
  $scope.displayTeaser = true;
  $scope.displayPleaser = true;
  $scope.displayReverse = true;
  $scope.unavailableBet = false;
  $scope.subAccordion = false;
  $scope.betTypeShow = false;
};
$scope.setInitialState();

that will fix it.

UPDATE

Let me explain:

it is not only related with the dependencies, jslint throws this error when there are too many statements, he says before on line ten which is where the controller begins, so parting from there, he should have too many statements, if you put all those statements in 1 function, those statements will be reduce to 1 :)

0
nicholas On

The best way to get rid of the error would be to edit your jshint settings to not display it.

http://jshint.com/docs/options/#maxstatements

That's a very wishy-washy jshint warning that doesn't really mean anything.

Normally, a function that requires more than 4 or 5 parameters is a bad idea for a lot of reasons, but isn't technically wrong. In this case those params are Angular's way of defining dependencies, so shouldn't be a problem. If the code works, I wouldn't worry about it.

0
Ivanka Tashkova On

You can disable it using

/* eslint-disable max-statements */
1
kamal pandey On

If the controller wants more statements and you don't have any other method to remove it then go to your .jshintrc file and edit it like

"maxstatements": 80, // or whatever number you want'

thanks

0
afkhero On

In ESLint, you can do something like this:

/*eslint max-statements: ["error", 50, { "ignoreTopLevelFunctions": true }]*/

You can replace the 50 with whatever max you want as needed.

See documentation here: ESLint Setting Max Statements