ajafff/tslint-consistent-codestyle

Cannot read property 'kind' of undefined at rules/noUnusedRule.js:155:69

Closed this issue · 4 comments

Hey, had a weird issue since TypeScript v3.2.x where this package throws "TypeError: Cannot read property 'kind' of undefined". I've noticed that there are some potentially related issues in the TypeScript repository (listed below).

microsoft/TypeScript#28810
microsoft/TypeScript#30269

Here is our build pre v3.2.x: https://circleci.com/gh/LearningLocker/xapi-activities/4286
Here is our build post v3.2.x: https://circleci.com/gh/LearningLocker/xapi-activities/4269

Current Dependencies

"tslint": "5.14.0",
"tslint-consistent-codestyle": "1.15.1",
"tslint-immutable": "4.9.1",
"typescript": "3.3.3"

Stack trace of error when running TSLint.

The 'no-unused' rule threw an error in '/Applications/AMPPS/www/xapi-activities/src/mongoModelsRepo/patchProfile.ts':
TypeError: Cannot read property 'kind' of undefined
    at isUpdate (/Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint-consistent-codestyle/rules/noUnusedRule.js:155:69)
    at filterWriteOnly (/Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint-consistent-codestyle/rules/noUnusedRule.js:125:63)
    at /Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint-consistent-codestyle/rules/noUnusedRule.js:56:24
    at Map.forEach (<anonymous>)
    at UnusedWalker.walk (/Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint-consistent-codestyle/rules/noUnusedRule.js:37:15)
    at Rule.AbstractRule.applyWithWalker (/Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint/lib/language/rule/abstractRule.js:31:16)
    at Rule.apply (/Applications/AMPPS/www/xapi-activities/node_modules/@ht2-labs/typescript-project/node_modules/tslint-consistent-codestyle/rules/noUnusedRule.js:18:21)
    at Linter.applyRule (/Applications/AMPPS/www/xapi-activities/node_modules/tslint/lib/linter.js:214:29)
    at /Applications/AMPPS/www/xapi-activities/node_modules/tslint/lib/linter.js:155:85
    at Object.flatMap (/Applications/AMPPS/www/xapi-activities/node_modules/tslint/lib/utils.js:160:29)

Code at top of stack trace.

case ts.SyntaxKind.BinaryExpression:
    if (tsutils_1.isAssignmentKind(parent.operatorToken.kind))
        return parent.right === use &&
            parent.left.kind === ts.SyntaxKind.Identifier &&
            parent.left.text === identifier.text;
    use = parent;
    break;

Log of parent property.

NodeObject {
  pos: 1953,
  end: 1970,
  flags: 16384,
  transformFlags: 536870912,
  parent: 
   NodeObject {
     pos: 1859,
     end: 2998,
     flags: 16384,
     transformFlags: 546308250,
     parent: 
      NodeObject {
        pos: 799,
        end: 4408,
        flags: 16384,
        transformFlags: 546308250,
        parent: [Object],
        kind: 218,
        multiLine: true,
        statements: [Array] },
     kind: 222,
     expression: [Circular],
     thenStatement: 
      NodeObject {
        pos: 1971,
        end: 2998,
        flags: 16384,
        transformFlags: 546308250,
        parent: [Circular],
        kind: 218,
        multiLine: true,
        statements: [Array],
        locals: [Object],
        nextContainer: [Object] },
     elseStatement: undefined },
  kind: 202,
  operator: 52,
  operand: 
   IdentifierObject {
     pos: 1954,
     end: 1970,
     flags: 16384,
     parent: [Circular],
     escapedText: 'checkIfNoneMatch',
     flowNode: { flags: 1552, antecedent: [Object], node: [Object] },
     transformFlags: 536870912 } }

This looks like a dependency issue. There are two different versions of TypeScript installed: tslint and tsutils use typescript@3.2.1 while tslint-consistent-codestyle uses typescript@3.0.3. That mismatch causes everything to blow up.

The issue is this package: https://github.com/LearningLocker/xapi-activities/blob/dcc04c22a8ae8636933ec9ef5a75790c25558f6f/package-lock.json#L119-L155

Hmmm really not sure what the issue is, had a dig through this morning, still saw errors when everything was at 3.0.3, just not as many of those errors.

I have the same issue. Lots of TypeError: Cannot read property 'kind' of undefined.

package.json:

"tslint": "^5.17.0",
"tslint-consistent-codestyle": "^1.15.0",
"typescript": "~3.4",
tsc -v
Version 3.4.5

tslint -v
5.17.0
...
The 'import-blacklist' rule threw an error in '*****/src/app/*****.component.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/app/*****.module.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/*****.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/*****.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/*****.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/*****.ts':
TypeError: Cannot read property 'kind' of undefined
    at ImportFinder._findImports (*****\node_modules\tsutils\util\util.js:1037:47)
    at ImportFinder.find (*****\node_modules\tsutils\util\util.js:1025:14)
    at Object.findImports (*****\node_modules\tsutils\util\util.js:999:50)
    at walk (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:122:37)
    at Rule.AbstractRule.applyWithFunction (*****\node_modules\tslint\lib\language\rule\abstractRule.js:39:9)
    at Rule.apply (*****\node_modules\tslint\lib\rules\importBlacklistRule.js:36:21)
    at Linter.applyRule (*****\node_modules\tslint\lib\linter.js:214:29)
    at *****\node_modules\tslint\lib\linter.js:155:85
    at Object.flatMap (*****\node_modules\tslint\lib\utils.js:160:29)
    at Linter.getAllFailures (*****\node_modules\tslint\lib\linter.js:155:32)
The 'import-blacklist' rule threw an error in '*****/src/*****.ts':
...
lots of more errors
...

in yarn.lock I saw that Typescript v2 was required by an old package called typings, I removed it and now it's all good