Gobi Dasu
Gobi Dasu

Reputation: 469

eslint-plugin-angular this.variable causing has no method 'findIndex'

I noticed that if I complete steps here https://github.com/Gillespie59/eslint-plugin-angular and the run eslint it runs fine on most files but it results in the following problem on files with a this variable in it.

For instance, if I have the following file:

function profileCtrl($scope, dataFactory) {
    $scope.buttonDisabled = false;
    $scope.loading = false;

    $scope.user = {};

    function readUser(userId) {
        $scope.buttonDisabled = true;
        $scope.loading = true;
        dataFactory.readUser(userId).then(function(res){
            $scope.user = res.data;
            $scope.buttonDisabled = false;
            $scope.loading = false;
        });
    };    
}

Then eslint will spit out:

/home/ubuntu/sample/app/components/profile/profile.js
   1:10  error  'dataFactory' is defined but never used                                                      no-unused-vars
   1:21  error  Missing space before function parentheses                                                    space-before-function-paren
   2:5   error  Expected indentation of 2 space characters but found 4                                       indent
   2:25  error  Extra semicolon                                                                              semi
   4:5   error  Expected indentation of 2 space characters but found 4                                       indent
   5:9   error  Expected indentation of 6 space characters but found 8                                       indent
   5:57  error  Extra semicolon                                                                              semi
   6:6   error  Extra semicolon                                                                              semi
   7:5   error  Expected indentation of 2 space characters but found 4                                       indent
   7:54  error  Identifier 'first_name' is not in camel case                                                 camelcase
   7:66  error  Identifier 'last_name' is not in camel case                                                  camelcase
   8:9   error  Expected indentation of 6 space characters but found 8                                       indent
   8:9   error  You should use the "log" method of the AngularJS Service $log instead of the console object  angular/log
   8:86  error  Extra semicolon                                                                              semi
   9:9   error  Expected indentation of 6 space characters but found 8                                       indent
  10:13  error  Expected indentation of 10 space characters but found 12                                     indent
  11:13  error  Expected indentation of 10 space characters but found 12                                     indent
  12:13  error  Expected indentation of 10 space characters but found 12                                     indent
  13:13  error  Expected indentation of 10 space characters but found 12                                     indent
  14:10  error  Extra semicolon                                                                              semi
  15:9   error  Expected indentation of 6 space characters but found 8                                       indent
  15:26  error  Extra semicolon                                                                              semi
  16:9   error  Expected space or tab after '/*' in comment                                                  spaced-comment
  22:6   error  Extra semicolon                                                                              semi
  23:5   error  Expected indentation of 2 space characters but found 4                                       indent
  23:23  error  Extra semicolon                                                                              semi
  26:10  error  'profileCtrl' is defined but never used                                                      no-unused-vars
  26:21  error  Missing space before function parentheses                                                    space-before-function-paren
  27:5   error  Expected indentation of 2 space characters but found 4                                       indent
  27:34  error  Extra semicolon                                                                              semi
  28:5   error  Expected indentation of 2 space characters but found 4                                       indent
  28:27  error  Extra semicolon                                                                              semi
  30:5   error  Expected indentation of 2 space characters but found 4                                       indent
  30:21  error  Extra semicolon                                                                              semi
  32:5   error  Expected indentation of 2 space characters but found 4                                       indent
  32:14  error  'readUser' is defined but never used                                                         no-unused-vars
  32:22  error  Missing space before function parentheses                                                    space-before-function-paren
  33:9   error  Expected indentation of 6 space characters but found 8                                       indent
  33:37  error  Extra semicolon                                                                              semi
  34:9   error  Expected indentation of 6 space characters but found 8                                       indent
  34:30  error  Extra semicolon                                                                              semi
  35:9   error  Expected indentation of 6 space characters but found 8                                       indent
  35:51  error  Missing space before function parentheses                                                    space-before-function-paren
  35:56  error  Missing space before opening brace                                                           space-before-blocks
  36:13  error  Expected indentation of 10 space characters but found 12                                     indent
  36:35  error  Extra semicolon                                                                              semi
  37:13  error  Expected indentation of 10 space characters but found 12                                     indent
  37:42  error  Extra semicolon                                                                              semi
  38:13  error  Expected indentation of 10 space characters but found 12                                     indent
  38:35  error  Extra semicolon                                                                              semi
  39:11  error  Extra semicolon                                                                              semi

✖ 51 problems (51 errors, 0 warnings)

Notice it's even doing angular checking. However, if the file is this:

function profileCtrl($scope, dataFactory) {
    $scope.buttonDisabled = false;
    $scope.loading = false;

    $scope.user = {};

    function readUser(userId) {
        $scope.buttonDisabled = true;
        $scope.loading = true;
        dataFactory.readUser(userId).then(function(res){
            $scope.user = res.data;
            $scope.buttonDisabled = false;
            $scope.loading = false;
        });
    };


    this.updateUser = null;

}

Then, I get the following error:

ubuntu@ip-172-31-30-67:~/sample/app$ /home/ubuntu/node_modules/eslint/bin/eslint.js components/profile/profile.js 
Object [object Object],[object Object],[object Object],[object Object],[object Object],[object Object] has no method 'findIndex'
TypeError: Object [object Object],[object Object],[object Object],[object Object],[object Object],[object Object] has no method 'findIndex'
    at isClassDeclaration (/home/ubuntu/node_modules/eslint-plugin-angular/rules/controller-as-vm.js:65:26)
    at EventEmitter.ThisExpression (/home/ubuntu/node_modules/eslint-plugin-angular/rules/controller-as-vm.js:80:18)
    at EventEmitter.emit (events.js:117:20)
    at NodeEventGenerator.enterNode (/home/ubuntu/node_modules/eslint/lib/util/node-event-generator.js:40:22)
    at CodePathAnalyzer.enterNode (/home/ubuntu/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js:607:23)
    at CommentEventGenerator.enterNode (/home/ubuntu/node_modules/eslint/lib/util/comment-event-generator.js:97:23)
    at Controller.traverser.traverse.enter (/home/ubuntu/node_modules/eslint/lib/eslint.js:905:36)
    at Controller.__execute (/home/ubuntu/node_modules/eslint/node_modules/estraverse/estraverse.js:397:31)
    at Controller.traverse (/home/ubuntu/node_modules/eslint/node_modules/estraverse/estraverse.js:501:28)
    at Controller.Traverser.controller.traverse (/home/ubuntu/node_modules/eslint/lib/util/traverser.js:36:33)

How do I solve this problem.

Upvotes: 2

Views: 504

Answers (1)

Scotty Waggoner
Scotty Waggoner

Reputation: 3380

This was failing on Travis for me. From this comment I figured out that it was probably a node version issue. Try updating node. It seems to work with 6.3.

Upvotes: 2

Related Questions