Tslint: Release 3.10.0 breaks backward compatibility

Created on 10 May 2016  路  8Comments  路  Source: palantir/tslint

The recent release is erroring, feel free to close if you feel it's acceptable - I just wanted to mention it since 3.10.0 is meant to be a backward compatible release: https://github.com/TypeStrong/ts-node/pull/109.

Bug Report

  • TSLint version: 3.10.0
  • TypeScript version: any
  • Running TSLint via: CLI

    Actual behavior

/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/rules/memberOrderingRule.js:210
        this.memberStack[this.memberStack.length - 1].push(node);
                                                     ^
TypeError: Cannot read property 'push' of undefined
    at MemberOrderingWalker.pushMember (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/rules/memberOrderingRule.js:210:54)
    at MemberOrderingWalker.visitMethodDeclaration (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/rules/memberOrderingRule.js:149:14)
    at MemberOrderingWalker.SyntaxWalker.visitNode (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:342:22)
    at /home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:441:63
    at visitEachNode (/home/travis/build/TypeStrong/ts-node/node_modules/typescript/lib/typescript.js:7255:30)
    at Object.forEachChild (/home/travis/build/TypeStrong/ts-node/node_modules/typescript/lib/typescript.js:7357:24)
    at MemberOrderingWalker.SyntaxWalker.walkChildren (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:441:12)
    at MemberOrderingWalker.SyntaxWalker.visitObjectLiteralExpression (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:148:14)
    at MemberOrderingWalker.SyntaxWalker.visitNode (/home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:363:22)
    at /home/travis/build/TypeStrong/ts-node/node_modules/tslint/lib/language/walker/syntaxWalker.js:441:63

Expected behavior

Still valid.

P1 Fixed Bug

Most helpful comment

thanks for the report @blakeembrey! we'll try to get a patch out ASAP

All 8 comments

thanks for the report @blakeembrey! we'll try to get a patch out ASAP

do you know which source file TSLint crashed on?

Unfortunately, no. Just know the test failed, haven't gone through to debug why yet. Can only check that tomorrow or this weekend.

Looks like it's failing on https://github.com/TypeStrong/ts-node/blob/master/src/ts-node.ts

I'll try to fix this late tonight, unless you get a chance sooner @adidahiya

Should be fixed and new releases are published. Let me know if you run into any further problems!

I still get this issue on 3.10.1. @JKillian

@ianks Could you give an example of code where you get this error?

I do not have a code example (I am not sure where to find out where this bug is being caused.

But here is the node object:

{ accessLevel: 2,
  isConstructor: false,
  kind: 1,
  membership: 0,
  node: 
   NodeObject {
     kind: 144,
     pos: 353,
     end: 439,
     flags: 0,
     parent: 
      NodeObject {
        kind: 189,
        pos: 311,
        end: 443,
        flags: 0,
        parent: [Object],
        decorators: undefined,
        name: undefined,
        typeParameters: undefined,
        heritageClauses: [Object],
        members: [Object] },
     decorators: undefined,
     asteriskToken: undefined,
     name: 
      NodeObject {
        kind: 69,
        pos: 353,
        end: 364,
        flags: 0,
        parent: [Circular],
        text: 'render' },
     questionToken: undefined,
     typeParameters: undefined,
     parameters: [ pos: 365, end: 365 ],
     body: 
      NodeObject {
        kind: 195,
        pos: 366,
        end: 439,
        flags: 0,
        parent: [Circular],
        statements: [Object] } } }

And the this.memberStack is an empty array []:

Note

Here is how I examined the code:

    MemberOrderingWalker.prototype.pushMember = function (node) {
      try{
        this.memberStack[this.memberStack.length - 1].push(node);
      } catch(e) {
        console.log(node);
        console.log(this.memberStack);
        throw e;
      }
    };
Was this page helpful?
0 / 5 - 0 ratings